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

Tree View 的 point 無法釋放...

尚未結案
flyjackie
一般會員


發表:3
回覆:3
積分:1
註冊:2003-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-15 18:44:45 IP:211.20.xxx.xxx 未訂閱
請教各位大大: 小弟我用兩個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-16 00:43:43 IP:61.70.xxx.xxx 未訂閱
flyjackie: 請問你是否有刪除 TreeNode? 或者 請帖上 完整的程式列表
flyjackie
一般會員


發表:3
回覆:3
積分:1
註冊:2003-01-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-16 14:30:45 IP:211.20.xxx.xxx 未訂閱
qoo1234 你好: 我是沒有刻意去刪除 TreeNode ,不過我會用滑鼠拖曳的方式將 Trv1 的TreeNode 利用 tSrcNode.Moveto(tDesNode,naAddChild) 搬動到目地物件 Trv2 的 TreeNode 下 ...
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-16 23:57:05 IP:61.221.xxx.xxx 未訂閱
引言: 我是沒有刻意去刪除 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-17 10:31:41 IP:211.74.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-17 17:49:21 IP:211.20.xxx.xxx 未訂閱
謝謝各位大大的指點....小弟已經解決了.....不過因為 Chih Post 上來的程式讓我找到了答案,所以我就把分數給他了.....
系統時間:2024-06-28 2:13:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!