![]() |
Fehlerhafte Ausgabe bei Stringlist+Verketteter liste
Hallo!
Ich habe ein Problem: Ich möchte eine einfache verkettete Liste eingeben,sortieren und ausgeben. Zum eingeben hab ich das hier:
Delphi-Quellcode:
wobei PListe und TData so definiert sind:
procedure TReminderData.Add(Data:TData);
var hilfe:PListe; begin New(hilfe); hilfe^.Data.Info:=Data.Info; hilfe^.Data.Termin:=data.Termin; hilfe^.Next:=FListe; FListe:=hilfe; Dispose(hilfe); SortData; end;
Delphi-Quellcode:
Sortieren tu ich so:
Type
TData=record Info:string[10]; Termin:TDateTime; end; PListe=^TListe; TListe=record Data:TData; Next:PListe; end;
Delphi-Quellcode:
und ausgeben so:
procedure TReminderData.SortData;
var sorted,hilfe1,hilfe2:PListe; ende:array of TData; fertig:boolean; i:integer; begin // array füllen: hilfe2:=FListe; i:=1; fertig:=false; while not fertig do begin SetLength(ende,i+1); ende[i-1].Info:=hilfe2^.Data.Info; ende[i-1].Termin:=hilfe2^.Data.Termin; inc(i); hilfe2:=hilfe2^.Next; fertig:=not (hilfe2<>nil); end; //erstes Element: sorted:=nil; New(hilfe1); hilfe1^.Data.Info:=ende[0].Info; hilfe1^.Data.Termin:=ende[0].Termin; hilfe1^.Next:=sorted; sorted:=hilfe1; for i:=1 to High(ende) do begin new(hilfe1); hilfe1^.Data.Info:=ende[i].Info; hilfe1^.Data.Termin:=ende[i].Termin; if sorted^.Data.Termin > hilfe1^.Data.Termin then begin hilfe1^.Next:=sorted; sorted:=hilfe1; end else begin hilfe2:=sorted; fertig:=false; while (hilfe2^.Next <>nil) and (not fertig) do if hilfe2^.Next^.Data.Termin > hilfe1^.Data.Termin then begin hilfe1^.Next:=hilfe2^.Next; hilfe2^.Next:=hilfe1; fertig:=true; end else hilfe2:=hilfe2^.Next; if not fertig then begin hilfe1^.Next:=hilfe2^.Next; hilfe2^.Next:=hilfe1; end; end; end; end;
Delphi-Quellcode:
aufrufen tu ich das ganze so:
function TReminderData.GetDates: TStringlist;
var hilfe1:PListe; begin result:=TStringList.Create; hilfe1:=FListe; while hilfe1<>nil do begin result.Add(hilfe1^.Data.Info+'--'+DateAsString(hilfe1^.Data.Termin,'.')); hilfe1:=hilfe1^.Next; end; end;
Delphi-Quellcode:
Jetzt kommt das eigentliche Problem:
procedure TForm1.FormShow(Sender: TObject);
var x:TReminderData; bla:TData; sl:TStringList; i,ii:integer; begin x:=TReminderData.Create; bla.Termin:=now; bla.Info:='Hallo'; x.Add(bla); x.Add(bla); sl:=x.GetDates; ii:=5; Image1.Canvas.Font.Color:=clyellow; for i:=0 to sl.Count-1 do begin Image1.Canvas.TextOut(5,ii,sl.Strings[i]); ii:=ii+10; end; x.Free; end; Es wird nur das hier ausgegeben: Zitat:
Zitat:
Zitat:
Warum ist nur eine Zeile in der Stringlist? Ich hoffe ihr könnt mir helfen. gruß Teekeks ps.: ich benutze Lazarus |
Re: Fehlerhafte Ausgabe bei Stringlist+Verketteter liste
Guten Morgen,
siehe meine Kommentare
Delphi-Quellcode:
procedure TReminderData.Add(Data:TData);
var hilfe:PListe; begin New(hilfe); hilfe^.Data.Info:=Data.Info; hilfe^.Data.Termin:=data.Termin; hilfe^.Next:=FListe; FListe:=hilfe; Dispose(hilfe); // Hier wirfst Du das angehänge Element wieder weg. // Auch FListe wird hier elemeniert. SortData; end; Grüße Klaus |
Re: Fehlerhafte Ausgabe bei Stringlist+Verketteter liste
Danke!
Jetzt haut das mit dem String hin. Das andere konnte ich so lösen:
Delphi-Quellcode:
function TReminderData.GetDates: TStringlist;
var hilfe1:PListe; begin result:=TStringList.Create; hilfe1:=FListe; while hilfe1^.Next<>nil do begin result.Add(hilfe1^.Data.Info+'--'+DateAsString(hilfe1^.Data.Termin,'.')); hilfe1:=hilfe1^.Next; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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