![]() |
TCustomControl - Fehlermeldung beim Aufurf von Canvas
Ich habe eine von TCustomControl abgeleitete Komponente und möchte die Canvas Property nutzen, um visuelle Anpassungen vorzunehmen:
Delphi-Quellcode:
Leider erhalte ich beim Ausführen die Fehlermeldung "Element 'Name der Komponente' hat kein übergeordnetes Fenster."
type
myComp = class(TPanel) private procedure DrawStuff; end; [...] procedure myComp.DrawStuff; begin Canvas.TextOut(Left,Top,'Hello World'); end; [...] procedure TForm1.FormCreate(Sender: TObject); begin testComp := myComp.Create(self); testComp.Parent := self; end; Beim Debuggen wird die Fehlermeldung beim Canvas.TextOut ausgespukt. (Jede beliebige andere Funktion von Canvas führt zu diesem Fehler). Was bedeutet das und wie lässt sich das Problem beheben? |
AW: TCustomControl - Fehlermeldung beim Aufurf von Canvas
Wird DrawStuff schon im Contructor von myComp aufgerufen?
Das wäre dann zu früh, da der Parent noch nicht zugewiesen ist. Windows kann dann nicht ermitteln, in welchem Kontext die Komponente gezeichnet werden soll. Es gab da m.E. eine Funktion, die prüft, ob ein gültiger Kontext vorliegt (weiß aber nicht mehr, wie die hieß). Die Lösung wäre, erst nach dem Create zu zeichnen. Nachtrag: Die Klasse sollte entsprechend der Konventionen immer im "T" benannt werden (hast Du aber sicher nur hier in dem Beispiel vergessen...) |
AW: TCustomControl - Fehlermeldung beim Aufurf von Canvas
Hmm..
wenn Du etwas im Kontext des CustomControl zeichnen wills, dann musst Du
Delphi-Quellcode:
protected
procedure Paint; override; überschreiben und dann (nach dem inherited) deine DrawStuff reinpacken. Denn dann wird sich darum gekümmert, das bei jedem Neuzeichen auch deine Zeichenbefehle benutzt werden.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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