Verwalten von Komponenten in Komponentenliste
Die grafisch in das Formular zu ziehenden Objekte heißen in Delphi Komponenten
und sind vom Typ TComponent. Nebenstehende Grafik zeigt die Stellung von TComponent in der
Vererbungshierarchie von TButton. Komponenten müssen wie alle Objekte erzeugt und vernichtet
werden. Darum muss man sich in Delphi nicht selbst kümmern. Das Formular verwaltet in der
sogenannten Komponentenliste Components die Adressen aller zugehörigen Komponenten. |
|
|
In obiger Grafik hat die Komponentenliste 5 Einträge: 2 Edit-Felder, 1 Button und zwei Labels.
ComponentCount hat also den Wert 5.
Ein kleines Delphi-Programm illustriert den Umgang. Es folgt ein Ausschnitt:
procedure TForm1.bZeigeClick(Sender: TObject);
var
i : integer;
typ : string;
begin
mListe.Lines.Clear;
for i := 0 to ComponentCount-1 do
begin
typ := '';
if Components[i] is TButton then typ := 'TButton';
if Components[i] is TEdit then typ := 'TEdit';
if Components[i] is TMemo then typ := 'TMemo';
if Components[i] is TLabel then typ := 'TLabel';
{ .......... }
mListe.Lines.Add(Components[i].name+' '+typ);
end;
end;
|
Type-Casting
Will man auf eine Eigenschaft wie z.B. caption zugreifen, die nicht alle Komponenten haben,
so reicht es nicht, zu wissen, dass z.B. components[0] vom Typ TLabel ist. Der Zeiger in
components[0] enthält die Information, dass auf ein Objekt vom Typ TComponent gezeigt wird und
nicht mehr. Die Zuweisung components[0].caption := 'xyz'; ist fehlerhaft. Durch eine explizite
Typ-Umwandlung läßt sich dieser Fehler vermeiden: TLabel(components[0]).caption := 'xyz'
funktioniert.
Auszug aus der Delphi-Hilfe:
...
In bestimmten Situationen ist es erforderlich, den Typ eines Ausdrucks zu ändern. Durch
eine Typumwandlung kann einem Ausdruck vorübergehend ein anderer Typ zugeordnet werden.
Beispielsweise konvertiert die Anweisung Integer ('A') den Buchstaben A in einen Integer.
Die Syntax für eine Typumwandlung lautet:
Typbezeichner(Ausdruck)
...