Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Proceduren erstellen (https://www.delphipraxis.net/162439-proceduren-erstellen.html)

Marcel2906 23. Aug 2011 13:11

AW: Proceduren erstellen
 
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.

DeddyH 23. Aug 2011 13:14

AW: Proceduren erstellen
 
Die Typdeklarationen haben im private-Abschnitt nichts zu suchen.
Delphi-Quellcode:
type
  TNeuerTyp = (ntDies, ntDas);

  TForm1 = class(TForm)
  ...
  private
    procedure DoSomeWork;
    procedure DoOtherWork;
  end;

Marcel2906 23. Aug 2011 13:20

AW: Proceduren erstellen
 
Nun habe ich es so, und trotzdem noch Fehler:

Code:
unit Busanzeige1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
    TBusEintrag = record
    Form1: TForm1;
    Liste: array of TBusEintrag;
    x: integer;
    AnkunftPlusVerspätung: TTime;

  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
    procedure Delete;
    procedure Output(AnzahlEinträge:integer);
    procedure Sort;
    end;

implementation

{$R *.dfm}

DeddyH 23. Aug 2011 13:21

AW: Proceduren erstellen
 
Was soll denn genau zum Record gehören?

Marcel2906 23. Aug 2011 13:31

AW: Proceduren erstellen
 
Ahhh, danke..da ist mein Fehler...irgendwie sind meine Sachen vom Record verloren gegangen :!:
Jetzt schaff ich es alleine, danke schön :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz