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

TreeView的拖曳

尚未結案
kaiming
一般會員


發表:6
回覆:11
積分:8
註冊:2004-03-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-07 21:35:29 IP:220.130.xxx.xxx 未訂閱
請問各位大大: 要怎麼在TreeView中,做出拖曳節點的效果呢?! 就是可以將A節點以及他底下的所有子節點全部用拖曳的拉到B節點下!    還有~ 我有看到一段關於TreeView的拖曳,但是是用Delphi寫的... 但在紅色的部份我看不大懂... 有哪位高手可以幫我將它翻成BCB的語法呢? procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var AnItem: TTreeNode; AttachMode: TNodeAttachMode; HT: THitTests; begin if TreeView1.Selected = nil then Exit; HT := TreeView1.GetHitTestInfoAt(X, Y); AnItem := TreeView1.GetNodeAt(X, Y); if AnItem = nil then Exit; if (HT - [htOnItem, htOnRight, htOnIcon, htNowhere, htOnIndent] <> HT) then begin AttachMode := naInsert; if (htOnItem in HT) or (htOnRight in HT) or (htOnIcon in HT) then AttachMode := naAddChild else if htNowhere in HT then AttachMode := naAdd else if htOnIndent in HT then AttachMode := naInsert; TreeView1.Selected.MoveTo(AnItem, AttachMode); end; end; 發表人 - kaiming 於 2005/07/07 22:33:04
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-08 02:28:42 IP:61.59.xxx.xxx 未訂閱
關於移動節點到其他節點下, 請參考下列程式:
 
void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
 //
 if(Source!= TreeView1 || !TreeView1->Selected)
  Accept =false;
 else {
  TTreeNode* tn = TreeView1->DropTarget;
  if(tn && !tn->HasAsParent(TreeView1->Selected))
    Accept =true;
  else
    Accept =false;
 }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{     if(Source!= TreeView1 || !TreeView1->Selected)
  return;     TTreeNode* tn = TreeView1->DropTarget;
 if(tn && !tn->HasAsParent(TreeView1->Selected))
   TreeView1->Selected->MoveTo(tn,naAddChild);
} 
另外...HT的問題...他是判斷你拖曳的位置是否在點上,來判斷說要移到跟點同一層還是他下一層還是最頂層..相關程式請參閱BCB Help..如下:
 
void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source, int X, int Y)    {
  if (Source != (TObject *)TreeView1 || TreeView1->Selected == NULL)
    return;
  THitTests HT = TreeView1->GetHitTestInfoAt(X, Y);
  TNodeAttachMode AttachMode;
  TTreeNode *pItem = TreeView1->GetNodeAt(X, Y);
  if (HT.Contains(htOnItem) || HT.Contains(htOnIcon))
    AttachMode = naAddChild;
  else if (HT.Contains(htNowhere))
    AttachMode = naAdd;
  else if (HT.Contains(htOnIndent))        AttachMode = naInsert;
  else
    return;
  TreeView1->Selected->MoveTo(pItem, AttachMode);
}
系統時間:2024-05-02 14:31:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!