Wahrscheinlich gibt es schnellere Funktionen und für ein Bildberarbeitungsprogramm, daß schnell mal eine Seite invertieren muß, würde ich eine optimierte Funktion benutzen, aber für den Hausgebrauch reicht die Funktion.
Entwickelt habe ich sie, weil es in einem meiner Programme möglich sein sollte die Panelfarbe zu verändern. Wurde sie zu dunkel eingestellt, dann konnte man den Text nicht mehr lesen. Mit Hilfe der Funktion wurde aber eine entgegengesetzte Farbe berechnet und so konnte man die Schrift sehr gut lesen.
Benütigt wird ein Parameter:
Ergebnis ist die inverse Farbe.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function InvColor(Col: TColor): TColor; var L: Longint; R, G, B: Byte; begin L := ColorToRGB(Col);
R := 255 - Byte(L); G := 255 - Byte(L shr 8); B := 255 - Byte(L shr 16);
Result := (B shl 16) + (G shl 8) + R; end; |
Beispiel:
Für das Beispiel Braucht man ein TPanel auf dem Formular. Die Textfarbe auf dem Panel wird dann die inverse Panelfarbe sein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin with Panel1 do begin Color := clRed; Font.Color := InvColor(Color); end; end; |