Folgender 'Farbverlauf' mit Standardelementen realisierbar?



  • Hi Leute.

    Ich möchte mein Programm umschreiben, mit dem Farbabläufe für eine RGB-Lichterkette / Moodlight erstelle. Mit ListBoxes und ein wenig Denkarbeit vom Anwender habe ich es bereits realisiert, aber ich würde das ganze gerne etwas intuitiver gestalten:

    * Ein großes Fenster, nach rechts scrollbar, um die Zeitachse darzustellen.
    * Nach unten hin sollen der Anzahl der Lichtmodule entsprechend Zeilen eingeblendet werden.
    * Schön wäre es, wenn man jede Zeile ähnlich einer Liste mit Add() etc. hinzufügen und löschen kann und nicht gleich das Pen-Tool zückt..

    Meine Idee sieht ungefähr so aus:
    (sry, mit Touchpad aus anderen programmen zusammenkopiert und gezeichnet 😉

    http://nippey.homeip.net/Files/entwurf.png
    (Ich denke, ich weiß gut genug, dass das niemals, besonders nicht mit std-elementen, so nachzubauen ist, aber ich habe mir Ideen erhofft, wie ich eventuell um eine riesige canvas herumkommen kann.

    Ich wäre schon glücklich, wenn ich einfach ne farbige box jeweils in die mitte bekomme...

    Wäre echt cool, wenn jemand eine Idee hätte



  • Hallo

    Das wirst du mit Sicherheit nur durch Canvas-Operationen sauber hinbekommen.

    bis bald
    akari



  • Najut,

    dann muss ich da durch..

    Ich bedanke mich trotzdem! 😉



  • Ich bin mir nicht sicher, ob du dass suchst:

    for(int Position = 1; Position<=Bildbreite; Position+)
    {
        long double RedVal = ((StrToFloat(RedStart->Text)/Bildbreite)*(Bildbreite-Position))+((StrToFloat(RedEnd->Text)/Bildbreite)*(Position));
        long double GreenVal = ((StrToFloat(GreenStart->Text)/Bildbreite)*(Bildbreite-Position))+((StrToFloat(GreenEnd->Text)/Bildbreite)*(Position));
        long double BlueVal = ((StrToFloat(BlueStart->Text)/Bildbreite)*(Bildbreite-Position))+((StrToFloat(BlueEnd->Text)/Bildbreite)*(Position));
        String RedStr = FloatToStrF(RedVal, ffNumber, 10, 0);
        String GreenStr = FloatToStrF(GreenVal, ffNumber, 10, 0);
        String BlueStr = FloatToStrF(BlueVal, ffNumber, 10, 0);
        Output->Canvas->Pen->Color = StringToColor("0x00" + IntToHex(StrToInt(BlueStr), 2) + IntToHex(StrToInt(GreenStr), 2) + IntToHex(StrToInt(RedStr), 2));
        Output->Canvas->MoveTo(Position, 0);
        Output->Canvas->LineTo(Position, Bildhöhe);
    }
    

    Der Code ist etwas Unformatiert, aber es sollte gehen...



  • Hey danke,

    Code habe ich gar nicht erwartet 😉
    Sieht auf den ersten Blick so aus, als ob du mit dem Code die schrägen Linien in Farbe zeichnest?

    Ich bau mir am Wochenende zunächst mal ne Klasse, die verschiedene Zeilen verwaltet.
    Ich werde ihn dann aber auf jeden Fall mal testen.

    thxx



  • hab ich vergessen zu erwaehnen: RedStart, RedEnd (und das selbe mit gruen und blau) sind integer mit einem wert zwischen 0 und 255. output ist ein TImage und bildhoehe und bildbreite sind height und width vom image output. ich hab den code erst gerade kuerzlich geschrieben und holte ich einfach wieder hervor.

    ps. ich schreibe vom psp aus, das ist der grund fuer meine schreibweise...


Anmelden zum Antworten