![]() |
Eigene Komponente wird übermalt
Hallo, ich schon wieder.
Ich habe eine Komponente geschriben, leider wird die immer übermalt wenn ich z.B. die Größe verändere oder andere Form/Fenster drüber bewege. Woran liegt das bzw. wie kann ich das verhindern. Hier ein bissle Code:
Delphi-Quellcode:
procedure TMyWinCtrl.Paint;
var Rect : TRect; notUsed : HWND; begin Rect := GetClientRect; Canvas.Handle := GetDeviceContext(notUsed); Canvas.Brush.Color := FBGColor; Canvas.Font.Color := FFont.Color; Canvas.Font.Size := FFont.Size; Canvas.Font.Style := FFont.Style; Canvas.Font.Name := FFont.Name; Canvas.Pen.Color := FBorderColor; Canvas.Pen.Style := FBorder; if ColorToRGB(FBGColor) > -1 then begin Canvas.FillRect(Rect); Canvas.Rectangle(Rect); end; if FText <> '' then begin Canvas.TextOut(5,5, FText); end; end; |
Re: Eigene Komponente wird übermalt
Die Zuweisung an Canvas.Handle ist falsch.
Die VCL besorgt sich schon selber das richtige Handle. |
Re: Eigene Komponente wird übermalt
Wenn ich das weg machen, dann bekomme ich 'ne Fehlermeldung: "Leinwand/Bild erlaubt kein zeichnen."
|
Re: Eigene Komponente wird übermalt
Von welche Klasse ist dein Control abgeleitet ?
|
Re: Eigene Komponente wird übermalt
Du musst dafür sorgen, daß bei jedem repaint deine Zeichencode aufgerufen wird z.B. durch Überschreiben von .DoPaint.
|
Re: Eigene Komponente wird übermalt
@shmia
Ich leite von der Klasse TWinControl ab. @mkinzler Sorry, ich kann dir leider nicht folgen :/ |
Re: Eigene Komponente wird übermalt
Zitat:
Dann deine Paint-Methode mit override deklarieren. Und Canvas.Handle := GetDeviceContext(notUsed); weglassen. Gerd |
Re: Eigene Komponente wird übermalt
alles klar, viele Dank.
Mit der TCustomControl Klasse funktioniert es. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz