Tree View 的 point 無法釋放... |
尚未結案
|
flyjackie
一般會員 發表:3 回覆:3 積分:1 註冊:2003-01-11 發送簡訊給我 |
請教各位大大:
小弟我用兩個Tree View (Trv1,Trv2)元件,兩個 TreeView 的 Item可以互相拖曳,並且Item的 Data屬性有關聯到 Pointer ,但是當我拖曳完後要釋放 Pointer 用下面的 Procedure 時,結果出現 ETreeViewError with message 'Invalid index' 的錯誤訊息..我想應該是 Items.Count 有問題,請問我該如何避免又可以釋放 Pointer ..... procedure TForm1.FreeNode;
var
i:integer ;
begin
//清除 TreeView1 Point Data for i:=0 to Trv1.Items.Count-1 do
begin
dispose(Trv1.Items[i].Data);
end; //清除 TreeView2 Point Data
Trv2.Refresh ;
for i:=0 to Trv2.Items.Count-1 do
begin
dispose(Trv2.Items[i].Data);
end; end;
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
flyjackie
一般會員 發表:3 回覆:3 積分:1 註冊:2003-01-11 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 我是沒有刻意去刪除 TreeNode ,不過我會用滑鼠拖曳的方式將 Trv1 的TreeNode 利用 tSrcNode.Moveto(tDesNode,naAddChild) 搬動到目地物件 Trv2 的 TreeNode 下 ...Hi, MoveTo Procedure 應該是不能跨 TreeView 來搬動才對.. ?? --- delphi on-line help---- Moves the node to another location in the tree view. procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); --------------------------- 另外已試過在 node.data 中放資料, 再用 MoveTo 的方式移動 node, 再試著 dispose 是不會發生問題的... |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
hi...flyjackie
我按照你想要的方式改了如下
var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Trv1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end; procedure TForm1.Trv1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if tTreeView(Sender).Items.Count = 0 then exit; if Button = mbLeft then tTreeView(Sender).BeginDrag(False); {begin drag} end; procedure TForm1.Trv1DragDrop(Sender, Source: TObject; X, Y: Integer); var dx: integer; Node: TTreeNode; begin Node := tTreeView(Source).Selected; if Node <> nil then begin with TTreeView(Sender) do begin Items.InsertObject(Node, Node.Text, Pointer(Node.Data)); end; Node.Delete; end; end; procedure TForm1.Trv2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end; procedure TForm1.Trv2DragDrop(Sender, Source: TObject; X, Y: Integer); var dx: integer; Node: TTreeNode; begin Node := tTreeView(Source).Selected; if Node <> nil then begin with TTreeView(Sender) do begin Items.InsertObject(Node, Node.Text, Pointer(Node.Data)); end; Node.Delete; end; end; procedure TForm1.Trv2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if tTreeView(Sender).Items.Count = 0 then exit; if Button = mbLeft then tTreeView(Sender).BeginDrag(False); {begin drag} end; end.但是我沒有去計算插入的位置,剩下的你可以自己TRY看看了.. >< face='Courier New'> 發表人 - chih 於 2003/04/17 10:44:06 發表人 - chih 於 2003/04/17 10:45:11 |
flyjackie
一般會員 發表:3 回覆:3 積分:1 註冊:2003-01-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |