Überblick zu VCL
Nach oben zu VCL
Dieser Abschnitt bietet eine Einführung in folgende Themen:
Inhaltsverzeichnis
Architektur von VCL
VCL ist die Abkürzung für Visual Component Library, einem Satz visueller Komponenten für die beschleunigte Erstellung von Windows-Anwendungen in Delphi. VCL enthält zahlreiche visuelle und nicht-visuelle Klassen und Hilfsklassen, die Sie bei der Entwicklung von Windows-Anwendungen sowie von Web-, Datenbank- und Konsolenanwendungen unterstützen. Alle Klassen sind von TObject abgeleitet. TObject führt Methoden ein, die grundlegende Verhaltensweisen wie Erstellung, Freigabe und Botschaftsbehandlung implementieren.
VCL-Komponenten
Komponenten sind eine Teilmenge der Komponentenbibliothek, die von der Klasse TComponent abstammen. Sie können Komponenten in einem Formular oder einem Datenmodul platzieren und zur Entwurfszeit bearbeiten. Mit dem Objektinspektor können Sie Eigenschaften Werte zuweisen, ohne Quelltext schreiben zu müssen. Die meisten Komponenten sind entweder visuell oder nicht-visuell, abhängig davon, ob sie zur Laufzeit sichtbar sind oder nicht. Einige Komponenten werden in der Komponentenpalette angezeigt.
Visuelle Komponenten
Visuelle Komponenten wie z.B. TForm und TSpeedButton werden Steuerelemente genannt und stammen von TControl ab. Steuerelemente werden in Anwendungen mit grafischer Benutzeroberfläche eingesetzt und sind zur Laufzeit für den Anwender sichtbar. TControl bietet Eigenschaften, die die visuellen Attribute von Steuerelementen festlegen, wie z.B. ihre Höhe und Breite.
Nicht-visuelle Komponenten
Nicht-visuelle Komponenten werden für verschiedene Aufgaben verwendet. Wenn Sie z.B. eine Anwendung schreiben, die eine Verbindung zu einer Datenbank herstellt, fügen Sie eine TDataSource-Komponente in ein Formular ein, um ein Steuerelement und eine Datenmenge zu verbinden, die von dem Steuerelement verwendet wird. Diese Verbindung ist für den Anwender nicht sichtbar, und daher ist TDataSource nicht-visuell. Zur Entwurfszeit werden nicht-visuelle Komponenten durch ein Symbol dargestellt. So können Sie ihre Eigenschaften und Ereignisse bearbeiten, wie Sie es bei einem visuellen Steuerelement tun würden.
Weitere VCL-Klassen
Auch Klassen, die keine Komponenten sind (d.h. Klassen, die von TObject, aber nicht von TComponent abstammen), werden für verschiedene Aufgaben eingesetzt. In der Regel dienen diese Klassen zum Zugriff auf Systemobjekte (z.B. Dateien oder die Zwischenablage) oder zur Erledigung temporärer Aufgaben (z.B. das Speichern von Daten in einer Liste). Sie können zur Entwurfszeit keine Instanzen dieser Klassen erstellen, jedoch werden diese manchmal von den Komponenten angelegt, die Sie im Formular-Designer hinzufügen.
Komponenten verwenden
Viele Komponenten der IDE stehen in der Komponentenpalette zur Verfügung. Sie müssen hier nur die gewünschten Komponenten auswählen und in ein Formular oder Datenmodul einfügen. Sie entwerfen die Benutzeroberfläche einer Anwendung, indem Sie visuelle Komponenten, wie Schaltflächen und Listenfelder, auf einem Formular platzieren. Ebenso können Sie die nicht-visuellen Komponenten, beispielsweise Datenzugriffskomponenten, in jedem Formular oder Datenmodul einsetzen. Auf den ersten Blick scheinen die Komponenten von Delphi eine Klasse wie jede andere darzustellen. Es gibt jedoch Unterschiede zwischen Komponenten in Delphi und den Standardklassenhierarchien, mit denen die meisten Programmierer arbeiten. Einige dieser Unterschiede sind im Folgenden beschrieben:
- Alle Delphi-Komponenten sind von TComponent abgeleitet.
- Komponenten werden meistens so verwendet, wie sie definiert wurden, und mittels ihrer Eigenschaften bearbeitet. Sie dienen nicht als Basisklassen für abgeleitete Objekte mit neuen oder geänderten Funktionen. Wird eine neue Klasse von einer Komponente abgeleitet, geschieht dies normalerweise nur, um bestimmten Programmcode zu vorhandenen Ereignisbehandlungsroutinen hinzuzufügen.
- Komponenten können nur auf dem Heap zugewiesen werden und nicht auf dem Stack.
- Die Eigenschaften von Komponenten enthalten Laufzeit-Typinformationen.
- Komponenten können in die Komponentenpalette der IDE aufgenommen und in Formularen bearbeitet werden.
Komponenten weisen häufig einen höheren Kapselungsgrad auf als die Standardklassen. Betrachten Sie z.B. ein Dialogfeld mit einer Schaltfläche. Klickt der Benutzer in einem Windows-Programm, das VCL-Komponenten verwendet, auf die Schaltfläche, wird die Botschaft WM_LBUTTONDOWN generiert. Diese muss dann in der Anwendung abgefangen, ausgewertet (üblicherweise mithilfe einer switch-Anweisung, einer Botschaftszuordnung oder einer speziellen Tabelle) und anschließend zur Behandlung an eine Routine weitergeleitet werden, die als Reaktion auf die Botschaft ausgeführt wird. Die meisten Windows-Botschaften (VCL-Anwendungen) können von Delphi-Komponenten verarbeitet werden. Um auf ein Systemereignis zu reagieren, müssen Sie lediglich eine entsprechende Ereignisbehandlungsroutine implementieren.
Ereignisse verwenden
Nahezu jeder Code, den Sie schreiben, reagiert direkt oder indirekt auf Ereignisse. Ein Ereignis ist eine spezielle Eigenschaft, deren Wert sich zur Laufzeit als Folge einer Aktion (in der Regel eine Benutzereingabe) ändert. Der beim Eintritt eines Ereignisses ausgeführte Code ist eine Delphi-Prozedur, die Ereignisbehandlungsroutine genannt wird.
Die Seite Ereignisse des Objektinspektors enthält alle für eine Komponente definierten Ereignisse. Wenn Sie im Objektinspektor auf ein Ereignis doppelklicken, wird das Gerüst (Skeleton) der Ereignisbehandlungsroutine erstellt. Sie können dann den erforderlichen Quelltext eingeben, um auf das Ereignis zu reagieren. Nicht für alle Komponenten sind Ereignisse definiert.
Einige Komponenten besitzen ein Standardereignis. Dabei handelt es sich um das am häufigsten auftretende Ereignis. Bei einer Schaltfläche ist dies z.B. das Ereignis OnClick. Wenn Sie im Formular-Designer auf eine Komponente doppelklicken, für die ein Standardereignis vorhanden ist, wird das Gerüst der Behandlungsroutine für das Standardereignis erstellt.
Es ist möglich, Behandlungsroutinen für mehrere Ereignisse zu nutzen. In vielen Anwendungen kann beispielsweise eine Aktion sowohl durch eine Schaltfläche in der Symbolleiste als auch durch eine Menüoption ausgelöst werden. In diesem Fall würde es genügen, nur eine Behandlungsroutine zu erstellen und sie im Objektinspektor sowohl dem OnClick-Ereignis der Schaltfläche als auch dem der Menüoption zuzuordnen.
Dies ist die einfachste Möglichkeit für die mehrfache Verwendung von Ereignisbehandlungsroutinen. Aktionslisten und Aktionsbereiche (in der VCL) ermöglichen eine zentrale Verwaltung des auf Benutzerbefehle reagierenden Codes.
Komponenteneigenschaften festlegen
Zur Einstellung der als published deklarierten Eigenschaften während des Entwurfs stehen der Objektinspektor sowie Eigenschaftseditoren (für Spezialfälle) zur Verfügung. Sie können die Eigenschaften auch im Quelltext Ihrer Anwendung definieren und somit zur Laufzeit ändern.
Wenn Sie während des Entwurfs in einem Formular eine Komponente auswählen, zeigt der Objektinspektor die als published deklarierten Eigenschaften an und ermöglicht deren Bearbeitung.
Sind mehrere Komponenten ausgewählt, zeigt der Objektinspektor alle gemeinsamen Eigenschaften (außer Name) an. Besitzt eine Komponente einen anderen Wert als die restlichen, wird entweder ihr Standardwert angezeigt oder der Wert der ersten Komponente in der Auswahl. Bei einer Wertänderung erhalten alle ausgewählten Komponenten den neuen Wert.
Bezieht sich eine Wertänderung auf den Quelltext (z.B. ein neuer Name für eine Ereignisbehandlungsroutine), nimmt der Objektinspektor die Anpassung im Quelltext automatisch vor. Außerdem werden Änderungen im Quelltext (z.B. Umbenennen einer Methode in einer Klassendeklaration) sofort in den Objektinspektor übernommen.