Delphi-PRAXiS
Seite 2 von 2     12   

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 Problem mit CustomSort in Listview (https://www.delphipraxis.net/64645-problem-mit-customsort-listview.html)

alzaimar 7. Mär 2006 08:41

Re: Problem mit CustomSort in Listview
 
Sehr geehrter Herr Kaiser,

also bei mir funktionierts....

Delphi-Quellcode:
Function AuswertungSortProc(Item1, Item2: TListItem; Data: Integer): Integer; stdcall;
Var
  prio1, prio2: integer;

Begin
  If Item1.Caption <> Item2.Caption Then
    Result := CompareText(Item1.Caption, Item2.Caption)
  Else Begin
    prio1 := strtoint(item1.SubItems[0]);
    prio2 := strtoint(item2.SubItems[0]);
    result := prio2 - prio1;
  End;
  If data = 1 Then Result := -Result;
End;

Procedure TForm1.btClick(Sender: TObject);

  Procedure _Add(aUser, aprio, aAufgabe: String);
  Begin
    With lvTest.Items.Add Do Begin
      Caption := aUser;
      SubItems.Add(aPrio);
      SubItems.Add(aAufgabe);
    End;
  End;

Begin
  _Add('user2', '120', 'aufgebe 876');
  _Add('user1', '1200', 'aufgabe abce...');
  _Add('user1', '200', 'aufgabe 123');
  _Add('user1', '100', 'aufgabe 345');
  _Add('user1', '200', 'aufgabe cde');
  lvTest.CustomSort(@AuswertungSortProc, 0);
End;
Nach user aufsteigend, nach Prio absteigend. Wo ist jetzt Dein Problem?

[edit] Code verhübscht [/edit]

kaiser1401 7. Mär 2006 09:03

Re: Problem mit CustomSort in Listview
 
siht eigentlich nciht viel anders aus als bei mir würd ich sagen.
Ich hab hier mal einen beispiel source der nciht das tut was er soll:

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function ComparePrio(a,b:integer):integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var aufg : TListItem;

 function AuswertungSortProc(Item1, Item2: TListItem; Data: Integer): Integer; stdcall;
   var prio1,prio2:integer;
 begin
   Result:=CompareText(Item1.Caption,Item2.Caption);
   result:= 0;
   if Result = 0 then
    prio1:=strtoint(item1.SubItems[0]);
    prio2:=strtoint(item2.SubItems[0]);
    Result := -Form1.ComparePrio(prio1,prio2);
    //if data = 1 then Result := -Result;
  end;

begin
  // Das hier ist eigentlich eine schleife, aber im Beispiel schreibe ich es mal hard rein:
  ListView1.CustomSort(@AuswertungSortProc, 0);
  aufg := Listview1.Items.Add;
  aufg.Caption:='user1';
  aufg.SubItems.Add('200');
  aufg.SubItems.Add('text1234');
  ListView1.Refresh;
  // Schleifenende
    ListView1.CustomSort(@AuswertungSortProc, 0);
  aufg := Listview1.Items.Add;
  aufg.Caption:='user1';
  aufg.SubItems.Add('1200');
  aufg.SubItems.Add('text1234');
  ListView1.Refresh;

  ListView1.CustomSort(@AuswertungSortProc, 0);
  aufg := Listview1.Items.Add;
  aufg.Caption:='user1';
  aufg.SubItems.Add('100');
  aufg.SubItems.Add('text1234');
  ListView1.Refresh;

  ListView1.CustomSort(@AuswertungSortProc, 0);
  aufg := Listview1.Items.Add;
  aufg.Caption:='user2';
  aufg.SubItems.Add('120');
  aufg.SubItems.Add('text1234');
  ListView1.Refresh;

  ListView1.CustomSort(@AuswertungSortProc, 0);
  aufg := Listview1.Items.Add;
  aufg.Caption:='user1';
  aufg.SubItems.Add('200');
  aufg.SubItems.Add('text1234');
  ListView1.Refresh;

end;

function TForm1.ComparePrio(a,b:integer):integer;
begin
   if a > b then
      result := 1
   else if a = b then
      result := 0
   else
      Result := -1;
end;

end.

xaromz 7. Mär 2006 09:07

Re: Problem mit CustomSort in Listview
 
Hallo,

schau Dir mal Zeile 35 an. Dann schmeiss diese weg.

Gruß
xaromz

kaiser1401 7. Mär 2006 09:37

Re: Problem mit CustomSort in Listview
 
sorry, hatte ich vergessen wieder rauszunehmen, funktioniert aber immer noch nicht:

user2 | 120
user1 | 1200
user1 | 200
user1 | 100
user1 | 200

werd aber mal eben das von Luckie ausprobieren. hatte ich grade nicht gesehen :oops:

kaiser1401 7. Mär 2006 10:03

Re: Problem mit CustomSort in Listview
 
*freu* :-D Das von Luckie hat funktioniert. Dank euch allen für die bemühungen.

bis dann
Kaiser

alzaimar 7. Mär 2006 11:44

Re: Problem mit CustomSort in Listview
 
Zitat:

Zitat von kaiser1401
siht eigentlich nciht viel anders aus als bei mir würd ich sagen.

Doch, denn Du fügst user2 ein, sortierst anschließend aber nicht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 2 von 2     12   

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