線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2746
推到 Plurk!
推到 Facebook!

ListView.CustomSort的問題

尚未結案
sikchun
一般會員


發表:5
回覆:7
積分:2
註冊:2006-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-13 11:14:18 IP:202.175.xxx.xxx 訂閱

procedure TForm1.ListView12ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ListView12.Tag:=Column.Index;
ListView12.CustomSort(NULL,0);
end;

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

[Error] Unit1.pas(1126): Incompatible types: 'Calling conventions differ'

有沒有大大可以幫忙呀!謝謝

以上是我把以下c 語言轉為delphi語言時出現的問題!

1. 將ListView之SortType設為stBoth


2. ColumnClick時
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
      TListColumn *Column)
{
  ListView1->Tag = Column->Index;//將選擇之column index寫入Tag
  ListView1->CustomSort(NULL,0); //執行sort , 0為升冪1為降冪
}
//---------------------------------------------------------------------------
3. 於 onCompare
void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,
      TListItem *Item2, int Data, int &Compare)
{
  if (ListView1->Tag == 0)  //選first column直接用caption
    Compare = CompareText(Item1->Caption, Item2->Caption);
  else
  {
    int id =ListView1->Tag-1; //取得要sort之subitem之index
    Compare = CompareText(Item1->SubItems->Strings[id],Item2->SubItems->Strings[id]);
  }
  if (Data==1)  //若是要Descending
    Compare = -Compare;
}
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-14 10:45:22 IP:60.248.xxx.xxx 未訂閱

AlphaSort即可觸發OnCompare事件

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

procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ListView1.Tag:=Column.Index;
ListView1.AlphaSort;
end;

sikchun
一般會員


發表:5
回覆:7
積分:2
註冊:2006-07-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-14 20:21:25 IP:202.175.xxx.xxx 訂閱

我的日期格式是yyyy/mm/dd 在我排序時他是以text排的,我要怎樣才可以以日期排呢?

pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-08-15 09:22:45 IP:60.248.xxx.xxx 未訂閱

不懂你的意思

點Column Head時,它會依點擊的Column做排序,Column內容若是yyyy/MM/dd格式,經測試一樣可正常排序

sikchun
一般會員


發表:5
回覆:7
積分:2
註冊:2006-07-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-08-16 20:01:23 IP:202.175.xxx.xxx 訂閱

問題我巳經解決啦 我用了comparedate去做就可以啦 ^^ 謝謝你的幫助

系統時間:2024-05-17 16:25:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!