全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2657
推到 Plurk!
推到 Facebook!

如何判斷TREEVIEW的某一層的父節點皆不能拖曳

尚未結案
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-26 01:27:29 IP:218.164.xxx.xxx 未訂閱
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-26 09:35:11 IP:218.163.xxx.xxx 未訂閱
可以在ListBox之onDragOver, 判斷所選節點是否可接受, 若不接受將Accept:=False 例:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TTreeview then begin
//此處之條件應看你需求, level=0 表示最上層之node
     if TTreeview(Source).selected.level=0 then
        Accept:=False
     else
        Accept:=True;
  end;
end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-26 12:25:08 IP:218.163.xxx.xxx 未訂閱
qq_911228 你好:    如果你是希望, 有子節點的 TTreeNode 都不能 DragDrop 的話 :
  if Source is TTreeview then
     Accept := not TTreeview(Source).selected.HasChildren;
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-28 00:22:25 IP:218.164.xxx.xxx 未訂閱
謝謝大家的指導~~ 不過我覺得Mickey所寫的code比較general~~~ 所以我把分數給Mickey~~~ 謝謝~
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-29 22:34:39 IP:218.164.xxx.xxx 未訂閱
引言: qq_911228 你好: 如果你是希望, 有子節點的 TTreeNode 都不能 DragDrop 的話 :
  if Source is TTreeview then
     Accept := not TTreeview(Source).selected.HasChildren;
很謝謝你~~~ 這個問題已解決,但我又發現一個問題, 就是如果你多選時,選了A1'A2且也將A給選進去,結果A還是可以被拖曳, 請問一下,要在那個event或是properity去寫code擋掉。 謝謝。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-30 07:58:04 IP:218.32.xxx.xxx 未訂閱
var i : integer;
begin
  Accept := (Source<>nil) and
            (Source is TTreeView);
  if Accept then
    for i := 0 to TTreeView(Source).SelectionCount-1 do
      if TTreeView(Source).Selections[i].HasChildren then Accept := False ;
end;
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-06 17:25:20 IP:218.164.xxx.xxx 未訂閱
引言:
var i : integer;
begin
  Accept := (Source<>nil) and
            (Source is TTreeView);
  if Accept then
    for i := 0 to TTreeView(Source).SelectionCount-1 do
      if TTreeView(Source).Selections[i].HasChildren then Accept := False ;
end;
不好意思~ 再請問您~~ 如果拖曳到LISTBOX的節點,可以知道他的父節點是什麼嘛? 譬如說 :從TREEVIEW中拖曳LISTBOX的A1,因為到時候須作運算,要用到A1的父節點A,請問要在那加CODE~~謝謝。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-07 11:56:13 IP:218.32.xxx.xxx 未訂閱
qq_911228 你好: 請先看看你的另一個 ListBox Item , "自動歸位"回 TreeView 那篇問題, 既然 ListBox.Item.Object 中紀錄著 TTreeNode.ItemID, 可以靠那個 ItemID, 找到原 TTreeNode, 要找父節點, 請看看Help文件中, TTreeNode.Parent Property.
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-07 18:11:23 IP:218.164.xxx.xxx 未訂閱
謝謝。 但我的help寫的只有如下 SelNode := TTreeView1.Selected; ParentNode := SelNode.Parent; HasSibling := (ParentNode.GetPrevChild(SelNode) <> nil) or (ParentNode.GetNextChild(SelNode) <> nil); 所以我不知道要如何利用之前的itemid去作, 因為如果用 Node := treeview1.Items.GetNode(HTreeItem(listbox3.Items.Objects[j])).parent, 則treeview1則會多增加一個node,所以不好意思再麻煩你了。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-07 21:36:16 IP:218.32.xxx.xxx 未訂閱
你不是要用父節點運算 ? 我意思是說 : treeview1.Items.GetNode(HTreeItem(listbox3.Items.Objects[j]))==>可以找回 "A1" 節點 treeview1.Items.GetNode(HTreeItem(listbox3.Items.Objects[j])).parent==> 就可以找到 "A" 節點
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-13 13:58:25 IP:218.70.xxx.xxx 未訂閱
我想问一下,为什么我得程序没有执行呢? 谢谢!  
 
procedure TForm1.Frame2TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if source is TTreeview then
    accept := not TTreeview(source).Selected.HasChildren;
end;    procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TTreeview then
    with sender as TListBox do
      Items.Add(TTreeview(Source).Selected.Text);
end;
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-15 21:47:01 IP:218.164.xxx.xxx 未訂閱
引言: 我想问一下,为什么我得程序没有执行呢? 谢谢!
 
procedure TForm1.Frame2TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if source is TTreeview then
    accept := not TTreeview(source).Selected.HasChildren;
end;    procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TTreeview then
    with sender as TListBox do
      Items.Add(TTreeview(Source).Selected.Text);
end;
不知道你的multiselected的properity是否有設為true!
系統時間:2024-11-23 8:44:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!