TMemo TListBox Wichtige Komponenten

Schnellstart – Das Wichtigste - Benutzereingaben www.delphi-treff.de 40 procedure TForm1.Button1ClickSender: TObject; var eingabe: String; begin eingabe := Edit1.Text; end; Nun können wir mit dem weitermachen, was wir in den vorigen Kapiteln gelernt haben: Wir versuchen die Eingabe mit StrToIntDef in eine Zahl umzuwandeln und prüfen dann ihre Größe. Das Ergebnis geben wir über ShowMessage aus: procedure TForm1.Button1ClickSender: TObject; var eingabe: String; zahl: Integer; begin eingabe := Edit1.Text; zahl := StrToIntDefeingabe, 0; if zahl 10 then ShowMessage ‘Die eingegebene Zahl ist größer als 10.‘ else ShowMessage ‘Die eingegebene Zahl ist kleiner oder gleich 10.‘ ; end;

3.6.3. Wichtige Komponenten

Die drei wichtigsten Komponenten und ihre Verwendung haben wir gerade kennengelernt: TEdit, TLabel und TButton. Zwei weitere, häufig benötigte Komponenten sollen hier noch genannt werden: TMemo und TListBox.

3.6.3.1. TMemo

Bei TMemo handelt es sich quasi um eine Notepad-Komponente. Sie kann beliebigen, unformatierten Text darstellen. Intern wird dieser Text zeilenweise in einer Liste von Strings abgelegt. Wir setzen testweise ein TMemo auf das Fenster einer neuen VCL-Formularanwendung: Abbildung 23: Fenster mit TMemo Schnellstart – Das Wichtigste - Benutzereingaben www.delphi-treff.de 41 Zudem können wir ein Eingabefeld und einen Button verwenden, um das Memo mit Inhalt zu füllen. Ein Klick auf den Button soll den eingegebenen Text ans Ende des Memos einfügen: procedure TForm1.Button1ClickSender: TObject; begin Memo1.Lines.AddEdit1.Text; end; Ein weiterer Button soll dafür da sein, den Inhalt wieder zu leeren: procedure TForm1.Button2ClickSender: TObject; begin Memo1.Clear; end; Und jetzt kommt das Beste: Wir wollen den Inhalt des Memos in eine Textdatei speichern. Das soll ein dritter Button bewerkstelligen: procedure TForm1.Button3ClickSender: TObject; begin Memo1.Lines.SaveToFile ‘C:\test.txt’ ; end; Hier steht der Dateiname fest im Code. Aber dir fällt es nun sicher nicht mehr schwer, ein Eingabefeld auf dem Fenster zu platzieren, in das der Benutzer einen eigenen Dateinamen eingeben kann.

3.6.3.2. TListBox

Die Funktionsweise von TListBox ähnelt der eines Memos. Auch eine ListBox enthält eine Liste von Strings. Allerdings kann der Benutzer hier nicht frei Text eintragen. Vielmehr stellt eine ListBox eine Reihe von Einträgen zur Verfügung, aus denen der Benutzer einen oder mehrere auswählen kann. Im Objektinspektor ist die Eigenschaft MultiSelect zu finden. Bei false kann immer nur ein Wert ausgewählt werden, bei true mehrere. Das Befüllen einer ListBox funktioniert wie bei TMemo. Allerdings wird hier der Inhalt nicht in der Eigenschaft Lines, sondern in Items gehalten: ListBox1.Items.AddEdit1.Text; Sinnvoll ist es aber, die Einträge schon zur Entwicklungszeit hinzuzufügen. Das ist über den Objektinspektor ögli h u d do t i de Eige s haft „Ite s . Zur Laufzeit möchte man vielmehr wissen, wie viele und welche Einträge der Benutzer markiert hat. Bei Klick auf einen Button könnte also Folgendes passieren: Schnellstart – Das Wichtigste - Benutzereingaben www.delphi-treff.de 42 procedure TForm1.Button1ClickSender: TObject; begin if ListBox1.SelCount = 0 then ShowMessage ‘Bitte mind. einen Eintrag auswählen‘ else begin end; end; Bitte beachten: Das in obigem Beispiel verwendete SelCount funktioniert nur, wenn MultiSelect auf true steht. Ansonsten gibt es immer -1 zurück. Um herauszufinden, welche Werte im MultiSelect-Fall ausgewählt wurden, müssen wir eine Schleife über alle Einträge der ListBox machen und für jeden Wert prüfen, ob er ausgewählt wurde. Diese Prüfung erfolgt mit der Funktion Selected. procedure TForm1.Button1ClickSender: TObject; var i: Integer; begin for i := 0 to ListBox1.Items.Count - 1 do begin if ListBox1.Selected[i] then ShowMessageListBox1.Items[i] + ist ausgewählt ; end; end; Das Beispiel im Einzelnen: Als erstes schreiben wir eine for-Schleife, wie wir sie in einem vorigen Abschnitt kennengelernt haben, über alle Ei t äge de ListBo . Diese efi de si h i de Eige s haft „Ite s . „Ite s iede u hat ei e Eige s haft „Cou t , die u s sagt, ie iele Ei t äge es ü e haupt i de ListBo gi t. Da i die “ hleife bei 0 beginnen, müssen wir von Count 1 abziehen, damit wir nicht über das Ziel hinausschießen. Für jeden Eintrag der ListBox wird der Code zwischen Begin und End ausgeführt. Hier prüfen wir mit if, ob der Wert an Position i ausgewählt ist. Falls ja, wird direkt ein Popup-Fenster angezeigt, das den Text des Eintrags enthält. In eckigen Klammern hinter Items und Selected steht die Positionsnummer des Eintrags, wobei die Nummerierung immer mit 0 beginnt. D.h. Eintrag 1 hat den Index 0, Eintrag 2 den Index 1 usw. Ist MultiSelect false, darf der Anwender also nur einen einzigen Eintrag auswählen, gestaltet sich die Sache wesentlich einfacher. Hier gibt uns die Eigenschaft ItemIndex die Position des Eintrags zurück, der ausgewählt ist bzw. -1, wenn kein Eintrag ausgewählt wurde: Schnellstart – Das Wichtigste - Benutzereingaben www.delphi-treff.de 43 procedure TForm1.Button1ClickSender: TObject; var i: Integer; begin if ListBox1.ItemIndex = -1 then ShowMessage Bitte einen Eintrag auswählen else ShowMessageListBox1.Items[ListBox1.ItemIndex] + ist ausgewählt ; end; Schnellstart – Das Wichtigste - Hilfe www.delphi-treff.de 44

3.7. Hilfe

Alles, was man von Haus aus mit Delphi machen kann also alle Funktionen, Klassen, Komponenten usw. sind natürlich beschrieben. Und zwar in der Hilfe, die man aus der Entwicklungsumgebung über das gleichnamige Menü erreichen kann. Oder man platziert den Cursor auf einer Komponente oder einem Befehl und drückt die Taste F1. Das funktioniert auch, wenn beim Kompilieren oder zur Laufzeit des Programms Fehler auftreten. Die Delphi- Hilfe kann erläutern, was diese Fehlermeldungen bedeuten. Verwendet man z.B. in seinem Code etwas, das der Delphi-Compiler nicht versteht oder man vergisst z.B. einfach ein Semikolon am Zeilenende, wird man direkt beim Compile-Vorgang darauf hingewiesen: [DCC Fehler] Project1.dpr14: E2066 Operator oder Semikolon fehlt Ein Anklicken der Fehlermeldung und Drücken von F1 führt zu einer ausführlichen Erklärung des Problems, oftmals auch mit Beispielen. Auch wer Delphi noch nicht installiert hat, kann diese Hilfe teilweise mit Beispielen anschauen. Dazu hat Embarcadero ein Wiki eingerichtet: http:docwiki.embarcadero.comRADStudiodeHauptseite

3.8. Delphi-Komponentenbibliotheken

Wer mit Delphi eine GUI-Anwendung erstellt, muss sich gleich zu Beginn für eine Komponenten-Bibliothek e ts heide , ie i i u se e „Hallo Welt -Kapitel gesehen haben. Zur Wahl stehen die VCL „Visual Component Library u d Fi eMo ke „FMX . Die VCL gi t es bereits seit Delphi 1. Alle VCL-Komponenten basieren auf den Windows-eigenen Bibliotheken und werden durch die VCL für den Delphi-Entwickler nur etwas einfacher benutzbar gemacht. Seit Delphi 1 ist die VCL ständig erweitert worden. FireMonkey hingegen ist neu mit Delphi XE2 hinzugekommen. Zur Erstellung von Formularen wird hier nicht mehr auf die Windows-Funktionalitäten zurückgegriffen. Vielmehr handelt es sich um eine plattformunabhängige, vektororientierte Bibliothek, die alle Komponenten selbst zeichnet. Über verschiedene Stile kann man einstellen, dass sie z.B. aussehen wie Standard-Windows- Steuerelemente. Vorteil der Vektororientierung ist, dass man Fenster beliebig zoomen kann, ohne dass sie pixelig werden. FireMonkey-Anwendungen sind – wie auch VCL-Anwendungen – nativ, laufen also ohne Bibliotheken nur auf der Plattform, für die sie kompiliert wurden. Allerdings kann man in Delphi per Mausklick wählen, für welche Plattform kompiliert werden soll. FireMonkey-Anwendungen können für Win32, Win64 und MacOS X erstellt werden. Weitere Plattformen Android, Linux sind in Vorbereitung. Delphi XE2 Starter unterstützt übrigens nur Win32. In einer Anwendung kann man nicht VCL und FireMonkey kombinieren. Doch wie entscheidet man sich zwischen den Frameworks? Will man eine ganz normale Windows-Anwendung erstellen, bleibt man am besten