请Fishman帮我看一下这个TreeView的排序得怎么实现? |
尚未結案
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
Fishman,你好!
有一棵树如下:
-888
-G
-F
-E
-D
-C
-B
-A
-XIAOQLJ
-FISHMAN
-999
-1
-2
我的要求是这样的。每个节点都有一个状态标识flag,其值为“0”或“1”。
我单击按钮后,flag=1的,排在最上面,flag=0的排在下面。然后,节点又要按拼音序,得怎么做?这里假设:节点XIAOQLJ、FISHMAN的flag=1,其它为0,则得到结果如下:
-888
-FISHMAN //XIAOQLJ和FISHMAN,因为其flag=1,所以排在上面;又因为按
-XIAOQLJ //拼音排序,所以FISHMAN比XIAOQLJ排在前面。
-A
-B
-C //A到G这些节点因为flag=0,所以排在下面,并按拼音排序。
-D
-E
-F
-G
-999
-1
-2 说明:其flag的值,我是存在记录集里的。
如:PMyRecord(TreeView.Selected.Data)^.flag 就存了其状态的标识1或0。
{
type
PMyRecord =^TMyRecord;
TMyRecord =record
flag :integer;
end;
}
------
http://www.nbye.net |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi xiaoqlj , 試試看是不是這樣,一樣是自行寫 OnCompare 事件
procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); begin if PMyRec(Node1.Data)^.FLAG > PMyRec(Node2.Data)^.FLAG then begin Compare := -1 end else if PMyRec(Node1.Data)^.FLAG = PMyRec(Node2.Data)^.FLAG then begin if Node1.Text < Node2.Text then Compare := -1 else if Node1.Text = Node2.Text then Compare := 0 else if Node1.Text > Node2.Text then Compare := 1; end else if PMyRec(Node1.Data)^.FLAG < PMyRec(Node2.Data)^.FLAG then begin Compare := 1; end; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi xiaoqlj, 與上次一樣,需有程式碼觸發排序,因為 TreeView.SortType 為 stNone,故程式不會自動觸發排序,需自行寫程式碼觸發(相關說明請見 Delphi 的 Help) 把 TreeView 的 OnCompare 事件 Replace 為上述程式碼,以達到你說的功能。 ----------------------------------
小弟才疏學淺,若有謬誤尚請不吝指教
----------------------------------
------
Fishman |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |