Thema: Delphi Proceduren erstellen

Einzelnen Beitrag anzeigen

Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#21

AW: Proceduren erstellen

  Alt 23. Aug 2011, 14:11
Leider war diese Lösung falsch, ich soll es mit private machen.
Doch nun bekomme ich sehr viele Fehler, erkennt einer warum, ohne dass ich die Fehler alle benenne?

Code:
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.

Geändert von Marcel2906 (23. Aug 2011 um 14:15 Uhr)
  Mit Zitat antworten Zitat