Zitat von
Hansa:
Hi,
wieso wird hier :
Delphi-Quellcode:
procedure TfrmKeyTest1.PanelEnter(Sender: TObject);
begin
if (Sender is TPanel) then begin
(Sender as TPanel).Color := clSkyBlue;
Canvas.Pen.Color := clNavy; // Rahmen-Schriftfarbe
Canvas.Pen.Width := PinselBreite;
Canvas.Rectangle ((Sender as TPanel).Left-1,
(Sender as TPanel).Top-1,
(Sender as TPanel).Left + (Sender as TPanel).Width+2,
(Sender as TPanel).Top + (Sender as TPanel).Height+2);
end;
end;
das Panel gefäbt und angezeigt, die Umrandung mit dem Rectangle jedoch nicht ? Und zwar nur beim Programmstart !
Weil Windows sich - warum auch immer - entschieden hat, deine Form nach dem Aufbringen des Rectangels nochmal zu zeichnen (oder überhaupt erst fertig zu zeichnen). Dieses Zeichnen geschieht dann ohne Rectangel.
Baue mal irgendwo ein kleinen Button ein mit OnClick --> Form.Repaint. Nach einem Repaint ist dein Rectangel auch weg. Ebenso, wenn du dein Fenster so weit über den Bildschirmrand verschiebst, dass das Panel (über'n Rand) verschwindet, und dann zurückziehst.
//Nachtrag:
Du baust ja schon ziemlich lange an deiner Rahmengeschichte herum. Mal um Labels, mal um Panels. Wie auch immer.
Ich würde nicht direkt auf dem Canvas der Form herumkleistern, sondern Objekte benutzen, die ich sicht- und unsichtbar machen kann, die ich verschieben kann, etc. Einen Rahmen würde ich mir als TShape erstellen (Eigenschaften Brush, Pen und Shape korrekt setzen, damit es ein Rahmen wird) und bei Bedarf folgendermaßen um das Panel legen:
Delphi-Quellcode:
shape1.Left:=(Sender as TPanel).Left-PinselBreite;
shape1.Top:=(Sender as TPanel).Top-PinselBreite;
shape1.Width:=(Sender as TPanel).Width+2*PinselBreite;
shape1.Height:=(Sender as TPanel).Height+2*PinselBreite;
shape1.Show;
Danach hast du keine Probleme mehr mit irgendwelchen Repaints.