AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente erweitern

Ein Thema von gfjs · begonnen am 31. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#1

Komponente erweitern

  Alt 31. Aug 2006, 05:15
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 TMyLabel = class(System.Windows.Forms.Label); 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.

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:
  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;
Vielen Dank und noch einen schönen Tag.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Komponente erweitern

  Alt 31. Aug 2006, 09:09
Guten Morgen, Jürgen,
Zitat von gfjs:
Auswahlliste nach "System.", nach "System.Windows." und "System.Windows.Forms." immer noch leer blieb.
Die 2005-IDE enthält viele kleine Fehler; und möglicherweise ist auch die 2006-IDE davor nicht gefeit. Ein ähnliches Problem hatten wir ja bereits diskutiert; es ist auch denkbar, dass die IDE während der Eingabe nach Fehlern sucht und deshalb nicht dazu kommt, die Felder vorzuschlagen...

An Deinem Code fallen mir folgende Punkte auf:
Delphi-Quellcode:
private
      FHoch : integer;
      FBreit : integer;
Darauf könntest Du verzichten, weil Width/Height sowieso feste Eigenschaften sind. Lass Dir lieber etwas 'Neues' einfallen.
Delphi-Quellcode:
strict protected
      procedure Dispose(Disposing: Boolean); override;
Das 'Aufräumen' übernimmt unter NET grundsätzlich der Garbage Collector:
Zitat von NET-SDK Destruktoren:
Der Programmierer kann nicht steuern, wann der Destruktor aufgerufen wird, da dies durch den Garbage Collector bestimmt wird. Der Garbage Collector sucht nach Objekten, die von der Anwendung nicht mehr verwendet werden. Er zerstört diese Objekte und gibt ihren Speicherplatz wieder frei. Destruktoren werden darüber hinaus beim Beenden des Programms aufgerufen.
Wenn Du gezielt Massnahmen im Zusammenhang mit dem Aufräumen erzwingen willst, dann empfehlen sich Ereignisse z.B. im Zusammenhang mit Form_Close o.a. oder auch innerhalb Deiner Komponente.

Ich hoffe, das hilft Dir. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Komponente erweitern

  Alt 31. Aug 2006, 09:30
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.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Komponente erweitern

  Alt 31. Aug 2006, 10:21
Zitat von Jürgen Thomas:
Wenn Du gezielt Massnahmen im Zusammenhang mit dem Aufräumen erzwingen willst, dann
ist das Überschreiben von Dispose genau das Richtige. Hier (noch) etwas sinnlos, da die Methode nur den Base-Call enthält, aber grundsätzlich vollkommen richtig.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Komponente erweitern

  Alt 31. Aug 2006, 12:03
Zitat von Khabarakh:
... ist das Überschreiben von Dispose genau das Richtige.
Kannst Du mir/uns kurz ein paar Situationen nennen, wo das Überschreiben von Dispose sinnvoll ist?

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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Komponente erweitern

  Alt 31. Aug 2006, 12:21
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 MSDN gibt es dazu einiges zu lesen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Komponente erweitern

  Alt 31. Aug 2006, 12:30
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
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Komponente erweitern

  Alt 31. Aug 2006, 12:54
overload? eher override.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Komponente erweitern

  Alt 31. Aug 2006, 12:58
@ DGL-luke

Wie in meinem ersten Beitrag beschrieben, erzeugt override eine Fehlermeldung.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  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 21:04 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