![]() |
Textfarbe faden
Hi, ich will bei die Textfarbe von zb nem Label , welche bei mir am anfang die standartfarbe hat(die graue Form-Farbe), auf schwarz faden, also dass se durch nen timer langsam verändert wird. Mein Problem ist nun, dass ich nicht weis, wie ich das näher ans schwarze rankrieg, da ja auch buchstaben drin sind (zB. $00E7B6C6). Oder kann man den Farbwert noch anders mitteilen, was einfacher wäre, zu faden?
|
Re: Textfarbe faden
Mach's so:
Delphi-Quellcode:
rotWert bis blauWert sind vom Typ Byte, und 0 ist ganz Dunkel, 255 ganz Hell. Wenn alle 3 Werte gleich sind, hast du Graustufen.
Label1.Color := rgb(rotWert, gruenWert, blauWert);
gruss, dizzy |
Re: Textfarbe faden
Das $ vorne steht dafür, dass der Wert Hexadezimal notiert ist, daher die Buchstaben. :P
Im Endeffekt kannst du ganz leicht schwarz faden, indem du die Werte für RGB (Delphi notiert sie BGR soweit ich weiß) gleichmäßig an Null annäherst. Der Wert schlüsselt sich so auf: $00BBGGRR, d.h. ein Byte (0-255) für jeden Farbanteil. Um diesen zu verringern könntest du einfach einfach
Delphi-Quellcode:
In den Timer einbinden.
LabelFade.Font.Color := LabelFade.Font.Color - (1 shl 16) - (1 shl 8) - 1;
(Eine Überprüfung ob der Wert nicht schon kleiner als 0 (also $00000000 für Schwarz) ist, müsste sicherheitshalber natürlich auch dazu.) Falls du dich jetzt fragst was shl macht: SHL = shift left (Schiebe links) Das ist eine binäre Operation, d.h. 1 shl 1 wäre 2 weil 0001b eins nach links geschoben 0010b also 2 dezimal wäre. 1 SHL 8 schiebt die eins also an die Stelle wo das neue Byte anfängt (in diesem Falle das für Grün) und 1 SHL 16 logischerweise an die Stelle wo Blau anfängt. Damit kannst du dir schwieriges (Kopf-)Rechnen sparen und hältst den Code leichter verständlich. :P Ich hoffe natürlich, dass du dich mit den Zahlensystemen Hexadezimal und Binär schon ein wenig auskennst. ^^ |
Re: Textfarbe faden
Also theoretisch klappt der code, nur hab ich das problem, dass wenn das Label am anfang eine Farbe wie z.b. clBtnFace oder andere Formen davon, ausgenommen den werten wie clBlue usw. hat, dass das direkt schwarz wird. Sonst fadet der.
Delphi-Quellcode:
Wenn ich den Teil aktiviere, der beim starten der Form ausgeführt wird, klappt es, obwohl das genau der Farbwert ist, den clBtnFace hat. Kann mir jemand sagen warum der dass macht?
procedure Tf_strasse.Timer1Timer(Sender: TObject);
begin if(label3.color<>$00000000) then Label3.Color := Label3.Color - (1 shl 16) - (1 shl 8) - 1 else timer1.enabled:=false; end; procedure Tf_strasse.FormCreate(Sender: TObject); begin //label3.color:= rgb(212,208,200); end; |
Re: Textfarbe faden
Bei:
Delphi-Quellcode:
würd ich eher:
Label3.Color := Label3.Color - (1 shl 16) - (1 shl 8) - 1
Delphi-Quellcode:
TColor speichert bekannte Farben "cl*" soweit ich weiss nicht als Farbwert, sondern als den Namen "cl*". Daher musst du erst Umwandeln!
Label3.Color := ColorToRGB(Label3.Color) - (1 shl 16) - (1 shl 8) - 1
und: 1 shl 16 = 65536 1 shl 8 = 256 sparst dir damit 2 Berechungen. \edit: Noch besser: (1 shl 16) - (1 shl 8) - 1 = 65536 - 256 - 1 = 65279 Dann erkennt zwar kein Mensch merh, was su da machst, aber nu ;) Aber besser meinen Beitrag hier drunter anschauen *g*. gruss, dizzy |
Re: Textfarbe faden
Nochwas!!!
Wenn du mit "nicht-grauen" Farben arbeitest, kann das recht unschön werden! Mein Tipp:
Delphi-Quellcode:
Da du aber nur subtrahierst, und auch immer nur 1, reicht folgendes:
var
r,g,b : Integer; c : LongInt; // Color ist ein LongInt ! . . . c := ColorToRGB(Label1.Color); r := GetRValue(c)-1; if r < 0 then r := 0; // Bereichsprüfung, sonst wird's unschön! if r > 255 then r := 255; // Bereichsprüfung, sonst wird's unschön! g := GetGValue(c)-1; if g < 0 then g := 0; // Bereichsprüfung, sonst wird's unschön! if g > 255 then g := 255; // Bereichsprüfung, sonst wird's unschön! b := GetBValue(c)-1; if b < 0 then b := 0; // Bereichsprüfung, sonst wird's unschön! if b > 255 then b := 255; // Bereichsprüfung, sonst wird's unschön! ;) Label1.Color := rgb(r, g, b);
Delphi-Quellcode:
gruss,
var
r,g,b : Byte; c : LongInt; // Color ist ein LongInt ! . . . c := ColorToRGB(Label1.Color); if GetRValue(c) > 0 then r := GetRValue(c)-1; if GetGValue(c) > 0 then g := GetGValue(c)-1; if GetBValue(c) > 0 then b := GetBValue(c)-1; Label1.Color := rgb(r, g, b); dizzy |
Re: Textfarbe faden
warum stellst du nicht als anfangsfarbe 'black' ein??? :gruebel:
|
Re: Textfarbe faden
@ glkbkk: Willste von schwarz auf schwarz faden, oder weist du nicht, was faden heißt?
|
Re: Textfarbe faden
achso, ich hab mir noch mal wort für wort alles durchgelesen, jetzt hab ichs verstanden... :-D
also, ich würds so machen:
Delphi-Quellcode:
{also, ich gehe von dieser farbe aus 212,208,200,
und davon, das dass ein rgb, und kein grb ist, sonst muss man es halt umstellen...} repeat blau:=blau+1;//symbolisch until blau=rot; repeat gruen:=gruen+1; until gruen=rot; //bis hier wird sichergestellt, das es ein echtes grau ist, dann dies: for rot:=rot downto 0 do begin gruen:=rot; blau:=rot; sleep(100);//oder halt mehr, oder weniger.... end; //so, das wärs |
Re: Textfarbe faden
Warum sollte man Blau und Grün erst mit Rot gleichziehen, um ne Graustufe draus zu machen? Und warum in einer Schleife :?: Wenn dann soch grün := rot bzw. blau := rot...
Aber es ist trotzdem Unsinn! Man kann doch, wie ich's oben schrieb, von JEDER Farbe aus faden!? Man könnte sogar noch pingeliger werden, und es so biegen, dass dass alle 3 Werte im gleichen Zyklus die 0 erreichen! DANN wäre es perfekt ;) gruss, dizzy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz