@Ingo : vielen Dank für den unnützen langen Beitrag.
Habe das ganze nochmals überprüft. Es geht nur so, bzw. am einfachsten :
Delphi-Quellcode:
procedure TfrmKey.lblMouseEnter(Sender: TObject);
begin
with Sender as TLabel do begin
Color := clSkyBlue;
Font.Color := clBlack;
end;
Canvas.Pen.Width := PinselBreite;
Canvas.Pen.Color := clNavy;
Canvas.Rectangle ((Sender as TLabel).Left+1,(Sender as TLabel).Top+1,
(Sender as TLabel).Left + (Sender as TLabel).Width,
(Sender as TLabel).Top+(Sender as TLabel).Height);
end;
Wie man sieht, wird da kein ReFresh, Repaint, bsclear usw. gebraucht und ich lasse mich auch nicht überreden, das weshalb auch immer einzubauen. Das korrespondierende OnMouseLeave setzt die Farben zurück und zeichnet den Rahmen in der Hintergrundfarbe wieder neu, der ist dann eben nicht mehr zu sehen. That's it. Gibt es kein MouseLeave, dann wird der Rahmen schon richtig gezeichnet, er bleibt dann eben da wo er ist und verschwindet nicht.
Lustig ist noch das hier :
Zitat von
hsg:
Vielleicht nimmst du nun auch noch die Koordinaten des Labels (hast ja aus deinem With rausgeschmissen
hsg, wer zuletzt lacht, lacht am besten.
Der Witz ist nämlich das WITH. Wollte den ganzen
Sender as TLabel
Krempel im Rectangle weg haben. Geht aber nicht. Auch ein zweites, vom ersten with getrenntes
with (Sender as TLabel).Canvas do begin
oder so was ähnliches geht nicht. Irgendwie haben die Form-Koordinaten trotz "with" Vorrang. Also musste ich das Rectangle mit explizit angegeben Label-Koordinaten machen.