AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView 2 mal Sortieren nicht möglich?

Ein Thema von Flom · begonnen am 10. Feb 2007 · letzter Beitrag vom 10. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#1

ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 13:59
Hallo,
Ich versuche nun seit 3 Stunden verzweifelt ein ListView Feld mit Hilfe der Code-Library zu Sortieren: Folgender Link:
http://www.delphipraxis.net/internal...light=listview

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:
ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll
ListView4.AlphaSort;
ColumnToSort := 1;
ListView4.AlphaSort;
ColumnToSort := 3;
ListView4.AlphaSort;
doch leider Sortiert er jedesmal nur Spalte 0 warum & wie kann ich mein Problem Lösen?

Grüße Flom!
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: ListView 2 mal Sportieren nicht möglich?

  Alt 10. Feb 2007, 14:35
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:
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;
Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#3

Re: ListView 2 mal Sportieren nicht möglich?

  Alt 10. Feb 2007, 15:49
irgendwie raff ichs nicht... das bringt mich 0 weiter irgendwie...
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 16:52
na mit deinem Code
Delphi-Quellcode:
ColumnToSort := 0; //hier also der Index der Spalte, nach der Sortiert werden soll
ListView4.AlphaSort;
ColumnToSort := 1;
ListView4.AlphaSort;
ColumnToSort := 3;
ListView4.AlphaSort;
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.

ansonsten poste mal bitte deinen relevanten code.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#5

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 17:38
@Keldorn

Nur funktioniert es nicht! er sortiert trotz alle dem nur die erste Spalte!
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 17:41
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?

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#7

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 17:47
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:
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;
der Aufruf:
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;
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 17:55
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.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#9

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 18:02
Zitat von Keldorn:
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.
Alles so wies da steht! Und was soll ich den wo zuweisen?!

*oh man ist echt nich mein tach*
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: ListView 2 mal Sortieren nicht möglich?

  Alt 10. Feb 2007, 18:07
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);

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz