![]() |
AW: ListBox mit verknüpften StringLists sortieren
Dann ist das ein z.b. ein array of Record oder Tlist oder objectlist, keine stringlist. ich poste dir gleich mal ein beispiel, muss suchen...
|
AW: ListBox mit verknüpften StringLists sortieren
Zu Übungszwecken können wir ja mal ein array nehmen. Du kannst das weiter anpassen, ich hab die Variablen des Records jetzt einfach mal X usw. genannt. Die sortierten Einträge dann einfach in die Listbox eintragen. Wenn du nach anderen Werten sortieren willst, einfach eine weietre Sort Methode hinzufügen.
Delphi-Quellcode:
unit uArrayBeispielUnit;
interface type TItem = record X, X1, X11, X12, X2, X21, X22: string; end; TItemList = class(TObject) private FItems: array of TItem; FCount: integer; procedure SetCount(NewCount: integer); function GetItem(Index: integer): TItem; procedure SetItem(Index: integer; const Item: TItem); public procedure AddItem(const Item: TItem); procedure DelItem(Index: integer); procedure InsItem(Index: integer; const Item: TItem); procedure Clear; function IndexOf(Value: string): integer; procedure Exchange(Index1, Index2: integer); procedure Sort; property Items[Index: integer]: TItem Read GetItem Write SetItem; default; property Count: integer Read FCount; constructor Create; destructor Destroy; override; end; implementation constructor TItemList.Create; begin inherited Create; FCount:= 0; end; destructor TItemList.Destroy; begin Clear; inherited Destroy; end; procedure TItemList.SetCount(NewCount: integer); begin FCount:= NewCount; SetLength(FItems, FCount); end; procedure TItemList.Clear; begin while FCount > 0 do DelItem(FCount-1); end; function TItemList.GetItem(Index: integer): TItem; begin Result:= FItems[Index]; end; procedure TItemList.SetItem(Index: integer; const Item: TItem); begin Items[Index]:= Item; end; procedure TItemList.AddItem (const Item: TItem); begin SetCount(FCount+1); FItems[FCount-1]:= Item; end; procedure TItemList.InsItem(Index: integer; const Item: TItem); var I: integer; begin SetCount(FCount+1); for I:= FCount-1 downto Index+1 do FItems[I]:= FItems[I-1]; SetItem(Index, Item); end; procedure TItemList.DelItem(Index: integer); var I: integer; begin for I:= Index to FCount-2 do FItems[I]:= FItems[I+1]; SetCount(FCount-1); end; function TItemList.IndexOf(Value: string): integer; var I: integer; begin Result:= -1; for I:= 0 to FCount-1 do if FItems[I].X = Value then begin Result:= I; Break; end; end; procedure TItemList.Exchange(Index1, Index2: integer); var T: TItem; begin T:= FItems[Index1]; FItems[Index1]:= FItems[Index2]; FItems[Index2]:= T; end; procedure TItemList.Sort; var I, J: integer; begin for I:= 0 to FCount-2 do for J:= I+1 to FCount-1 do if FItems[I].X > FItems[J].X then Exchange(I, J); end; end.
Delphi-Quellcode:
unit BeiepielUnit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uArrayBeispielUnit; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private FItemList: TItemList; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FItemList:= TItemList.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FItemList.Free; end; procedure TForm1.Button1Click(Sender: TObject); var Item: TItem; I: integer; begin FItemList.Clear; for I:= 1 to 3 do begin Item.X:= 'X.'+IntToStr(3-I); Item.X1:= 'X1.'+IntToStr(3-I); Item.X2:= 'X2.'+IntToStr(3-I); Item.X11:= 'X11.'+IntToStr(3-I); Item.X12:= 'X12.'+IntToStr(3-I); Item.X21:= 'X21.'+IntToStr(3-I); Item.X22:= 'X22.'+IntToStr(3-I); FItemList.AddItem(Item); end; for I:= 0 to FItemList.Count-1 do ShowMessage(FItemList[I].X); FItemList.Sort; for I:= 0 to FItemList.Count-1 do ShowMessage(FItemList[I].X); end; end. |
AW: ListBox mit verknüpften StringLists sortieren
***deleted***
|
AW: ListBox mit verknüpften StringLists sortieren
@Bjoerk: Das stimmt so nicht ganz.
Du hast die Ebene 1 X genannt (daraus: Ebene 2 = y, Ebene 3 = z) In deinem Code ist die Anzahl von Y (x.1, x.2) fix definiert; nämlich genau auf zwei. Das muss aber auch variabel sein, Ebenso wie das der Ebene 3 (Z). Also bräuchte ich Funktionen für: - Einfügen auf Ebene 1 - Einfügen auf Ebene 2 - Einfügen auf Ebene 3 - Löschen auf Ebene 1 - Löschen auf Ebene 2 - Löschen auf Ebene 3 - Ändern auf Ebene 1 - Ändern auf Ebene 2 - Ändern auf Ebene 3 Sortiert wird NUR die Ebene 1, nicht aber die Ebenen 2 & 3. Sobald ich etwas ändere, soll das ganze neu sortiert werden - also die GANZE Ebene 1. |
AW: ListBox mit verknüpften StringLists sortieren
Sorry, aber dann ist die Aufgabenstellung immer noch nicht klar bzw. hat sich geändert bzw. entspricht nicht deiner Aussage in #10. :roll:
|
AW: ListBox mit verknüpften StringLists sortieren
Stimmt, ich habe es mit der Hyperstruktur etwas falsch verstanden.
Sorry. :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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