Entwickler-Ecke
Multimedia / Grafik - Farbverläufe
alexschultze - Sa 17.05.03 00:24
Titel: Farbverläufe
hi,
ich würde es gern realisieren das ein schwarzes Label nach dem Entern der Maus langsam ins rote verfärbt, aber nicht sofort.
Hierfür bräuchte ich einen Farbverlauf, habe aber nix gefunden wie das geht und mit $0000FF hexadezimalzahlen kann man schlecht rechnen...
alex
Mike_C - Sa 17.05.03 14:26
Hi Alex
Die Farben, die Delphi verwendet sind natürlich RGB Werte. Du kannst in Delphi eine Farbe auch "erzeugen", in dem du die RGB-Werte einzeln angibst; dazu gibt's die Funktion RGB;
Quelltext
1: 2:
| //Beispiel Label1.Color := RGB(255,0,0); //<-- mach das Label rot |
Wenn du einen Farbverlauf willst, würde ich das etwa so machen (reicht Pseudo-Code?!)
Quelltext
1: 2: 3: 4:
| For i := 0 to SchrittCount-1 do begin SetNextColorShade; Application.ProcessMessages; {wichtig, sonst siehst du nix} end; |
Am besten du schriebst dir wirklich eine Procedure SetNextColorShade, in der du einen bestimmten Wert (z.B. 16) zum "Rot-Wert" addiert und diesen dann mit RGB der Farbe vom Label zuweist.
Klar? oder noch Fragen?
alexschultze - Sa 17.05.03 14:52
ich hab es mit RGB(rot,grün,blau) gemacht und einfach die aktuellen Were ausgelesen mit:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function GetBlue(Color: TColor):Byte; begin Result:=(Integer(Color) shl 8) shr 24; end;
function GetGreen(Color: TColor):Byte; begin Result:=(Integer(Color) shl 16) shr 24; end;
function GetRed(Color: TColor):Byte; begin Result:=(Integer(Color) shl 24) shr 24; end; |
<Thread Closed ;)>
Mike_C - Sa 17.05.03 16:16
ich weiß grade nicht, was du mir damit sagen willst. ich verstehe auch nicht wirklich, warum du die aktuellen werte auslesen willst.
du willst doch einen Farbverlauf von Schwar nach Rot oder? Dann sind doch die Anfangswerte:
R=0; B=0; G=0;
oder? Um den Farbverlauf zu machen, änderst du nur den R-Wert. zum Beispiel so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| //Beispiel: Form färbt sich langsam rot, wenn man auf den Knopf drückt procedure TForm1.Button1Click(Sender: TObject); var i,j,x,r: integer; begin x := 0; for i := 0 to (255 div 16)-1 do begin inc (x, 16); r := -255 + x; Form1.Color := RGB(255+r,0,0); for j := 0 to 100000 do Application.ProcessMessages; //<--- Delay, damit man was sieht!!! Je höher man die obere Grenze setzt, desto langsamer ist das fading end; end; |
alexschultze - Sa 17.05.03 16:57
wäre auch möglich. ich habe das aber in einem Timer oben drinne dadurch erreiche ich langsames Fading bei dem ich problemlos arbeiten kann.
:)
Mike_C - Sa 17.05.03 17:06
bei einem Teimer kannes aber leicht passieren, dass du die "Übergänge" nur sprunghaft bekommst (durch das Intervall). kannst du mal posten, wie du das gemacht hast? mich wprd's interessieren
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!