Hi DP-ler,
getrennt von der Einleitung gibt es jetzt erst einmal die erste Runde Theorie. Damit es nicht zu trocken wird, fangen wir mit einer kleinen Grafik an, welche so ähnlich im Delphi 5 Entwickler Handbuch (31-2) zu finden ist, da das aber nicht bei jedem vorliegt, habe ich diese schnell noch einmal erstellt.
http://www.gatenetwork.com/delphi-sa...ts/classes.gif
Alle Klassen, welche in Delphi erstellt werden sind ultimativ von der Basis-Klasse
TObject abgeleitet. Die Klasse
TObject definiert die grundlegenden Methoden für jedes Objekt, welches in OO-Pascal (der Sprache von Delphi) erstellt wird.
Abgeleitet von
TObject ist die Klasse
TPersistent. Diese Klasse stellt grundlegende Methoden zum Kopieren (Assign/AssignTo) und zum Streamen nicht-publizierter Eigenschaften zur Verfügung. Die Basis dieser Klasse ermöglicht es der Delphi-
IDE mit Drag-&-Drop und dem Object Inspector uns Programmierern mit der
VCL zu arbeiten.
VCL
VCL ist die Abkürzung für die
Visual Component Library. Die
VCL ist die Sammlung aller installierten Komponenten, welche via Drag-&-Drop auf dem Form im Design-Modus angeordnet werden können. Die Nutzung der
VCL macht es uns Programmierern leicht, sich auf das Eigentliche, die Erstellung der Programmlogik, zu konzentrieren, da die Erstellung der Benutzerschnittstellen in einem Bruchteil der Zeit erledigt ist.
Dieser Vorteil bringt natürlich auch seine (Geschmackssache: großen) Nachteile mit sich. Die Programme (EXE Dateien) werden um einiges größer, da immer das komplette Handling der
VCL mitkompiliert wird. Aber wozu gibt es große Festplatten? Ausserdem werden die Programme meist auch etwas langsamer gegenüber
nonVCL-Applikationen. Aber der Unterschied ist nur gering - und ausserdem gibt es schnelle Prozessoren. Wer trotzdem Interesse an
nonVCL Programmen hat, sollte sich mal auf
Luckies Seite umschauen.
Aber nun zurück zu den Komponenten und der
VCL...
Was ist der Unterschied zwischen Komponenten und Controls?
Zurückblickend auf die obige Grafik ist die Antwort eigentlich schnell gefunden. Alle Controls sind Komponenten, da sie von
TComponent abgeleitet werden, aber nicht alle Komponenten sind Controls. Was heisst das jetzt für uns?
Die Klasse
TComponent führt alle Methoden ein, welche die Delphi
IDE benötigt, um Komponenten in der
VCL Palette darzustellen. Das heisst für uns, dass alle
VCL Komponenten, welche wir erstellen wollen generell von der Klasse
TComponent abgeleitet werden müssen. Ein solches Beispiel ist zum Beispiel die Komponente
TTimer von der
System Palette.
Eine Komponente, welche direkt von
TComponent, nicht von
TControl, abgeleitet wurde, wird im Delphi-Form-Designer generell durch ein kleines Quadrat dargestellt. Darunter erscheint, sofern man diese Option eingschaltet hat, der Name der Komponente. Diese Komponenten sind zur Laufzeit des Programmes nicht sichtbar und arbeiten im Hintergrund. Solche Komponenten werden direkt durch den Code vom Programmierer gesteuert. Auch die Dialog-Komponenten, wie zum Beispiel
TOpenDialog gehören in die Gruppe der Komponenten, nicht zu den Controls. Die Komponente ist zur Laufzeit
nicht zu sehen. Sie kann lediglich einen Dialog anzeigen, welcher ansonsten nicht viel mit der Komponente zu tun hat.
Was sind jetzt Controls? Eigentlich ist das jetzt recht einfach - der ganze Rest der Komponenten der
VCL Palette, also all jene, welche auch zur Laufzeit zu sehen sind. Da wären die grafischen Controls wie das
TLabel und
TPaintBox und die "windowed" Controls wie
TEdit und
TButton.
TGraphicControl und TWinControl
Was soll dieser Unterschied? Eigentlich recht einfach. TGraphicControl ist die Basis aller Controls, welche sich auf dem Form darstellen können, aber keinen Windows-
Handle haben und somit auch nicht den Fokus erhalten können.
TWinControl steht
nicht für Controls welche durch das
OS (Windwows) zur Verfügung gestellt werden, sondern für "windowed" Controls. Das heisst, diese Controls "registrieren" sich bei Windows und erhalten einen Windows-
Handle. Dadurch sind solche Controls in der Lage Windows-Botschaften zu erhalten. Diese Controls können auch, sofern das vorgesehen ist, den Fokus durch den Benutzer erhalten.
Für nächsten Mittwoch ist die nächste Runde angesetzt. Dann werden wir nicht gleich mit dem Erstellen einer Komponente anfangen, sondern noch ein wenig Theorie pauken. Thema werden die Exceptions sein.
Bis dann!
[edit 1]Luckies Link auf den aktuellsten Stand gebracht

[/edit]