Hallo,
ich bin gerade dabei für Lazarus eine eigene Editor Komponente zu schreiben/Entwickeln die so ähnlich bzw. die gleichen aufgaben wie RichEdit von Delphi haben soll. Aber sie soll nicht kompatibel sein.
Ich bin auch schon recht weit gekommen. Nur habe ich ein Problem mit der Cursor Farbe. Es kann sein, dass man den Cursor zwischendurch bei bestimmten Farbauswahl nicht gut sehen kann. Dieses Problem hat im übrigen auch OpenOffice. Sie umgehen das Problem in dem der Cursor Blinkt. Ich möchte jedoch eine Möglichkeit haben, wo der Cursor nicht blinken muss.
Hier im Forum habe ich zwei Möglichkeiten gefunden, die das Problem schon zu 80% lösen:
Delphi-Quellcode:
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;
// Das Gegenteil von einer Farbe bestimmen.
(not ColorToRGB(PenColor)) and $00FFFFFF;
Im Cheat hat mir noch jemand diese Möglichkeit gezeigt:
Delphi-Quellcode:
function ContrastColor(const aPenColor:TColor):TColor;
var
r, g, b:Byte;
begin
r:=Red(aPenColor); g:=Green(aPenColor); b:=Blue(b);
result:=(R * 77 + G * 150 + B * 28) div 255;
end; // ContrastColor
Aber bei allen drei Funktionen habe ich das Problem das der Cursor nicht gut sichtbar ist z.b.:
Ich habe einen Text mit Blauen Hintergrund und einer Gelben schrift. Dann habe ich einen Gelben Hintergrund mit Roter Schrift. Steht der Cursor jetzt genau dazwischen, kann man ihn nur schwer ausmachen. Ich habe ihn schon 2 Pixel breit gemacht. Mir schwebt so eine Funktion vor:
Ich übergebe einer Funktion zwei Farben und sie ermittelt daraus die optimalste Farbe die 100%ig sichtbar ist. Die frage ist nur: Wie geht sowas ? Geht sowas überhaupt ?