unit Vokabeln;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 =
class(TForm)
Label1: TLabel;
EditEintragen: TEdit;
ListBoxAnzeige: TListBox;
ButtonEintragen: TButton;
ButtonEntfernen: TButton;
ButtonAnzeigen: TButton;
RadioButtonLIFO: TRadioButton;
RadioButtonFIFO: TRadioButton;
ButtonLeeren: TButton;
ButtonSpeichern: TBitBtn;
ButtonLaden: TBitBtn;
ButtonBeenden: TBitBtn;
ButtonMarkieren: TButton;
procedure ButtonBeendenClick(Sender: TObject);
procedure ButtonEintragenClick(Sender: TObject);
procedure ButtonEntfernenClick(Sender: TObject);
procedure ButtonSpeichernClick(Sender: TObject);
procedure ButtonLadenClick(Sender: TObject);
procedure ButtonAnzeigenClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure EditEintragenKeyPress(Sender: TObject;
var Key: Char);
procedure ButtonLeerenClick(Sender: TObject);
procedure SpeicherFreigeben;
procedure ListBoxAnzeigeKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
procedure RadioButtonFIFOClick(Sender: TObject);
procedure RadioButtonLIFOClick(Sender: TObject);
procedure ButtonMarkierenClick(Sender: TObject);
end;
Zeiger = ^Element;
//Definition eines Zeigertyps
tInhalt =
string[15];
Element =
record
naechster: Zeiger;
Inhalt: tInhalt;
end;
const Datenpfad='
Vokabeln.dta';
//Hier wird die Datenbank gespeichert
var
Form1: TForm1;
Wurzel, z : Zeiger;
//nötig um Liste aufzubauen
f:
file of tInhalt;
//nötig für Speicher-/Ladevorgang
function Kontrolle:Boolean;
implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
//Bei Programm-Start
begin
EditEintragen.SetFocus;
//Fokus auf Eintragen-Textfeld setzen
Wurzel:=nil;
//Wurzel markiert erstes greifbares Element und wird zunächst "geerdet"
end;
function Kontrolle;
//Test auf gängigste IO-Fehler
begin
result := false;
case IOResult
of
0: result := true;
2:
begin showmessage ('
Datei nicht vorhanden.' +#13+ '
Datei wird angelegt');
rewrite(f);
result := true;
end;
3: showmessage ('
Ungueltiger Dateiname/Pfad');
5: showmessage ('
Dateizugriff verweigert.');
21: showmessage ('
Laufwerk nicht bereit!');
end;
end;
procedure TForm1.EditEintragenKeyPress(Sender: TObject;
var Key: Char);
//Eintragen über Enter Taste
begin
if (Key=#13)
and (length(EditEintragen.Text)<>0)
then
begin
Key:=#0;
ButtonEintragenClick(Sender);
//Wenn "Enter" gedrückt wird dann eintragen
ButtonAnzeigenClick(Sender);
//Neue Liste anzeigen
EditEintragen.SetFocus;
//Fokus auf Textfeld setzen
end;
end;
procedure TForm1.ButtonEintragenClick(Sender: TObject);
//Vokabeln eintragen
begin
if length(EditEintragen.Text)<>0
then //Wenn Textfeld nicht leer ist
begin
New(z);
//Erzeugen eines neuen Listenelements
z^.Inhalt:= EditEintragen.Text;
//Record wird befüllt
z^.naechster:=Wurzel;
//Zeiger "naechster" wird bisheriger Wurzelwert zugewiesen
Wurzel:=z;
//Zeiger Wurzel wird auf z "verbogen"
EditEintragen.Text:='
';
//Textfeld wieder leeren
ButtonAnzeigenClick(Sender);
//Neue Liste anzeigen
EditEintragen.SetFocus;
//Fokus auf Textfeld setzen
end;
end;
procedure TForm1.RadioButtonFIFOClick(Sender: TObject);
begin
ButtonAnzeigenClick(Sender);
//Neue Liste anzeigen
end;
procedure TForm1.RadioButtonLIFOClick(Sender: TObject);
begin
ButtonAnzeigenClick(Sender);
//Neue Liste anzeigen
end;
procedure TForm1.ButtonAnzeigenClick(Sender: TObject);
//Prozedur zum Anzeigen der Vokabelliste
begin
if RadioButtonFIFO.Checked
then //Wenn FIFO-Modus aktiviert...
begin
ListBoxAnzeige.Items.Clear;
//Listbox wird zunächst geleert...
z:=Wurzel;
while z<>
nil do //...und mit neuer Liste befüllt
begin
ListBoxAnzeige.Items.Insert(0,z^.Inhalt);
z:=z^.naechster;
end;
end
else if RadioButtonLIFO.Checked
then //Wenn LIFO-Modus aktiviert...
begin
ListBoxAnzeige.Items.Clear;
//Listbox wird zunächst geleert...
z:=Wurzel;
while z<>
nil do //...und mit neuer Liste befüllt
begin
ListBoxAnzeige.Items.Add(z^.Inhalt);
z:=z^.naechster;
end;
end;
end;
procedure TForm1.ButtonLeerenClick(Sender: TObject);
//Listbox wird geleert
begin
ListBoxAnzeige.Items.Clear;
end;
procedure TForm1.ListBoxAnzeigeKeyDown(Sender: TObject;
var Key: Word;
//Entfernen mit Hilfe der "Delete" Taste
Shift: TShiftState);
begin
if (Key=VK_DELETE)
then ButtonEntfernenClick(Sender);
//Entfernen-Button klicken
end;
procedure TForm1.ButtonMarkierenClick(Sender: TObject);
//Prozedur markiert alle Einträge der Listbox
var min, max: integer;
begin
max:=ListBoxAnzeige.Count;
for min:=1
to max
do ListBoxAnzeige.Selected[min-1]:=true;
end;
procedure TForm1.ButtonEntfernenClick(Sender: TObject);
//Button entfernt markierte Einträge aus der Liste
var ii : integer;
letzter : integer;
begin
if ListBoxAnzeige.Count<>0
then
begin
with ListBoxAnzeige
do
begin
for ii := -1 + Items.Count
downto 0
do
if Selected[ii]
then
begin
Items.Delete(ii);
letzter:=ii;
end;
end;
if ListBoxAnzeige.Count<=letzter
then dec(letzter);
//Eintrag an der Stelle der letzten Löschung wird markiert
ListBoxAnzeige.Selected[letzter]:=true;
//-------------------------------------------------------------------------------------
//----------------------->Schleife, die Änderungen in die Zeigerstruktur übernimmt
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
end;
end;
procedure TForm1.SpeicherFreigeben;
// Speicher für den Zeiger wird freigegeben
var DelPointer : Zeiger;
begin
while Wurzel <>
nil do begin
DelPointer:=Wurzel;
Wurzel:=Wurzel^.naechster;
dispose(DelPointer);
end;
Wurzel:=nil;
end;
procedure TForm1.ButtonSpeichernClick(Sender: TObject);
//Vokabeldatenbank speichern
var RunPointer : Zeiger;
begin
Assignfile(f, Datenpfad);
try
rewrite(f);
RunPointer:=Wurzel;
while RunPointer <>
nil do
begin
write(f, RunPointer^.Inhalt);
RunPointer:=RunPointer^.naechster;
end;
showmessage('
Vokabel-Verzeichnis erfolgreich gespeichert');
//Erfolgsmeldung ausgeben
finally
closefile(f);
end;
end;
procedure TForm1.ButtonLadenClick(Sender: TObject);
//Vokabeldatenbank laden
var NewPointer, OldPointer : Zeiger;
begin
SpeicherFreigeben;
Assignfile (f, Datenpfad);
try
reset(f);
OldPointer:=nil;
while not eof(f)
do //Auslesen bis Ende der Datei erreicht wird
begin
new(NewPointer);
read(f, NewPointer^.Inhalt);
NewPointer^.naechster:=nil;
if OldPointer <>
nil then
OldPointer^.naechster:=NewPointer;
if Wurzel =
nil then
Wurzel:=NewPointer;
OldPointer:=NewPointer;
end;
ButtonAnzeigenClick(Sender);
//Geladene Liste anzeigen
showmessage('
Datenbank erfolgreich geladen');
//Erfolgsmeldung ausgeben
finally
closefile(f);
end;
end;
procedure TForm1.ButtonBeendenClick(Sender: TObject);
//Programm beenden
begin
close;
end;
end.