Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Farbverlauf" von clBtnFace zu clBlack (https://www.delphipraxis.net/109966-farbverlauf-von-clbtnface-zu-clblack.html)

xZise 10. Mär 2008 21:25


"Farbverlauf" von clBtnFace zu clBlack
 
Hallo DP,
ich habe zwei Farben. Zum einem clBtnFace und dann clBlack.
Nun will ich ein Farbverlauf zwischen den Punkten machen.
Also dachte ich mir: clBtnFace / 8 (8 Abstufungen) fertig. Denkste.
Selbst mit RGB(GetRValue(clBtnFace) div 8 ...) wird das nichts.

Nun was macht man da ?

MfG
xZise

SirThornberry 10. Mär 2008 21:30

Re: "Farbverlauf" von clBtnFace zu clBlack
 
du musst die Farbe in ihre Bestandteile zerlegen (rot, grün, blau). Anschließend kannst du den Mittelwert der Farben gewichtet berechnen.

jfheins 10. Mär 2008 21:31

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Ich hab in der CL das da gefunden, vll. hilft dir das weiter:
http://www.delphipraxis.net/internal...ighlight=color

Bin jetzt aber auch müde :drunken: , also Gute Nacht ;)

3_of_8 10. Mär 2008 21:33

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Also ich würds so machen:

Delphi-Quellcode:
function GetGradientColor(const Color1, Color2: TColor; const Step, Steps: Cardinal): TColor;
begin
  Result:=(Color1 and $FF)*(Steps-Step-1) div (Steps-1)+(Color2 and $FF)*Step div (Steps-1);
  Result:=Result or
    ((Color1 and $FF00)*(Steps-Step-1) div (Steps-1)+(Color2 and $FF00)*Step div (Steps-1));
  Result:=Result or
    ((Color1 and $FF0000)*(Steps-Step-1) div (Steps-1)+(Color2 and $FF0000)*Step div (Steps-1));
end;
Ungetestet, sollte aber funktionieren. Anmerkung: Das ganze fängt bei Step=0 an.

xZise 10. Mär 2008 21:47

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SirThornberry
du musst die Farbe in ihre Bestandteile zerlegen (rot, grün, blau). Anschließend kannst du den Mittelwert der Farben gewichtet berechnen.

So:
Delphi-Quellcode:
FColorStep := clBtnFace;
RGB(GetRValue(FColorStep) div 8, GetGValue(FColorStep) div 8, GetBValue(FColorStep) div 8);
Da wir ja zum Schwarz gehen, müssen wir jede Farbe mit 0 subtrahieren ;)
Deshalb habe ich es gelassen.
Ergebnis: "1"

@ Borg: Ich habe mal ein Beispiel angehangen ;)
Schau mir den Code aber mal an!
Und muss das nicht shl 1 sein? Einfach ein Byte weiter schieben. Aber das nützt auch nichts.

CL: Noch nicht getestet.

Zur Farbe: Die ist negativ! (Das ist wahrscheinlich auch das Problem)

MfG
xZise

3_of_8 10. Mär 2008 21:59

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Ach was hab ich denn da gemacht? Also, wenn dann wäre es shl 8 bzw. 16. Aber eigentlich kann man das ganze geshifte auch gleich weglassen.

xZise 10. Mär 2008 22:06

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Eine Frage: Was machst du da? ^^

Wenn du "AB CD EF" als Farbe hast, und du dann dass Binär verknüpfst:
Delphi-Quellcode:
    AB CD EF
and 00 00 FF
    == == ==
    54 32 EF
Oder habe ich da Fehler gemacht?
Zum Test Binär:
Delphi-Quellcode:
    1010 1011  1100 1101  1110 1111
and 0000 0000  0000 0000  1111 1111
    ==== ==== ==== ==== ==== ====
    0101 0100  0011 0010  1110 1111
MfG
xZise

3_of_8 10. Mär 2008 22:15

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Verwechselst du da etwa ein and mit einem xor?

Irgendetwas and 0 ist immer 0. Mit dem and $FF hau ich z.B. alles außer rot aus dem Farbwert raus, sodass ich nur das rot multipliziere.

xZise 10. Mär 2008 22:20

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Okay da habe ich mist gebaut.
Aber irgendwas stimmt da nicht:
Delphi-Quellcode:
GetGradientColor(clBtnFace, clBlack, i, 8) => clBlack

Muetze1 10. Mär 2008 23:16

Re: "Farbverlauf" von clBtnFace zu clBlack
 
Bevor ihr hier noch stundenlang rätselt: Alle clMenuColor, etc sind keine RGB Werte sondern sind Konstanten mit einem Index drin, welcher dann über die Systemfarben ermittelt wird durch die VCL von Windows. Um die RGB Werte für diese Konstanten zu bekommen, vorher Delphi-Referenz durchsuchenColorToRGB() aufrufen (wenn die TColor schon RGB Werte sind, dann macht er nichts).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Seite 1 von 2  1 2      

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