10 Textdateien, Dialogboxen

Voraussetzungen:

Ziele:

Übungsaufgabe:

Ein Programm soll erstellt werden, mit dem verschiedene Textdateien editiert und gespeichert werden können. Aus je einer Textdatei mit Adjektiva, Substantive, Verba und Ergänzungen sollen mit Hilfe von Zufallszahlen einfache Sätze in "Gedichtform" gebildet und ausgegeben werden. Diese Gedichte sollen als Textdatei gespeichert und allenfalls ausgedruckt werden können. Der Programmablauf soll ausschließlich über Menü-Befehle anstelle von Buttons gesteuert werden.

Mögliche Erweiterungen: Fehlerbehandlung, Messageboxen, Hilfedatei, "Speichern unter...", Dateiliste, kompliziertere Gedichte erstellen (Unterscheiden maskulin-feminin-neutrum, allenfalls auch Nebensätze)...

Mit Dialogen werden typische Schnittstellen zwischen Computer(-Programm) und Benutzer hergestellt. Entsprechend der Windows-API stehen hier bestimmte Fenster zur Verfügung, die aus der Komponentenpalette mittels der "Karteikarte Dialoge" ausgewählt werden können:

Sobald ein Dialog aus der Palette in das aktuelle Formular gezogen wurde, stehen er und seine Komponenten (etwa über den Objektinspektor) zur Verfügung.

Die Dialoge werden durch die Execute-Methode aufgerufen, die i.A. einen Wahrheitswert (aufgerufen oder nicht aufgerufen) zurückgibt. Anschließend können bestimmte Komponenten und Eigenschaften des aufgerufenen Dialogs übernommen werden.

Beispiel: Speichern einer Datei

procedureTform1.Speichern1.CLick(Sender:TObject);
begin
if SaveDialog1.Execute then begin
 Memo1.Lines.SaveToFile(SaveDialog1.FileName);
 end;
end;

Im obigen Beispiel ist nach dem Öffnen des "Speichern-Dialoges" (SaveDialog1.Execute = wahr) der Name der ausgewählten Datei in der Variablen (Komponente)

SaveDialog1.FileName 

enthalten.

Unabhängig von den Dialogen zum Lesen oder Speichern von Dateien, können Dateien (wie in Pascal) direkt vom Programm heraus gelesen oder geschrieben werden. In diesem Abschnitt wollen wir nur Texte, also hintereinander geügte Textzeilen speichern. Wir verwenden dazu den Dateityp TextFile. Textdateien sind zeichen- und zeilenweise organisiert: Jede Zeile wird durch die ASCII-Zeichen 13 ($0D, Wagerrücklauf) und 10 ($0A, Zeilenvorschub) abgeschlossen(1). Die Länge der Zeile wird durch die Position dieser Zeilenendzeichen bestimmt.

Die folgenden Pascal-Befehle dienen zum Öffnen, Lesen und Schließen von Textdateien (beachte, dass nur eine Auswahl von Befehlen angegeben ist - ONLINE-Hilfe):
AssignFile
Verknüpft eine Dateivariable mit einer Datei.
Reset
Öffnet eine vorhandene Datei.
CloseFile
Schließt die geöffnete Datei und hebt die Zuordnung einer Datei mit einer Dateivariablen wieder auf.
Append
Öffnet eine Textdatei zum Anfügen weiterer Zeichen.
Readln
Liest eine Zeile aus einer Textdatei.
Writeln
Schreibt eine Zeile in eine Textdatei.
Eof
Prüft, ob das Dateiende erreicht ist.

Der nächste Programmausschnitt zeigt beispielshaft die Verwendung der oben dargestellten Befehle: Eine Textdatei wird geöffnet, der Inhalt in ein Array mit dem Namen "Wortfeld" eingelesen und die Anzahl der enthaltenen Zeilen in die Variable "anzahl" übernommen.

Beispiel: Öffnen und Lesen einer Textdatei

procedure lese (dateiname:name; 
var feld:wortfeld; 
var anzahl:integer);
var i:integer;
datei:textfile;
begin
assignFile(datei,dateiname);
reset(datei);
i:=1;
while not eof(datei) do begin
readln(datei,feld[i]);
inc(i);
end;
anzahl:=i-1;
closeFile(datei);
end;

Verwenden des Menü-Designers

Der Menü-Designer von Delphi ermöglicht die Konstruktion üblicher Windows-Menüzeilen. Dazu empfiehlt sich folgende Vorgangsweise:

1.Von der Standard-Karteikarte der Komponentenpalette wird eine Hauptmenü- oder Popup-Menü-Komponente in das aktuelle Formular gezogen.

2.Mit einem Doppelklick auf diese Komponente wird das Fenster des Menü-Designers aufgerufen.

3.Das Menü wird definiert, indem die Befehle in die entsprechenden Stellen des Menüs eingefügt werden (eine horizontale Linie entsteht durch die Eingabe des Bindesstriches). Beachte den Objektinspektor und die Eigenschaften jeder Menü-Komponente!

4.Um den Menü-Befehlen entsprechende Prozeduren zuzuordnen, gelant man mit einem Doppelklick auf den Menüeintrag im Quelltext-Editor. Wie bei Buttons braucht man jetzt nur mehr den entsprechenden Code zwischen die begin und end Anweisung zu setzen.

5.Eine interessante Eigenschaft der Menüeinträge ist die Eigenschaft Checked. Wird diese Eigenschaft auf truegesetzt, so erscheint neben dem Menüeintrag ein Häkchen. Weiters kann diese Eigenschaft im gesamten Delphi-Programm abgefragt werden...

1. Delphi bevorzugt allerdings den ANSI-Zeichensatz. Damit ASCII-Dateien mit den Sonderzeichen korrekt dargestellt werden, ist es notwendig die Eigenschaft OEMConvert auf true zu setzen...