![]() |
Komponente erweitern
Guten Morgen.
Ich habe erstmals den Versuch gestartet, eine Komponente (Label) zu erweitern. Was mich dabei erst einmal zum Verzweifeln gebracht hat, waren die Fehlermeldungen bei dem Versuch
Delphi-Quellcode:
einzugeben, weil Auswahlliste nach "System.", nach "System.Windows." und "System.Windows.Forms." immer noch leer blieb. Mangelndes Selbstbewußtsein ließ mich annehmen, dass ich einen Fehler gemacht hatte und ich versuchte erst einmal alles mögliche, bis ich mich entschloss das einfach zu ignorieren.
TMyLabel = class(System.Windows.Forms.Label);
Jetzt ist mir also gelungen, die Komponente zu erweitern und es klappt auch. Allerdings bin ich mir nicht so recht sicher, ob ich alles richtig gemacht habe oder ob nur zufällig noch kein Fehler aufgetreten ist. Unsicher bin ich mir vor allem bei Create und Dispose - die kommen mir etwas dürftig vor. Deshalb bitte ich Euch, mal kurz meinen Code zu prüfen.
Delphi-Quellcode:
Vielen Dank und noch einen schönen Tag.
TMyLabel = class(System.Windows.Forms.&Label)
private FHoch : integer; FBreit : integer; published property Hoch : Integer read FHoch write FHoch; property Breit : Integer read FBreit write FBreit; strict protected procedure Dispose(Disposing: Boolean); override; private constructor Create; overload; end; constructor TMyLabel.Create; begin inherited Create; // // Erforderlich für die Unterstützung des Windows Forms-Designers // end; procedure TMyLabel.Dispose(Disposing: Boolean); begin inherited Dispose(Disposing); end; Gruß Jürgen. |
Re: Komponente erweitern
Guten Morgen, Jürgen,
Zitat:
An Deinem Code fallen mir folgende Punkte auf:
Delphi-Quellcode:
Darauf könntest Du verzichten, weil Width/Height sowieso feste Eigenschaften sind. Lass Dir lieber etwas 'Neues' einfallen.
private
FHoch : integer; FBreit : integer;
Delphi-Quellcode:
Das 'Aufräumen' übernimmt unter NET grundsätzlich der Garbage Collector:
strict protected
procedure Dispose(Disposing: Boolean); override; Zitat:
Ich hoffe, das hilft Dir. Jürgen |
Re: Komponente erweitern
Guten Morgen, Jürgen.
Vielen Dank für Deine Hinweise. Das mit dem FHoch und FBreit hat (zumindest für mich) schon seine Richtigkeit. Ich speichere darin von Height/Width abweichende Werte, da das Label unter bestimmten Umständen seine Größe ändert und ich diese Werte beim Erzeugen der Labels gleich mitgeben möchte. Könnte natürlich sein, dass sich das später doch noch als Blödsinn herausstellt,. Aber ich bin gerade dabei mich in die Sache einzuarbeiten und da erschien mir das als gute Möglichkeit. Ich wünsch Dir noch einen schönen Tag. Gruß Jürgen. PS. Ich glaube, ich muss mal ein paar Privatstunden bei Dir buchen. |
Re: Komponente erweitern
Zitat:
|
Re: Komponente erweitern
Zitat:
Eigentlich hatte ich auch gelernt, dass alles, was erzeugt wird, auch aufgelöst werden muss (und unter Win32 gilt das ja nach wie vor). Andererseits übernimmt der GarbageCollector genau diese Aufgabe automatisch. Dadurch bin ich selbst immer wieder unsicher (und habe meinen Namensvetter auf die NET-Doku verwiesen). Kannst Du uns Klarheit verschaffen? Danke! Jürgen |
Re: Komponente erweitern
Der Garbage Collector räumt zwar die .NET-Objekte auf, aber er weiß nichts von z.B. irgendwelchen Win32-Handles, Dateiressourcen oder ähnlichem. Diese werden typischerweise in der Dispose-Methode freigegeben, was insbesondere auch die kontrollierte Freigabe von Objekten ermöglicht.
Im ![]() |
Re: Komponente erweitern
Da hab' ich ja eine richtige Lawine losgetreten. Vielen Dank für die rege Beteiligung. Was ich aber noch immer nicht weiß: Ist mein "constructor create; overload;" nun richtig oder nicht - und warum? Im Moment scheint alles glatt zu gehen, aber man kann ja nie wissen.
Gruß Jürgen |
Re: Komponente erweitern
overload? eher override.
|
Re: Komponente erweitern
@ DGL-luke
Wie in meinem ersten Beitrag beschrieben, erzeugt override eine Fehlermeldung. Gruß Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 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