Programmierkurs: Delphi: Erstellung einer grafischen Oberfläche Grundlagen

Aus Wikibooks

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[Bearbeiten] Grundsätze

Eine grafische Oberfläche wird durch Drag&Drop erstellt: In der Komponentenpalette wählt man die Komponente durch einen einfachen Klick aus und bewegt dann die Maus an die Stelle, wo die linke obere Ecke der Komponente sein soll. Dann zieht man mit der Maus nach rechts unten, bis die gewünschte Position erreicht ist. Wenn man nur auf das Formular klickt, wird die Komponente in einer Standardgröße, die veränderlich ist, erstellt.

Anschließend kann man im Objektinspektor die Eigenschaften der Komponente ändern, wie z.B. die Aufschrift (Caption), den Inhalt (Text, Lines oder Items), Schriftart, -größe, -farbe etc. (Font) und komponentenspezifische Eigenschaften ändern.

Um ein Ereignis zu programmieren, das bei einer bestimmten Aktion geschehen soll, wählt man im Objektinspektor die Registerseite "Ereignisse" und wählt das entsprechende Ereignis durch Doppelklick auf das leere Feld hinter dem Namen der Methode aus (OnClick für einen Klick, OnDblClick für einen Doppelklick, OnMouseDown für ein Runterdrücken einer Maustaste, OnMouseMove für ein Drüberfahren mit der Maus, OnKeyDown für das Drücken eines Keys, ...). Im Code-Editor kann man allerdings auch jede Eigenschaft ohne Objektinspektor regeln. Dabei wird das Ereignis OnCreate des Formulars gewählt (wird durch Doppelklick auf das Formular erstellt):

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Font.Name := 'Courier New';
end;


Sagt, dass Button1 die Schriftart "Courier New" verwenden soll. Ungewohnt: Zwischen Formular und Unit wird mit F12 gewechselt. Der erstellte Quellcode ist ebenfalls ungewohnt (Delphi 7 Personal):

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.

Kompiliert wird das Ganze wie in der Konsole mit F9 oder Start / Start.


Spezielle Komponenten haben spezielle Eigenschaften / Ereignisse. Ein Timer hat zum Beispiel die Eigenschaften Intervall - der Abstand in Millisekunden, indem das Ereignis OnTimer ausgelöst wird.

[Bearbeiten] Weitergabe

Einem Formular steht genau eine Unit zu. Beim Abspeichern des Projekts durch Datei / Alles speichern ... gelten folgende Regeln:

  • Die Projektdatei fasst alle Formulare / Units zusammen. In ihr kann auch der Programmablauf verändert werden, beispielsweise wenn ein Info-Fenster am Anfang erstellt werden soll. Sie hat die Dateiendung ".dpr" (Delphi Project).
  • Die einzelnen Units bekommen die Dateiendung ".pas" für Pascal. Sie beinhalten entweder den Code einer Komponente, den eines Formulars oder Funktionen. Keine Unit darf denselben Namen wie die Projektdatei haben.
  • Die Formulare bekommen in Delphi (wie im C++ Builder) die Endung ".dfm" für Delphi Formular. Sie haben denselben Namen wie die dazugehörige Unit, bloß eine andere Endung. Delphi- und C++ Builder-Formulare sind zueinander kompatibel.

Bei allen Dateinamen sind Leerzeichen oder Zahlen am Anfang verboten, auch wenn das Windows theoretisch zulassen würde. Weiterhin werden folgende Dateien beim Kompilieren erzeugt:

  • Die Anwendung bekommt denselben Namen wie das Projekt, bloß mit der Endung ".exe" für Executable. Sie ist das fertige Programm und ist (neben eventuellen Ressourcen oder Datenbanken, Grafiken, ...) die einzige Datei, die zur Ausführung relevant ist. Demnach muss man auch nur sie für eine Weitergabe als Nicht-OpenSource / Freeware mit Source weitergeben.
  • Alle Units werden kompiliert. Die kompilierte Unit ist binär und bekommt die Endung ".dcu" für Delphi compiled Unit. Eine DCU-Datei ist nur mit der Delphi-Version, mit der sie erstellt wurde, kompatibel. Höhere Delphi-Versionen bieten es einem an, eine DCU-Datei eines älteren Formats zu konvertieren. Andersherum ist das logischerweise nicht möglich.
  • Eine Ressourcendatei (*.res) wird ebenfalls erstellt. Diese ist jedoch nicht wichtig, man bekommt zwar eine Fehlermeldung, wenn die Ressourcendatei fehlt. Diese kann aber ignoriert werden.
  • Eine Outlook-Konfigurationsdatei wird auch erstellt.

Für OpenSource-Projekte müssen folgende Dateien mitgeliefert werden:

  • Die Projektdatei (.dpr)
  • Die Units (.pas)
  • Die Formulare (.dfm)

[Bearbeiten] Mehrere Formulare erstellen

Mehrere Formulare können erstellt werden, um z.B. einen Dialog oder ein Info-Fenster zu integrieren. Dies kann über Datei / Neues Formular geschehen.

Beim Aufruf eines Formulars gibt es zwei Möglichkeiten. Nachdem die Unit des Formulars (z. B. Unit1 für Form1) in die Uses-Klausel aufgenommen wurden, kann man das Formular aufrufen:

  • Form2.Show;
  • Form2.ShowModal;

Show ist ein einfaches Aufrufen. Wenn man einen Dialog hat, kann man Buttons unterbringen und denen einen anderen ModalResult-Wert zuweisen (mrOk für OK, mrCancel für Abbrechen, ...). Nun ist Show eine Prozedur und ShowModal eine Funktion. ShowModal gibt den gedrückten Button (bzw. dessen ModalResult) zurück. z. B. kann man feststellen, ob wirklich auf OK gedrückt wurde:


if Form2.ShowModal = mrOk then          // User hat OK geklickt
  ShowMessage('Sie haben OK geklickt'); // User benachrichtigen

Bei mehreren Abfragen wird ein anderes Konzept verwendet:

var
  a: Integer;
begin
  a := Form2.ShowModal;                                // Form2 aufrufen und den ModalResult der Variablen a zuweisen
  case a of                                            // case-of ...
    mrOk: ShowMessage('Sie haben OK geklickt');        // OK wurde geklickt
    mrCancel: ShowMessage('Aktion wurde abgebrochen.');// Cancel wurde geklickt
  end;                                                 // case-of beenden

Wichtig zu wissen ist, dass mrOk bloß eine Integer-Konstante ist. Sie kann demnach auch mit einer Zahl angesprochen werden:

Konstante Wert Bedeutung
mrNone 0 Kein Wert. Wird als Vorgabewert verwendet, bevor der Benutzer das Dialogfeld verlässt.
mrOk idOK Der Benutzer verlässt das Dialogfeld mit der Schaltfläche OK.
mrCancel idCancel Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Abbrechen.
mrAbort idAbort Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Abbruch.
mrRetry idRetry Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Wiederholen.
mrIgnore idIgnore Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Ignorieren.
mrYes idYes Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Ja.
mrNo idNo Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Nein.
mrAll mrNo + 1 Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Alle.
mrNoToAll mrAll + 1 Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Nein für alle.
mrYesToAll mrNoToAll + 1 Der Benutzer verlässt das Dialogfeld mit der Schaltfläche Ja für alle.

Quelle: Delphi 2006-Hilfe

[Bearbeiten] Komponenten dynamisch erstellen

Objekte / Komponenten können dynamisch erstellt werden. Dazu sind ein Teil von Eigenschaften wichtig, um sie sichtbar zu machen. Hier beschreiben wir kurz mit Beispielcode, wie man ein Image (nächster Abschnitt) dynamisch erstellt:

var
  myimage: TImage;
begin
  try
    myimage          := TImage.Create(Self);
    myimage.Parent   := Form1;
    myimage.Left     := 100;
    myimage.Top      := 100;
    myimage.AutoSize := true;
    myimage.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'bild.bmp');
    myimage.Visible  := true;
    myimage.Name     := 'DynamicImage';
  finally
    myimage.Free;    // Hier wird die Komponente sofort wieder gelöscht.
  end;               // Sie sollten dies eventuell im OnClose -Ereignis des Forms machen.
end;

Um das myimage.Free in den OnClose-Teil des Forms zu verlagern, muss myimage global vereinbart werden!


Arrow left.png Der Debugger Inhaltsverzeichnis Erstellung einer grafischen Oberfläche Fortgeschrittene Themen Arrow right.png
Persönliche Werkzeuge