Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview nach erfolgreichem Multiselect neu sorteiren (https://www.delphipraxis.net/28384-listview-nach-erfolgreichem-multiselect-neu-sorteiren.html)

joredue 24. Aug 2004 08:46


Listview nach erfolgreichem Multiselect neu sorteiren
 
Hallo alle zusammen.

In suche in einem Listview alle Einträge, die mit dem in TEdit enthaltenen Text übereinstimmen. Das funktioniert alles einwandfrei. Die Einträge sind an verschiedenen Stellen in der Listview. z.B. stehen die gefundenen Einträge an Zeile 1, 33, 459, 1299 usw.

Meine Frage ist die, wie kann ich jetzt die gefundenen und mit Multiselect markierten Zeilen untereinander darstellen, so daß die Reihenfolge nicht mehr an Zeile 1, 33, 459, 1299 sondern an Zeile 1, 2, 3, 4, usw. ist ?

Danke schon mal jetzt.

Cu

Keldorn 24. Aug 2004 08:56

Re: Listview nach erfolgreichem Multiselect neu sorteiren
 
Hallo

das listview mit alphasort sortieren. Bei dem oncompare-ereignis vergleichst du dann statt der caption/subitems die Selected eigenschaft.

Wenn es auch wieder rücksortiert werden muß: entweder du hast eine durchgehende Nummerierung oder du mußt dir dises schaffen, z.B. in dem du die data-eigenschaft des listitems nutzt.

Mfg Frank

joredue 24. Aug 2004 11:39

Re: Listview nach erfolgreichem Multiselect neu sorteiren
 
Hallo Frank.

Danke für den Hinweis, aber ich stehe voll auf dem Schlauch.

Das habe ich dazu in der OH gefunden

Delphi-Quellcode:
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
var
  ix: Integer;
begin
  if ColumnToSort = 0 then
    Compare := CompareText(Item1.Caption,Item2.Caption)
  else begin
   ix := ColumnToSort - 1;
   Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
  end;

end;
Meine Meinung nach müsste ich irgendwie hier landen

Delphi-Quellcode:
compare := Compare(ListView2.Selected.Index[ix], Item2.ListView.Selected.Index[ix]);
Kriegs einfach nicht hin.

CU Achim

Keldorn 24. Aug 2004 12:31

Re: Listview nach erfolgreichem Multiselect neu sorteiren
 
probiers mal so
Delphi-Quellcode:
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
begin
  compare := 0;
  if (item1.Selected) and not(item2.Selected) then compare := -1;
  if not(item1.Selected) and (item2.Selected) then compare := 1;
end;
ix ist die Spalte, nach der sortiert weden soll, das brauchst du nicht. du mußt die item1 und item2 vergleichen, nicht die listview.selected eigenschaft.

Mfg Frank

joredue 24. Aug 2004 13:35

Re: Listview nach erfolgreichem Multiselect neu sorteiren
 
Hallo Frank.

:thumb: Fluppt einwandfrei. :spin:


Danke schön.

Cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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