unit Busanzeige1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
ListBox1: TListBox;
TLabel1: TLabel;
TLabel2: TLabel;
TLabel3: TLabel;
TLabel4: TLabel;
TLabel5: TLabel;
Hinzufügen: TButton;
alleLinien: TButton;
Linie: TEdit;
Ziel: TEdit;
Ankunft: TEdit;
Abfahrt: TEdit;
Verspätung: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
bearbeiten: TButton;
löschen: TButton;
zehnAnzeigen: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Beenden: TBitBtn;
procedure HinzufügenClick(Sender: TObject);
procedure BeendenClick(Sender: TObject);
procedure alleLinienClick(Sender: TObject);
procedure löschenClick(Sender: TObject);
procedure zehnAnzeigenClick(Sender: TObject);
procedure bearbeitenClick(Sender: TObject);
private
type
TBusEintrag = record
Form1: TForm1;
Liste: array of TBusEintrag;
x: integer;
AnkunftPlusVerspätung: TTime;
procedure Delete;
procedure Output(AnzahlEinträge:integer);
procedure Sort;
end;
end;
implementation
{$R *.dfm}
procedure TForm1.Delete;
var
i: integer;
MakierteStelle: integer;
begin
//x bekommt den Wert der makierten Stelle
for i := 0 to ListBox1.Count - 1 do
if ListBox1.Selected[i] then begin
MakierteStelle:=i;
end;
//Einträge in Array werden verschoben
while MakierteStelle<high(Liste) do begin
Liste[MakierteStelle]:=Liste[MakierteStelle+1];
x:=x+1;
end;
//Array wird um 1 verringert
setLength(Liste,Length(Liste)-1);
//Makierter Eintrag wird aus ListBox entfernt
ListBox1.DeleteSelected;
end;
procedure TForm1.Output(AnzahlEinträge:integer);
const
MAX_TABS = 4;
Tab = #9;
var
Tabulators: array[0..MAX_TABS] of Integer;
StelleEintrag:integer;
begin
//Tabulatorweiten festlegen
Tabulators[0] := 72;
Tabulators[1] := 136;
Tabulators[2] := 202;
Tabulators[3] := 1;
Tabulators[4] := 1;
ListBox1.TabWidth := 1;
//Tabulatoren setzen
SendMessage(ListBox1.Handle, LB_SETTABSTOPS, MAX_TABS, Longint(@Tabulators));
//ListBox leeren
ListBox1.clear;
//Liste ausgeben
StelleEintrag:=0;
while ((StelleEintrag < length(Liste)) and (StelleEintrag<AnzahlEinträge)) do begin
ListBox1.Items.Strings[StelleEintrag]:=' '+Liste[StelleEintrag].Linie+ Tab +Liste[StelleEintrag].Ziel+Tab+TimeToStr(Liste[StelleEintrag].Abfahrt+Liste[StelleEintrag].Verspätung)+' Uhr'+Tab+TimeToStr(Liste[StelleEintrag].Verspätung)+Tab+'h';
StelleEintrag:=StelleEintrag+1;
end;
end;
procedure TForm1.Sort;
var
Eintrag:integer;
begin
if length(Liste)=0 then begin
SetLength(Liste,1);
end
//suche Position für neuen Eintrag
else begin
while (AnkunftPlusVerspätung>(Liste[x].Ankunft+Liste[x].Verspätung)) and (x < length(Liste)) do begin
x:=(x+1);
end;
//Array um 1 erweitern
SetLength(Liste,length(Liste)+1);
Eintrag:=(high(Liste));
//Einträge verschieben
while (Eintrag>x) do begin
Liste[Eintrag]:=Liste[(Eintrag-1)];
Eintrag:=(Eintrag-1);
end;
end;
end;
procedure TForm1.alleLinienClick(Sender: TObject);
begin
Output(length(Liste));
end;
procedure TForm1.bearbeitenClick(Sender: TObject);
var
i:integer;
MakierteStelle: integer;
begin
//x bekommt den Wert der makierten Stelle
for i := 0 to listbox1.Count - 1 do
if listbox1.Selected[i] then begin
MakierteStelle:=i;
end;
//Makierte Linie wird in Editfelder eingetragen
Linie.Text:= Liste[MakierteStelle].Linie;
Ziel.Text:= Liste[MakierteStelle].Ziel;
Ankunft.Text:= TimeToStr(Liste[MakierteStelle].Ankunft);
Abfahrt.Text:= TimeToStr(Liste[MakierteStelle].Abfahrt);
Verspätung.Text:= TimeToStr(Liste[MakierteStelle].Verspätung);
Delete;
end;
procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;
procedure TForm1.löschenClick(Sender: TObject);
begin
Delete;
Output(10);
end;
procedure TForm1.zehnAnzeigenClick(Sender: TObject);
begin
Output(10);
end;
procedure TForm1.HinzufügenClick(Sender: TObject);
begin
try
//Eingetragene Werte Variablen zuordnen
x:=0;
AnkunftPlusVerspätung:= (StrToTime(Ankunft.Text)+StrToTime(Verspätung.Text));
Sort;
//neuen Eintrag in Array eintragen
Liste[x].Linie:=Linie.Text;;
Liste[x].Ziel:=Ziel.Text;
Liste[x].Ankunft:=StrToTime(Ankunft.Text);
Liste[x].Abfahrt:=StrToTime(Abfahrt.Text);
Liste[x].Verspätung:=StrToTime(Verspätung.Text);
Output(10);
//Edit Felder leeren
Linie.Clear;
Ziel.Clear;
Ankunft.Clear;
Abfahrt.Clear;
Verspätung.Clear;
except
showmessage('Bitte alle Felder ausfüllen oder korrekte Uhrzeit eingeben');
end;
end;
end.