AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Proceduren erstellen

Ein Thema von Marcel2906 · begonnen am 23. Aug 2011 · letzter Beitrag vom 23. Aug 2011
Antwort Antwort
Seite 1 von 3  1 23   
Marcel2906

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

Proceduren erstellen

  Alt 23. Aug 2011, 09:41
Hey Leute,

ich habe ein Programm geschrieben, welches die Funktionen einer Bus Anzeigetafel hat.
Nun sollte ich das löschen, die Ausgabe an listbox und das sortieren in einer eigenen Procedure machen.
Doch so etwas hab ich noch nie gemacht, darum hab ich mich mal im iNet schlau gemacht. Für das sortieren hat es auch geklappt, doch die anderen beiden Proceduren gehen nicht. Anscheinend kann ich in diesen Proceduren meine ListBox nicht benutzen.
Hoffentlich könnt Ihr mir helfen.

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);
end;

type
  TBusEintrag = record
    Linie: string;
    Ziel: string;
    Ankunft: Integer;
    Abfahrt: string;
    Verspätung: Integer;
end;

var
  Form1: TForm1;
  Liste: array of TBusEintrag;
  c,e,f,l,n,x: integer;
  a,b,d,y:string;


implementation

{$R *.dfm}

procedure TDelete;
var
i:integer;
begin
 //x bekommt den Wert der makierten Stelle
 for i := 0 to listbox1.Count - 1 do
  if listbox1.Selected[i] then
   begin
    x:=i;
   end;

//Einträge in Array werden verschoben
while x<high(Liste) do
 begin
  Liste[x]:=Liste[x+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 TOutput;
   const
      MAX_TABS = 5;
      Tab = #9;
   var
      Tabulators: array[0..MAX_TABS] of Integer;

begin
//neuen Eintrag in Array eintragen
Liste[x].Linie:=a;
Liste[x].Ziel:=b;
Liste[x].Ankunft:=c;
Liste[x].Abfahrt:=d;
Liste[x].Verspätung:=e;
//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
f:=0;
 while ((f < length(Liste)) and (f<10)) do
  begin
   ListBox1.Items.Strings[f]:=' '+Liste[f].Linie
   + Tab +Liste[f].Ziel
   +Tab+Liste[f].Abfahrt+' Uhr'
   +Tab+IntToStr(Liste[f].Verspätung)+Tab+'Minuten';
   f:=f+1;
  end;
end;

procedure TSort;

begin
  if length(Liste)=0 then
 begin
  SetLength(Liste,1);
 end

 //suche Position für neuen Eintrag
 else
  begin
   while (c>Liste[x].Ankunft) and (x < length(Liste)) do
    begin
     x:=(x+1);
    end;

   //Array um 1 erweitern
   SetLength(Liste,length(Liste)+1);
   n:=(high(Liste));

  //Einträge verschieben
   while (n>x) do
    begin
     Liste[n]:=Liste[(n-1)];
     n:=(n-1);
    end;
  end;
end;

procedure TForm1.alleLinienClick(Sender: TObject);

const
  // Die Anzahl der maximal aufretenen Tabs eintragen
  MAX_TABS = 5;
  Tab = #9;

var
  Tabulators: array[0..MAX_TABS] of 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 in ListBox eintragen
f:=0;
 while (f < length(Liste)) do
  begin
   ListBox1.Items.Strings[f]:=' '+Liste[f].Linie
   + Tab +Liste[f].Ziel
   +Tab+Liste[f].Abfahrt+' Uhr'
   +Tab+IntToStr(Liste[f].Verspätung)+Tab+'Minuten';
   f:=f+1;
  end;
 end;

procedure TForm1.bearbeitenClick(Sender: TObject);
var
i:integer;

begin
 //x bekommt den Wert der makierten Stelle
 for i := 0 to listbox1.Count - 1 do
  if listbox1.Selected[i] then
   begin
    x:=i;
   end;

//Makierte Linie wird in Editfelder eingetragen
Linie.Text:= Liste[x].Linie;
Ziel.Text:= Liste[x].Ziel;
Ankunft.Text:= IntToStr(Liste[x].Ankunft);
Abfahrt.Text:= Liste[x].Abfahrt;
Verspätung.Text:= IntToStr(Liste[x].Verspätung);

TDelete;
end;

procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.löschenClick(Sender: TObject);
begin
  TDelete;
end;

procedure TForm1.zehnAnzeigenClick(Sender: TObject);
const
  // Die Anzahl der maximal aufretenen Tabs eintragen
  MAX_TABS = 5;
  Tab = #9;
var
  Tabulators: array[0..MAX_TABS] of 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
f:=0;
 while ((f < length(Liste)) and (f<10)) do
  begin
   ListBox1.Items.Strings[f]:=' '+Liste[f].Linie
   + Tab +Liste[f].Ziel
   +Tab+Liste[f].Abfahrt+' Uhr'
   +Tab+IntToStr(Liste[f].Verspätung)+Tab+'Minuten';
   f:=f+1;
  end;
end;

procedure TForm1.HinzufügenClick(Sender: TObject);
const
  // Die Anzahl der maximal aufretenen Tabs eintragen
  MAX_TABS = 5;
  Tab = #9;
var
  Tabulators: array[0..MAX_TABS] of Integer;

begin
try
//Eingetragene Werte Variablen zuordnen
x:=0;
a:= Linie.Text;
b:= Ziel.Text;
c:= StrToInt(Ankunft.Text);
d:= Abfahrt.Text;
e:= StrToInt(Verspätung.Text);
TSort;
TOutput;

Linie.Clear;
Ziel.Clear;
Ankunft.Clear;
Abfahrt.Clear;
Verspätung.Clear;

except
showmessage('Bitte alle Felder ausfüllen und Ankunft+Verspätung in Minuten angeben');
end;
end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.264 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Proceduren erstellen

  Alt 23. Aug 2011, 09:48
Du hast 2 Möglichkeiten:
- Du verwendest weiterhin "reguläre" Prozeduren und musst dann über die globale Formular-Variable auf die Komponenten zugreifen (Form1.ListBox1)
- Du machst Methoden daraus. Methoden gehören zu einem Objekt, so dass Du sie ein wenig anders deklarieren musst.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
    procedure DoDelete;
  ...
  end;

implementation

procedure TForm1.DoDelete; //hier muss das TForm1 davor
begin
  ListBox1.DeleteSelected;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Proceduren erstellen

  Alt 23. Aug 2011, 09:51
noch einfacher
Delphi-Quellcode:
procedure DoDelete(Ziel:TListbox); //hier muss nichts davor
begin
  Ziel.DeleteSelected;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Proceduren erstellen

  Alt 23. Aug 2011, 09:57
noch einfacher
Delphi-Quellcode:
procedure DoDelete(Ziel:TListbox); //hier muss nichts davor
begin
  Ziel.DeleteSelected;
end;
Ich habe es jetzt so versucht.
Aber was muss ich denn dann aufrufen um diese Procedure in einer anderen zu benutzen?
Ich bekomme immer den Fehler
Zitat:
Nicht genügend wirkliche Parameter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.264 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Proceduren erstellen

  Alt 23. Aug 2011, 09:57
Und welchen Sinn soll das an dieser Stelle machen? Da versucht man, einen kleinen Schubs in Richtung OOP zu geben...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Proceduren erstellen

  Alt 23. Aug 2011, 10:01
Aber was muss ich denn dann aufrufen um diese Procedure in einer anderen zu benutzen?
Du musst die Prozedur mit der Listbox als Parameter aufrufen, also
DoDelete(ListBox1);

Aber mach es lieber so, wie es DeddyH vorgeschlagen hat
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Proceduren erstellen

  Alt 23. Aug 2011, 10:05
Nun hab ich es so wie Daddy versucht. Aber nun bekomme ich die Fehlermeldung:

"Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.264 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Proceduren erstellen

  Alt 23. Aug 2011, 10:07
Wie rufst Du die Methode denn auf?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Proceduren erstellen

  Alt 23. Aug 2011, 10:08
Nimm die Version von DeddyH, das ist die einzig sinnvolle.

Und eventuell wäre es sinnvoll, sich ein Grundlagentutorial mal anzugucken.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Proceduren erstellen

  Alt 23. Aug 2011, 10:09
Wie rufst Du die Methode denn auf?
TForm1.DoDelete;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf