Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mi 04.02.04 23:54 
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:
  • TColor Farbe

Ergebnis ist die inverse Farbe.

ausblenden 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{Popov}


Beispiel:

Für das Beispiel Braucht man ein TPanel auf dem Formular. Die Textfarbe auf dem Panel wird dann die inverse Panelfarbe sein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Panel1 do begin
    Color := clRed; // Beispielfarbe
    Font.Color := InvColor(Color);
  end;
end;

_________________
Popov