Einzelnen Beitrag anzeigen

kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#12

Re: Problem mit CustomSort in Listview

  Alt 7. Mär 2006, 10:03
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.
  Mit Zitat antworten Zitat