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 warum geht der code nicht(listview sort) (https://www.delphipraxis.net/38724-warum-geht-der-code-nicht-listview-sort.html)

keineahnung1 23. Jan 2005 13:35


warum geht der code nicht(listview sort)
 
hi, ich hab ne listview und hab 2 spalten, aber egal auf welchen header ic klick sortiert der immer nach der column 0. Ich verwende genau den code der in der hilfe steht


Delphi-Quellcode:
procedure TForm1.ListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
begin

    ColumnToSort := Column.Index;
  (Sender as TCustomListView).AlphaSort;


end;

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;
woran leigt des?!?! jemand ne idee

Dani 23. Jan 2005 13:38

Re: warum geht der code nicht(listview sort)
 
Hi, bin mir nicht ganz sicher...aber nimm mal AlphaSort CustomSort

keineahnung1 23. Jan 2005 13:47

Re: warum geht der code nicht(listview sort)
 
ah und was sollt ich da als die 2 parameter angeben?

vielen dank

Dani 23. Jan 2005 13:49

Re: warum geht der code nicht(listview sort)
 
hab leider kein Delphi zum nachschauen hier, aber schau doch mal in der Online-Hilfe nach, da steht es bestimmt!

keineahnung1 23. Jan 2005 13:52

Re: warum geht der code nicht(listview sort)
 
ah willst du vielelicht interpretieren was des heißt, ich bin nicht in der lage da rauszukriegen was für params ich angeben muss

Beschreibung

Mit der Methode CustomSort können Sie die Elemente der Liste mit der im Parameter SortProc festgelegten Funktion sortieren. Diese Sortierfunktion vergleicht die Listenelemente, die als lParam1 und lParam2 übergeben werden. Die Sortierfunktion gibt einen Integerwert zurück, der angibt, ob lParam1 und lParam2 gleichrangig sind (Rückgabewert 0), ob lParam1 größer als lParam2 ist (Rückgabewert größer als 0) oder ob lParam1 kleiner als lParam2 ist (Rückgabewert kleiner als 0). Der Parameter lParam von CustomSort ist ein optionaler Wert, der als dritter Parameter an die Sortierfunktion übergeben wird.

Hat der Parameter SortProc den Wert nil (Delphi) bzw. NULL (C++), generiert CustomSort das Ereignis OnCompare, um die Listenelemente zu vergleichen. Dadurch können Sie mit einer entsprechenden Ereignisbehandlungsroutine eine andere Sortierreihenfolge basierend auf dem Wert des Parameters lParam festlegen (z.B. aufsteigende oder absteigende Reihenfolge).

Wird keine Sortierfunktion oder keine Ereignisbehandlungsroutine für OnCompare bereitgestellt, sortiert CustomSort die Elemente alphabetisch nach den Werten der Eigenschaft Caption.

Konnte die Liste erfolgreich sortiert werden, gibt CustomSort true zurück.

Warnung: Wenn die Anwendung im virtuellen Modus ausgeführt wird, arbeitet CustomSort nicht.

Dani 23. Jan 2005 14:00

Re: warum geht der code nicht(listview sort)
 
Der Funktionskopf wäre zwar nützlich, aber ich denke es reicht, wenn du nil als Parameter benutzt.

keineahnung1 23. Jan 2005 14:19

Re: warum geht der code nicht(listview sort)
 
Mit der Methode CustomSort können Sie die Listenelemente unter Verwendung der angegebenen Sortierfunktion sortieren.

Delphi-Syntax:

type TLVCompare = function(lParam1, lParam2, lParamSort: Integer): Integer stdcall;
function CustomSort(SortProc: TLVCompare; lParam: Longint): Boolean;

C++ Syntax:

typedef int (CALLBACK *PFNLVCOMPARE)(LPARAM lParam1, LPARAM lParam2, LPARAM lParam);
bool __fastcall CustomSort(PFNLVCOMPARE SortProc, int lParam);

da noch der kopf :wink:

aber customsort macht irgdnwie auch keinen unterschied zu alphasort, hab immernoch des selbe problem

Dani 23. Jan 2005 14:29

Re: warum geht der code nicht(listview sort)
 
CustomSort(nil, 0) müsste funktionieren, aber auch nur dann, wenn der aufrufenden Listview ein OnCompare Ereignis zugewiesen wurde. Mach in dein ListView1Compare mal ein ShowMessage(IntToStr(ColumnToSort)) rein und schau, ob es aufgerufen wird.

Wenn du ohne die globale Variable ColumnToSort auskommen willst, kannst du den zweiten Parameter benutzen.

Delphi-Quellcode:
procedure TForm1.ListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  (Sender as TListView).CustomSort(nil, Column.Index);
end;

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

end;

keineahnung1 23. Jan 2005 15:05

Re: warum geht der code nicht(listview sort)
 
geniall, an des hab ich nicht gedacht des ereignis zuzuweißen :-) musst des noch im objekt manager machen, deswegen...........

vielen vielen dank


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