AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls TCustomControl - Fehlermeldung beim Aufurf von Canvas
Thema durchsuchen
Ansicht
Themen-Optionen

TCustomControl - Fehlermeldung beim Aufurf von Canvas

Ein Thema von Rabenrecht · begonnen am 23. Feb 2017 · letzter Beitrag vom 23. Feb 2017
Antwort Antwort
Rabenrecht

Registriert seit: 9. Dez 2016
79 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TCustomControl - Fehlermeldung beim Aufurf von Canvas

  Alt 23. Feb 2017, 10:51
Ich habe eine von TCustomControl abgeleitete Komponente und möchte die Canvas Property nutzen, um visuelle Anpassungen vorzunehmen:

Delphi-Quellcode:
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;
Leider erhalte ich beim Ausführen die Fehlermeldung "Element 'Name der Komponente' hat kein übergeordnetes Fenster."
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?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TCustomControl - Fehlermeldung beim Aufurf von Canvas

  Alt 23. Feb 2017, 11:25
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...)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#3

AW: TCustomControl - Fehlermeldung beim Aufurf von Canvas

  Alt 23. Feb 2017, 18:37
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..
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz