Tech-Ecke / Delphi Inhalt / TColorDialog

 

    

TColorDialog


  Aufrufen von TColorDialog und übergeben der gewählten Farbe

z.B. hinter einem Click-Event auf einen Button:

   if ColorDialog1.Execute then
    begin

            Edit1.Color := ColorDialog1.Color;    // setzt die gewählte Farbe als Hindergrundfarbe im Edit1
            Edit1.Text := ColorToString(ColorDialog1.Color);    // gibt den gewählten Farbcode in Edit1 aus
   
end;
 


 

  Kontrastfarbe ermitteln

Möchte man eine eingefärbte Fläche beschriften und weiß im Vorfeld nicht welche Farbe das Feld haben wird, so kann es unter Umständen zum "Weißer Adler auf weißem Grund" Effekt kommen. Die folgende Funktion bestimmt die Farbe Weiß oder Schwarz, je nachdem welche Farbe den höchsten Kontrast zur Hintergrundfarbe bietet.

  function BlackWhiteContrastColor(value: TColor):TColor;
var
  intensity : Integer;
begin
  value := ColorToRGB(value);

  intensity := GetBValue(value) * 21 // Blue
    + GetGValue(value) * 174 // Green
    + GetRValue(value) * 61; // Red

   // intensity = 0 -> dark
   // intensity = 255*256 -> bright

  if intensity >= (128*256) then
    Result := clBlack
  else
    Result := clWhite;
end;
 


 

  TColor  <--->  RGB

  var
        R,G,B: String
...

if
ColorDialog1.Execute then
    begin
           
Edit1.Color := ColorDialog1.Color;    // setzt die gewählte Farbe als Hindergrundfarbe im Edit1
            R := IntToStr(GetRValue(ColorDialog1.Color));
            G := IntToStr(GetGValue(ColorDialog1.Color));
            B := IntToStr(GetBValue(ColorDialog1.Color));
            Edit1.Text := R+','+G+','+B
    end
;   
 

Von RGB nach TColor wandeln

Da Boarland diese Mickey Maus Funktion vergessen hat, hier eine fertige Lösung

  function RGBToColor(R,G,B:Byte): TColor;
begin
  Result:=B Shl 16 or
              G Shl 8  or
              R;
end;  
 

Beispiel:

  Edit1.Color := RGBToColor(255,0,0) ;    // das Editfeld wird rot eingefärbt

 

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 09.10.2006]