![]() |
dynamische listen--> HILFE ! ! !
ich hab es ewig lange versucht aber ich krieg es einfach nicht hin. Vielleicht haut die Ausgabe nicht hin oder die database - aber ich hab absolut keinen Plan!!!
die prozedur soll einfach aus einen Edit Fenster einen Wert herauslesen und am Ende einer dynamischen Liste einfügen. Hier is das Hauptformular
Delphi-Quellcode:
hier ist die database
unit UTMaster;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, UTData, UTDAavdBL, StdCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; add: TEdit; wo: TEdit; was: TEdit; Button6: TButton; at: TEdit; delete: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private d:TDAavdBL; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin d:=TDAavdBL.create; d.Create; StringGrid1.ColCount:=d.length; end; procedure TForm1.FormDestroy(Sender: TObject); begin d.Destroy; d.free; end; // hier kommen noch mehr prozeduren procedure TForm1.Button3Click(Sender: TObject); VAR i:integer; begin d.add(add.text); FOR i:=1 TO d.length DO StringGrid1.Cells[i,0]:=d.at(i); end; end.
Delphi-Quellcode:
und das is die UTData:
unit UTDAavdBL;
interface uses UTData; Type TDAavdBL = class (TObject) protected first:PList; //erstes Element current:Plist; //aktuelles Element public constructor Create; procedure DelAll; function Empty:boolean; function length:integer; function EndOfList:boolean; procedure add(u:TData); function at(n:integer):TData; destructor Destroy; override; end; implementation { TDAavdBL } constructor TDAavdBL.Create; begin inherited; first:=NIL; current:=NIL; end; function TDAavdBL.Empty; begin IF first=NIL THEN result:=true ELSE result:=false; end; function TDAavdBL.EndOfList; BEGIN IF (empty) OR (Current^.next=NIL) THEN result:=true ELSE result:=false; END; function TDAavdBL.length; BEGIN result:=0; IF NOT Empty THEN BEGIN current:=first; result:=1; WHILE current^.next<>NIL DO BEGIN result:=result+1; current:=current^.next; END; END; END; function TDAavdBL.at; VAR i:integer; BEGIN IF (n<=length) AND (n>0) AND (NOT empty) THEN BEGIN current:=first; FOR i:=0 TO n-1 DO BEGIN result:=current.inhalt; current:=current^.next; END; END ELSE result:=''; END; destructor TDAavdBL.Destroy; BEGIN delall; inherited; END; procedure TDAavdBL.add; VAR m:Plist; BEGIN IF empty THEN BEGIN new(m); m^.next:=NIL; m^.inhalt:=u; first:=m; END ELSE BEGIN new(m); m^.next:=NIL; m^.inhalt:=u; current:=first; WHILE NOT EndOfList DO current:=current^.next; current^.next:=m; END; END; end.
Delphi-Quellcode:
BITTE HELFT MIR SONST LAUF ICH NOCH AMOK ! ! ! :wall: :wall: :wall: :wall: :wall: :wall:
unit UTData;
interface Type TData=string; PList=^TKnoten; TKnoten=record inhalt:TData; next:PList; end; VAR dummy:TKnoten; implementation initialization dummy.next:=NIL; dummy.inhalt:=''; end. |
Re: dynamische listen--> HILFE ! ! !
Kannst du noch sagen, wo der Fehler / das Problem liegt?
|
Re: dynamische listen--> HILFE ! ! !
naja das programm gibt nichts aus und stürzt ab und zu ab.
|
Re: dynamische listen--> HILFE ! ! !
Erstens, verwende [ delphi]-Tags und nicht [ code]. Dadurch wird es wie in Delphi formatiert.
Zweitens, hänge bei so viel Code die Units als Anhang an, anstatt den Post seeeehr lang zu machen. Drittens, hast du mal versucht das Projekt zu debuggen? [edit]Da war jemand wieder schneller[/edit] |
Re: dynamische listen--> HILFE ! ! !
was bringt eigentlich:
Delphi-Quellcode:
für was ist die 2te zeile gut?
d := TDAavdBL.create;
d.Create; |
Re: dynamische listen--> HILFE ! ! !
Schau mal in die Deklaration der Klasse, dort setzt er in Create zwei Pointer auf nil.
|
Re: dynamische listen--> HILFE ! ! !
Liste der Anhänge anzeigen (Anzahl: 1)
o.k. hier is der Anhang
p.s. die abstürze sind eingeplant :-D |
Re: dynamische listen--> HILFE ! ! !
Zitat:
Außerdem:
Delphi-Quellcode:
Du musst dich entscheiden: Destroy oder Free. Du kannst nämlich nur eines aufrufen, das andere wird danach einen Zugriffsfehler bringen.
procedure TForm1.FormDestroy(Sender: TObject);
begin d.Destroy; d.free; end; Ich hab im Moment keine Zeit die Add-Routine genau durchzudenken, das mach ich später. Aber nur um das Prog richtig zu verstehen, wenn du auf den ersten Button (add) klickst, dann soll er eine Zahl in die dynamische Liste laden? Und übrigens, warum verwendest du nicht eine dynamische Liste vom Typ
Delphi-Quellcode:
Die Länge setzt du mit SetLength(Array, Länge), der Index beginnt bei 0.
type
dynListe = array of Typ; |
Re: dynamische listen--> HILFE ! ! !
moin,
Seh ich das richtig, dass das eine einfachverknüpfte lineare Liste werden soll? Wie StefanDP schon erwähnt hat ist das d.create IMHO überflüssig/unsinnig/falsch da der constructor create eine Klassenmethode ist und somit nur auf die Klasse angewendet wird, sprich d := TDAavdBL.create reicht vollkommen. |
Re: dynamische listen--> HILFE ! ! !
na ich wollte mit hilfe von listen ein dynamisches array simulieren!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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 by Thomas Breitkreuz