Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TGraphicControl.Canvas global machen (https://www.delphipraxis.net/86401-tgraphiccontrol-canvas-global-machen.html)

halinchen 13. Feb 2007 17:11


TGraphicControl.Canvas global machen
 
Hi!
Ich entwickel gerade eine Komponente die von TGraphicControl abgeleitet ist.

In TGraphicControl ist Canvas so deklariert:
Delphi-Quellcode:
protected property Canvas: TCanvas read FCanvas;
Ich möchte aber, dass der Anwender später auf den Canvas zeichnen darf, also in global zugänglich machen.
(also:
Delphi-Quellcode:
protected property Canvas: TCanvas read FCanvas write FCanvas;
Naja, oder so ähnlich.)

Wie stell ich das an. So kennt er das Objekt FCanvas nicht, dass sollte doch vererbt worden sein oder??

SirThornberry 13. Feb 2007 17:21

Re: TGraphicControl.Canvas global machen
 
einfach so:
Delphi-Quellcode:
public
  property Canvas;
aber wenn du eine eigene Komponente schreibst könntest du auch ein neues property machen was in der GetMethode eben Canvas zurück liefert.

Der_Unwissende 13. Feb 2007 17:29

Re: TGraphicControl.Canvas global machen
 
Hi,
FCanvas ist in TGraphicControl als private deklariert. Alles was private ist, ist nur innerhalb der gleichen Klasse/Instanz sichtbar. Erbende Klassen sehen hier nur Methoden/Eigenschaften, die als Mindestsichtbarkeit protected sind.

Zwar gibt es auch einen Weg, wie Du jetzt das Property veröffentlichen könntest, aber dafür ist TGraphicControl gar nicht gedacht! Da solltest Du nach einem anderen Vorfahren suchen, auf den Du ohne Probleme zeichnen kannst. Dazu zählt dann z.B. ein TBitmap-Objekt, dass Du dann in einem TImage anzeigen könntest.
Für ein TGraphicControl sollte stattdessen die Methode paint überschrieben werden. Diese ist in TGraphicControl virtual deklariert, kann also überschrieben werden (sollte sie auch, die ist sonst leer). Überschreibst Du diese Methode, so tust Du dies im Kontext der erbenden Klasse und hast damit zugriff auf die protected Eigenschaft.

Gruß Der Unwissende

halinchen 13. Feb 2007 17:43

Re: TGraphicControl.Canvas global machen
 
Zitat:

Zitat von SirThornberry
einfach so:
Delphi-Quellcode:
public
  property Canvas;

Das klappt leider nicht.

Das mit der GetMethode müsste funktionieren.
Ich mach mich gelich an die Arbeit... :-D

Danke :mrgreen:

@Der_Unwissende
Das ist mir schon klar. Ich wollte nur das ich wenn ich die Komponente dann auf der Form habe, das ich dann noch ein bischen an dem Aussehen werkeln könnte. Ich überlege mir das nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 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