Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamische listen--> HILFE ! ! ! (https://www.delphipraxis.net/22733-dynamische-listen-hilfe.html)

brutus 22. Mai 2004 15:49


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:
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.
hier ist die database

Delphi-Quellcode:
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.
und das is die UTData:

Delphi-Quellcode:
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.
BITTE HELFT MIR SONST LAUF ICH NOCH AMOK ! ! ! :wall: :wall: :wall: :wall: :wall: :wall:

StefanDP 22. Mai 2004 15:55

Re: dynamische listen--> HILFE ! ! !
 
Kannst du noch sagen, wo der Fehler / das Problem liegt?

brutus 22. Mai 2004 15:57

Re: dynamische listen--> HILFE ! ! !
 
naja das programm gibt nichts aus und stürzt ab und zu ab.

alcaeus 22. Mai 2004 15:57

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]

StefanDP 22. Mai 2004 15:58

Re: dynamische listen--> HILFE ! ! !
 
was bringt eigentlich:

Delphi-Quellcode:
d := TDAavdBL.create;
d.Create;
für was ist die 2te zeile gut?

alcaeus 22. Mai 2004 15:59

Re: dynamische listen--> HILFE ! ! !
 
Schau mal in die Deklaration der Klasse, dort setzt er in Create zwei Pointer auf nil.

brutus 22. Mai 2004 15:59

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

alcaeus 22. Mai 2004 16:08

Re: dynamische listen--> HILFE ! ! !
 
Zitat:

Zitat von brutus
p.s. die abstürze sind eingeplant :-D

Welche Abstürze?

Außerdem:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
d.Destroy;
d.free;
end;
Du musst dich entscheiden: Destroy oder Free. Du kannst nämlich nur eines aufrufen, das andere wird danach einen Zugriffsfehler bringen.
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:
type
  dynListe = array of Typ;
Die Länge setzt du mit SetLength(Array, Länge), der Index beginnt bei 0.

xineohp 22. Mai 2004 16:09

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.

brutus 22. Mai 2004 16:11

Re: dynamische listen--> HILFE ! ! !
 
na ich wollte mit hilfe von listen ein dynamisches array simulieren!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.
Seite 1 von 2  1 2      

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