![]() |
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); |
Re: ListView 2 mal Sortieren nicht möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
okay! hab ich Depp natürlich nicht gemacht trotzdem passiert das selbe wie vorher ich poste mal ein bild mit als Bsp. was er eben nicht tut.
hab es außerdem zusätzlich jetzt in ListView1 umbenannt... grrr |
Re: ListView 2 mal Sortieren nicht möglich?
ok, richtig was erkenne tue ich in dem bild aber auch nicht (welche Spalte hast du angeklickt)?
in deinem code oben steht aber auch nirgends, daß du columntosort2, also die zweite Sortierspalte irgendwo setzt. |
Re: ListView 2 mal Sortieren nicht möglich?
wieso geklickt?
Er sortiert Automatisch nach dem Finden |
Re: ListView 2 mal Sortieren nicht möglich?
klar. und dort steht nur columnstosort:=0 also sortiert er nur nach der ersten. columnstosort2 setzt du nirgends.
|
Re: ListView 2 mal Sortieren nicht möglich?
Zitat:
Delphi-Quellcode:
ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll
ListView1.AlphaSort; ColumnToSort2 := 1; ListView1.AlphaSort; |
Re: ListView 2 mal Sortieren nicht möglich?
und dennoch?
außerdem hast Du es immer noch nicht verstanden
Delphi-Quellcode:
ansonsten häng dein ges. projekt als anhang dran.
ColumnToSort := 0;
ColumnToSort2 := 1; ListView1.AlphaSort; |
Re: ListView 2 mal Sortieren nicht möglich?
s. Anhang
ich muss was dämlich sein!!! |
Re: ListView 2 mal Sortieren nicht möglich?
aber das programm machts doch oder was ist nicht so, wie du es haben willst?
|
Re: ListView 2 mal Sortieren nicht möglich?
Er zeigt mir folgendes an
Künstler - Titel A - B A - A A - F A - C Statt A - A A - B A - C A - F verstehst du mich jetzt ? |
Re: ListView 2 mal Sortieren nicht möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
klar, aber das macht es doch?
|
Re: ListView 2 mal Sortieren nicht möglich?
ja habs auch gerade mit bekommen nur frag ich mich was bei meinen "Heinz Erhardt" Titel anders ist ?!?
Ich hab nämlich nur den Ordner getestet... komisch.... Ich danke dir für die absolut stressigen Tag - Abend Thema hat sich erledigt... ^^ Aber eine frage noch fix: Kann ich die einzelnen Felder irgendwie in die hand nehmen zum Bearbeiten beispielsweise Speichern in einer Txt datei ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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