Q&A

  • TListView 에서 역순 Sort 할 수 있는 방법좀 ...
안녕하세요,, 이곳에서 많은 도움을 받고 있는 델 초보입니다.



TListView 를 이용해서 탐색기 창을 만드는 중인데..

Column을 선택했을 때, 탐색기 처럼 내림/오름 차순으로 Sorting 을 하고자 합니다.



질문을 조회해 보니 CustomSort()를 이용하여 오름차순으로는 답변이 있는데,

내림차순으로 할 수있는 방법을 못찾겠습니다...



부디 아시는분 갈켜주세요.....

2  COMMENTS
  • Profile
    어린왕자 2000.10.17 18:24
    --어디 팁에서 가져왔슴다.-- 즐코하세요..

    제가 모아놓은 팁에 있어서 올립니다. 이 글을 적어주신 분의 성함을 몰라서 죄송시럽네요. ^^; 마음으로 감사를...



    ListView 의 컬럼별로 Sort (내림차순 포함)

    // 아래 예제를 참고하세요

    // 예제에서는 칼럼이 3개로 설정되어 있습니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs, ComCtrls;



    type

    TForm1 = class(TForm)

    ListView1: TListView;

    procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    // ListView의 Reverse sort를 결정하는 boolean 배열

    ReverseOrder: array[0..2] of boolean; // 컬럼이 3개일경우(0..2)



    implementation

    {$R *.DFM}



    // ListView 를 컬럼별로 sort하는 standalone 함수입니다

    function ListViewSortProc(Item1, Item2: TListItem; ColumnNo: Integer): Integer; stdcall;

    var

    S1, S2: string;

    i: integer;

    begin

    if ColumnNo = 0 then

    begin

    S1 := Item1.Caption;

    S2 := Item2.Caption;

    end

    else

    begin

    S1 := Item1.SubItems[ColumnNo - 1];

    S2 := Item2.SubItems[ColumnNo - 1];

    end;



    i := CompareText(S1, S2); // C의 strcmp() 함수와 동일한 기능



    if Unit1.ReverseOrder[ColumnNo] then // Reverse이면 역순으로 sort

    i := - i;

    Result := i;

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    var

    i: Integer;

    begin

    {ListView 의 Reverse sort 여부 지정}

    for i := Low(ReverseOrder) to High(ReverseOrder) do

    ReverseOrder[i] := False; // False: 오름차순, True: 내림차순

    end;



    procedure TForm1.ListView1ColumnClick(Sender: TObject;

    Column: TListColumn);

    begin

    ListView1.CustomSort(@ListViewSortProc, Column.index);

    // Reverse sort는 컴럼을 한번 클릭했을때는 오름차순이지만

    // 또 한번 누르면 내림차순으로 sort 됩니다

    // 오름, 내림차순은 아래의 ReverseOrder 에서 결정됩니다

    ReverseOrder[Column.Index] := not ReverseOrder[Column.Index];

    end;



    end.





    궁금이 wrote:

    > 안녕하세요,, 이곳에서 많은 도움을 받고 있는 델 초보입니다.

    >

    > TListView 를 이용해서 탐색기 창을 만드는 중인데..

    > Column을 선택했을 때, 탐색기 처럼 내림/오름 차순으로 Sorting 을 하고자 합니다.

    >

    > 질문을 조회해 보니 CustomSort()를 이용하여 오름차순으로는 답변이 있는데,

    > 내림차순으로 할 수있는 방법을 못찾겠습니다...

    >

    > 부디 아시는분 갈켜주세요.....

  • Profile
    어린왕자 2000.10.17 18:15
    궁금이 wrote:

    > 안녕하세요,, 이곳에서 많은 도움을 받고 있는 델 초보입니다.

    >

    > TListView 를 이용해서 탐색기 창을 만드는 중인데..

    > Column을 선택했을 때, 탐색기 처럼 내림/오름 차순으로 Sorting 을 하고자 합니다.

    >

    > 질문을 조회해 보니 CustomSort()를 이용하여 오름차순으로는 답변이 있는데,

    > 내림차순으로 할 수있는 방법을 못찾겠습니다...

    >

    > 부디 아시는분 갈켜주세요.....



    어디 찾아보니깐 있던데..

    boolean변수하나 주고, 오름차순 반대로 하면 되지 않을까..

    찾으면 다시 글 올릴께요..