Ein Delphi-Objekt untersuchen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Was ist ein Objekt?


Wenn Sie ein neues Projekt anlegen, zeigt die IDE ein neues Formular für Sie an, das Sie nach Bedarf anpassen können. Im Quelltext-Editor deklariert die automatisch generierte Unit einen neuen Klassentyp für das Formular und enthält den Code, der die neue Formularinstanz anlegt. Der erzeugte Code für eine neue Windows-Anwendung sieht folgendermaßen aus:

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm){ The type declaration of the form begins here }
  private
    { Private declarations }
  public
    { Public declarations }
  end;{ The type declaration of the form ends here }
var
  Form1: TForm1;
implementation{ Beginning of implementation part }
{$R *.dfm}
end.{ End of implementation part and unit}

Der neue Klassentyp heißt TForm1 und leitet sich vom Typ TForm ab, bei dem es sich ebenfalls um eine Klasse handelt.

Eine Klasse verhält sich wie ein Datensatz, in dem beide Datenfelder enthalten. Eine Klasse enthält jedoch zusätzlich Methoden – Code, mit dem die Daten des Objekts bearbeitet werden. Bisher scheint TForm1 keine Felder oder Methoden zu enthalten, weil Sie dem Formular noch keine Komponenten (die Felder des neuen Objekts) hinzugefügt haben und weil Sie noch keine Ereignisbehandlungsroutinen (die Methoden des neuen Objekts) erzeugt haben. TForm1 enthält jedoch geerbte Felder und Methoden, auch wenn Sie diese nicht in der Typdeklaration sehen.

Die folgende Variablendeklaration deklariert die Variable Form1 des neuen Typs TForm1.

var
  Form1: TForm1;

Form1 stellt eine Instanz oder ein Objekt des Klassentyps TForm1 dar. Sie können mehrere Instanzen eines Klassentyps deklarieren, beispielsweise um in einer MDI-Anwendung (MDI – Multiple Document Interface) mehrere untergeordnete Fenster zu erstellen. Jede Instanz verwaltet ihre eigenen Daten, aber alle Instanzen verwenden für die Ausführung von Methoden denselben Code.

Sie haben zwar dem Formular noch keine Komponenten hinzugefügt und noch keinen Code geschrieben, besitzen jedoch schon eine vollständige GUI-Anwendung, die Sie compilieren und ausführen können. Sie zeigt jedoch nur ein leeres Formular an.

Angenommen, Sie fügen diesem Formular eine Schaltfläche hinzu und schreiben die Ereignisbehandlungsroutine OnClick, die die Farbe des Formulars ändert, wenn der Benutzer auf die Schaltfläche klickt. Das Ergebnis könnte wie folgt aussehen:

Ein einfaches Formular

Green.jpg

Wenn der Benutzer auf die Schaltfläche klickt, ändert sich die Farbe des Formulars in Grün. So sieht der Code für die Ereignisbehandlung des OnClick-Ereignisses der Schaltfläche aus:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Color := clGreen;
end;

Objekte können andere Objekte als Datenfelder enthalten. Immer wenn Sie eine Komponente in einem Formular platzieren, erscheint in der Typdeklaration des Formulars ein neues Feld. Wenn Sie die oben beschriebene Anwendung erstellen und den Code im Quelltext-Editor betrachten, sehen Sie Folgendes:

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
  TForm1 = class(TForm)
    Button1: TButton;{ New data field }
    procedure Button1Click(Sender: TObject);{ New method declaration }
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);{ The code of the new method }
begin
  Form1.Color := clGreen;
end;
end.

TForm1 enthält das Feld Button1, das auf die Schaltfläche reagiert, die Sie dem Formular hinzugefügt haben. TButton ist ein Klassentyp, Button1 verweist also auf ein Objekt.

Alle Ereignisbehandlungsroutinen, die Sie mithilfe der IDE schreiben, sind Methoden des Formularobjekts. Immer wenn Sie eine Ereignisbehandlungsroutine schreiben, wird im Formularobjekttyp eine Methode deklariert. Der Typ TForm1 enthält jetzt eine neue Methode, die Prozedur Button1Click, die innerhalb der Typdeklaration von TForm1 deklariert ist. Der Code, der die Methode Button1Click implementiert, erscheint im implementation-Abschnitt der Unit.

Siehe auch