![]() |
ListView 2 mal Sortieren nicht möglich?
Hallo,
Ich versuche nun seit 3 Stunden verzweifelt ein ListView Feld mit Hilfe der Code-Library zu Sortieren: Folgender Link: ![]() Nun möchte ich jedoch Feld 0 & 1 Sortieren und später dann vielleicht noch nach dem Daten Herkunfts Pfad : also dachte ich, ich mache es einfach so:
Delphi-Quellcode:
doch leider Sortiert er jedesmal nur Spalte 0 warum & wie kann ich mein Problem Lösen?
ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll
ListView4.AlphaSort; ColumnToSort := 1; ListView4.AlphaSort; ColumnToSort := 3; ListView4.AlphaSort; Grüße Flom! |
Re: ListView 2 mal Sportieren nicht möglich?
Hallo
du kannst das oncompare ereignis ändern und dort nach der 2. zusätzlichen Spalte sortieren, wenn mehr Spalten sind, kommst du mit einem Columtosortarray und einer kleinen Schllife sicher besser. hier Denksanstoß für 2 Sortierspalten, brauchst dazu eine 2. Columtosortvariable:
Delphi-Quellcode:
Mfg Frank
procedure TForm1.ListViewsCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer); var i:integer; begin if ColumnToSort = 0 then Compare := CompareText(Item1.Caption, Item2.Caption) else begin i := ColumnToSort -1; Compare := CompareText(Item1.SubItems[i], Item2.SubItems[i]); end; if compare=0 then //wenn Einträge gleich sind, dann nach einer 2. Spalte sortieren begin if ColumnToSort2 = 0 then Compare := CompareText(Item1.Caption, Item2.Caption) else begin i := ColumnToSort2 -1; Compare := CompareText(Item1.SubItems[i], Item2.SubItems[i]); end; end; |
Re: ListView 2 mal Sportieren nicht möglich?
irgendwie raff ichs nicht... das bringt mich 0 weiter irgendwie...
|
Re: ListView 2 mal Sortieren nicht möglich?
na mit deinem Code
Delphi-Quellcode:
Sortierst du das listview erst nach Spalte 0, dann 1 und dann Spalte 3. Aber so sortierst du das listview immer komplett nach diesen Spalten und nicht erst nach Spalte0, bei gleichen Einträgen dann nach Spalte 1 und 3. Das kann nur im oncompare passieren, du sortierst erst nach der Columtosortspalte, wenn beide Items gleich sind, ist oncompare 0 und dann vergleichst du nach einer 2. Sortierspalte.
ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll
ListView4.AlphaSort; ColumnToSort := 1; ListView4.AlphaSort; ColumnToSort := 3; ListView4.AlphaSort; ansonsten poste mal bitte deinen relevanten code. Mfg Frank |
Re: ListView 2 mal Sortieren nicht möglich?
@Keldorn
Nur funktioniert es nicht! er sortiert trotz alle dem nur die erste Spalte! |
Re: ListView 2 mal Sortieren nicht möglich?
ok, dann zeig mal deinen code.
wenn du schreibst, daß er immer nach der 0. Spalte sortiert: das oncompare-ereignsi hast du auch deiner Listview zugewiesen? |
Re: ListView 2 mal Sortieren nicht möglich?
Delphi-Quellcode:
...
procedure TForm1.ListViewsColumnClick(Sender: TObject; Column: TListColumn);
begin ColumnToSort := Column.Index; (Sender as TCustomListView).AlphaSort; end; procedure TForm1.ListViewsCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var i:integer; begin if ColumnToSort = 0 then Compare := CompareText(Item1.Caption, Item2.Caption) else begin i := ColumnToSort -1; Compare := CompareText(Item1.SubItems[i], Item2.SubItems[i]); end; if compare=0 then //wenn Einträge gleich sind, dann nach einer 2. Spalte sortieren begin if ColumnToSort2 = 0 then Compare := CompareText(Item1.Caption, Item2.Caption) else begin i := ColumnToSort2 -1; Compare := CompareText(Item1.SubItems[i], Item2.SubItems[i]); end; end; end;
Delphi-Quellcode:
der Aufruf:
procedure TForm1.CreateFileList(Dir, Ext: String; UseSubDirs: Boolean);
var SR: TSearchRec; Item: TListItem; begin If FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then Repeat If (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') and (UseSubDirs) then CreateFileList(IncludeTrailingPathDelimiter(Dir + SR.Name), Ext, UseSubDirs) Else If LowerCase(ExtractFileExt(SR.Name)) = LowerCase(Ext) then begin Application.ProcessMessages; /////////////////////////////////////////////// /////////////////////////////////////////////// Item := ListView4.Items.Add; Lese_ID3Tag(Dir + SR.Name); Item.Caption := ID3Tag.Artist; Item.SubItems.Add(ID3Tag.Titel); Item.SubItems.Add(SR.Name); Item.SubItems.Add(Dir); end; Label2.Caption:='Aktion: Suche Dateien'; Until FindNext(SR) <> 0; FindClose(SR); Label2.Caption:='Aktion: Fertig'; end;
Delphi-Quellcode:
procedure TForm1.SucheClick(Sender: TObject);
begin ListView4.Clear; if CheckBox_MP3.Checked = True then CreateFileList(quelle + '\', '.mp3', CheckBox1.Checked); if CheckBox_WMA.Checked = True then CreateFileList(quelle + '\', '.wma', CheckBox1.Checked); Label1.Caption:='Insgesamt: '+IntToStr(ListView4.Items.Count); ////////////////////////////////////////////////////////////// ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll ListView4.AlphaSort; end; |
Re: ListView 2 mal Sortieren nicht möglich?
Hast du wirklich die beiden ereignisse deinem Listview zugewiesen? Weil die heißen bei dir TForm1.ListViews... und nicht Listview4-Column, nicht das du die bloß in deinen Quelltext kopiert hast.
|
Re: ListView 2 mal Sortieren nicht möglich?
Zitat:
*oh man ist echt nich mein tach* |
Re: ListView 2 mal Sortieren nicht möglich?
na normaler weise klickt man im OI die beiden ereignisse doppelt und Delphi erstellt die beiden leeren Proceduren und du kopierst den eigentlichen code rein. Das kannst du nicht gemacht haben, sonst stünde da Tform1.Listview4.
Wenn du die beiden Ereignisse 1:1 in deinen quelltext kopiert hast, mußt Du sie noch dem Listview zuweisen (im Objektinspektor bei oncompare und on columclick die beiden procs auswählen. Wenn du sie nicht auswählen kannst, mußt du sie noch unter Tform ergänzen
Delphi-Quellcode:
TForm1 = class(TForm)
ListView4: TListView; procedure ListViewsColumnClick(Sender: TObject; Column: TListColumn); procedure ListViewsCompare(Sender: TObject; Item1, Item2: TListItem;Data: Integer; var Compare: Integer); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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-2025 by Thomas Breitkreuz