Experimente mit Delphi-Objekten
Durch eine Reihe von 'Software-Experimenten' soll der Umgang mit Objekten in Delphi
durchschaubarer werden.
- Lege ein neues Projekt 'oop1' (Ordner, usw.) an.
- Füge unter 'private' eine Variable eTest vom Typ TEdit ein.
type
TForm1 = class(TForm)
private
eTest : TEdit;
public
{ Public-Deklarationen }
end;
Beim Compilieren erhältst du sofort eine Fehlermeldung. Welche, warum?
- Benutze die Hilfe, um nach TEdit (VCL-Referenz) zu suchen. In welcher Unit liegt diese
Klasse? Binde diese Unit ein und compiliere erneut.
- Wir wollen die Variable eTest nutzen und versuchen dem Objekt mit eTest.clear
eine Nachricht zu schicken. Um diesen Vorgang auszulösen, ergänzen wir die Ereignisbehandlung
eines Buttons bTuewas.
procedure TForm1.bTuewasClick(Sender: TObject);
begin
eTest.Clear;
end;
Löse nach dem Compilieren das Ereignis aus. Was passiert?
Ein häufiger Fehler in der objektorientierten Programmierung ist eingetreten, es wurde versucht, einem
nicht existierenden Objekt eine Nachricht zu schicken.
- Mache dich über die Begriffe 'Referenzvariable', 'Konstruktor', 'Destruktor'
(z.B. in Referenzvariable und Objekte) kundig.
- Füge zwei neue Buttons bErzeuge und bVernichte ein, mit deren Hilfe ein Objekt eTest (ja, man
verwendet tatsächlich oft den gleichen Namen für zwei unterschiedliche Dinge: einmal Referenzvariable, einmal Objekt) erzeugt
und vernichtet werden kann. Teste die verschiedenen Fälle durch. Wo liegt der Unterschied, eTest.clear ohne vorherige
Erzeugung und eTest.clear nach der Vernichtung? Welche Fehlermeldung erscheint, wenn man dem existierenden
Objekt die Nachricht eTest.clear schickt?
- Erweitere die Erzeugung des Objekts durch das Setzen der parent-Eigenschaft.
procedure TForm1.bErzeugeClick(Sender: TObject);
begin
eTest := TEdit.Create(nil);
eTest.Parent := Form1;
end;
Was beobachtest du? Bleiben die Fehlermeldungen gleich?
Eine Steuerelement, hier ein Edit-Feld bleibt unsichtbar, wenn nicht die Eigenschaft parent auf das übergeordnete
Fenster gesetzt wird.
- Das Edit-Feld klebt links oben in der Ecke, warum? Ändere das.
- Informiere dich über die 'Delphi-Automatiken', die wir umgangen haben, insbesondere über die
Komponentenliste. Wird jetzt die Rolle des Parameters
AOwner in Create deutlich?
- Erweitere das Test-Programm um eine Anzeige der Komponentenliste. Welche Eigenschaft von eTest sollte man
unbedingt noch setzen?