![]() |
Proceduren erstellen
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. |
AW: Proceduren erstellen
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; |
AW: Proceduren erstellen
noch einfacher
Delphi-Quellcode:
procedure DoDelete(Ziel:TListbox); //hier muss nichts davor
begin Ziel.DeleteSelected; end; |
AW: Proceduren erstellen
Zitat:
Aber was muss ich denn dann aufrufen um diese Procedure in einer anderen zu benutzen? Ich bekomme immer den Fehler Zitat:
|
AW: Proceduren erstellen
Und welchen Sinn soll das an dieser Stelle machen? Da versucht man, einen kleinen Schubs in Richtung OOP zu geben... :roll:
|
AW: Proceduren erstellen
Zitat:
Delphi-Quellcode:
DoDelete(ListBox1);
Aber mach es lieber so, wie es DeddyH vorgeschlagen hat ;) |
AW: Proceduren erstellen
Nun hab ich es so wie Daddy versucht. Aber nun bekomme ich die Fehlermeldung:
"Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt" |
AW: Proceduren erstellen
Wie rufst Du die Methode denn auf?
|
AW: Proceduren erstellen
Nimm die Version von DeddyH, das ist die einzig sinnvolle.
Und eventuell wäre es sinnvoll, sich ein Grundlagentutorial mal anzugucken. |
AW: Proceduren erstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz