Programmierkurs: Delphi: Erstellung einer grafischen Oberfläche Grundlagen
Aus Wikibooks
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!
| Inhaltsverzeichnis | Erstellung einer grafischen Oberfläche Fortgeschrittene Themen |