제가 알고픈 건요
윈도우 탐색기에서 헤더 부분을 클릭하면 그 헤더에 관한 내용을 중심으로 소트가
내림차순 또는 오름차순으로 잖아요?
이게 델파이에서 구현이 됩니까?
만약에 된다면 방법을 알고싶습니다.
이건 절대로 오른쪽, 중앙, 왼쪽정렬이 절대 아니라 오름차순, 내림차순 sort예요 글고
아무 헤더나 클릭했을때 클릭된 헤더를 중심으로 소트되야 되거든요
ListView나 스트링 그리드 둘중 아무거나 하나만 되믄 됩니다.
제 생각에는 스트링 그리드보다는 리스트뷰가 용이할꺼 같은데...
위에 질문은 db를 사용하지 안는 경우입니다.
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:
> 제가 알고픈 건요
> 윈도우 탐색기에서 헤더 부분을 클릭하면 그 헤더에 관한 내용을 중심으로 소트가
> 내림차순 또는 오름차순으로 잖아요?
> 이게 델파이에서 구현이 됩니까?
> 만약에 된다면 방법을 알고싶습니다.
> 이건 절대로 오른쪽, 중앙, 왼쪽정렬이 절대 아니라 오름차순, 내림차순 sort예요 글고
> 아무 헤더나 클릭했을때 클릭된 헤더를 중심으로 소트되야 되거든요
> ListView나 스트링 그리드 둘중 아무거나 하나만 되믄 됩니다.
> 제 생각에는 스트링 그리드보다는 리스트뷰가 용이할꺼 같은데...
> 위에 질문은 db를 사용하지 안는 경우입니다.