Komponenten

Rund um die LCL und andere Komponenten
Antworten
Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Komponenten

Beitrag von Cool-Tuc »

Hallo,
ich habe die Version 1.6.4 unter Ubuntu installiert, läuft soweit rund, aber mir ist folgendes aufgefallen:
Bei der Erstellung einer neuen Komponente gibt es in der Liste der Basisklassen weder TCustumEdit noch TCustomPanal...oder habe ich gerade einen "DenkKnoten" ?
Es gibt (für meinen Bedarf) nur TEdit, TPanel oder aber TCustomControl auszuwählen...
Bin dankbar für Hinweise
Udo

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Komponenten

Beitrag von theo »

Wie die Auwahlliste da zustande kommt, weiß ich gerade auch nicht, aber es ist ja kein großes Problem.
Wähle einfach TEdit und ändere es nachher im Quelltext in TCustomEdit, wenn das für dich richtig ist.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Komponenten

Beitrag von wp_xyz »

Die LCL ist genau wie Delphis VCL so aufgebaut, dass es zu jeder Komponente in der Palette einen Vorfahren TCustomXXXX gibt, der bereits die volle Funktionalität hat, aber noch keine Properties für den Objektinspektor veröffentlicht. Damit tut man sich als Komponentenentwickler leichter, von TCustomXXXX eine neue Klasse abzuleiten, die aber nicht alle Eigenschaften des Vorgängers haben soll. Das liegt daran, dass im Zuge der Komponentenhierarchie die Sichtbarkeiten von Properties nur erhöht werden kann, aber nie erniedrigt (protected --> published ist ok, aber nie published --> protected). In der Regel sind die Properties der TCustomXXXX-Klassen immer protected, so dass man auf diese von der Anwendungsebene aus auch zur Laufzeit nicht zugreifen kann, dagegen aber auf Komponentenebene von einem Nachfahren aus.

Also, wenn du Anwendungen schreibst, sind TCustomEdit und die anderen TCustomXXXX-Klassen nicht wichtig, sie haben insbesondere auf der Komponentenpalette nichts zu suchen. Wenn du Komponenten schreibst, brauchst du die TCustomXXXX-Klassen sehr wohl, aber zum Ableiten einer neuen Klasse müssen sie ebenfalls nicht auf der Komponentenpalette sein.

Antworten