![]() |
Canvas ändern?
Hi,
mein Problem ist folgendes: Ich will die Canvas um ein paar nützliche Funktionen erweitern und diese dann bei meiner Form verwenden können. Doch das funzt leider nicht, es kommt immer folgende Exception, wenn ich auf die Canvas zugreifen will: Zitat:
Delphi-Quellcode:
Meine Frage ist nun:
unit MyUnit;
interface uses {...} type TMyCanvas = class(TCanvas) {...} end; TMyForm = class(TForm) {...} procedure DoSomething; private ACanvas: TMyCanvas; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Canvas: TMyCanvas read ACanvas write ACanvas; end; var MyForm: TMyForm; implementation {$R *.dfm} constructor TMyForm.Create(AOwner: TComponent); begin inherited; ACanvas := TMyCanvas.Create; end; destructor TMyForm.Destroy; begin ACanvas.Free; inherited; end; procedure TMyForm.DoSomething; begin Canvas.MoveTo(0, 0); // hier krachts end; end. Warum gibt es diese Exception und wie kann ich es ändern damit es klappt? |
Re: Canvas ändern?
Weil dein Canvas gar nicht weiß, wo er hinzeichnen soll. Damit das funktioniert mußt Du ihn noch mit dem Formular "verbinden":
Delphi-Quellcode:
Ach: Damit das auch wirklich funktioniert solltest Du deinen eigenen Canvas nicht per Eigenschaft "Canvas" bereitstellen, da Du dait eine bereits bestehende Eigenschaft überdeckst. Nenne deine Eigenschaft lieber "AdvancedCanvas" oder so.
constructor TMyForm.Create(AOwner: TComponent);
begin inherited; ACanvas := TMyCanvas.Create; ACanvas.Handle := Canvas.Handle; // <- Das hier fehlt noch end; |
Re: Canvas ändern?
Thx, so gehts!
Da ich aber die alte Canvas ersetzen wollte, bleibe ich bei der normalen Canvas-Eigenschaft. Dabei fiel mir dann aber auf, das folgendes noch beachtet werden muss (bei Überschreiben der Canvas-Eigenschaft):
Delphi-Quellcode:
Denn ohne inherited greife ich ja schon auf meine neue Canvas-Eigenschaft zu ;)
constructor TMyForm.Create(AOwner: TComponent);
begin inherited; ACanvas := TMyCanvas.Create; ACanvas.Handle := inherited Canvas.Handle; // <- Das hier fehlt noch end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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