Einzelnen Beitrag anzeigen

aphexx

Registriert seit: 23. Apr 2010
19 Beiträge
 
#2

AW: Memo lässt Zeilen verschwinden

  Alt 29. Mär 2011, 22:37
Hat wahrsch. nix mit dem Problem zu tun aber du machst vor der For-Schleife L.BeginUpdate, in der For-Schleife bei jedem Durchlauf L.BeginUpdate aber nur einmal nach der Schleife L.EndUpdate.
Ist das in der Schleife nicht überflüssig?

Zum Problem, kannst du dir nicht in einer weiteren For-Schleife mal den Inhalt von L ausgeben lassen?
Wenn da schon was fehlt liegts nicht am Memo sondern am füllen von L.

Ich würde mir vllt. einfach mal an versch. Stellen im Code den Stand der Dinge anzeigen lassen. Hat mit öfters schon geholfen, wenn ich einen gut versteckten logischen Fehler eingebaut hatte (soll jetzt nicht heißen, dass du einen solchen drin hast, kann gut auch was anderes sein).

P.S.: Hast du mal größere Beispiele durchgespielt? Ist wirklich immer nur der Vorletzte problematisch?
Danke, das mit dem BeginUpdate für L habe ich korrigiert.

Dein Hinweis mit der Anzeige von L und der Überprüfung im Allgemeinen war sehr gut, denn das Ergebnis ist, tadaa, dass das Array falsch sortiert wurde.
L ist nicht schuld, das Memo auch nicht

Soweit so schlecht, denn dieser Sortieralgo ist doch eigentlich richtig, oder?
Ich versteh' dann trotzdem nicht, warum er ausgerechnet eine Stinglist aus dem Array haut.
Vor dem Sortieren war der vorletzte Array-Eintrag (inkl. StringList) vorhanden, danach nicht mehr.

EDIT: PS: bei größeren txt-Sammlungen ist es das selbe Ergebnis :/

Delphi-Quellcode:
procedure Sortieren(Aufsteigend: Boolean);
var
  E: TEntry;
  i, j, max: Integer;
  x, y: TDateTime;
begin
  E.Msg := TStringlist.Create;
  max := Length(Entries);
  for i:=0 to max-1 do
  for j:=0 to max-1 do
  begin
     DateSeparator := '.';
     ShortDateFormat := 'dd.mm.yyyy';
     LongTimeFormat := 'hh:nn:ss.zzz';

     if Aufsteigend = True
     then
     begin
       x := StrToDateTime(Entries[i].DatumZeit);
       y := StrToDateTime(Entries[j].DatumZeit);
     end
     else
     begin
       x := StrToDateTime(Entries[j].DatumZeit);
       y := StrToDateTime(Entries[i].DatumZeit);
     end;

     if x > y then
      begin
       E := Entries[i];
       Entries[i] := Entries[j];
       Entries[j] := E;
     end;
  end;
  E.Msg.Clear;
end;
  Mit Zitat antworten Zitat