請問treeview如何拖曳 |
答題得分者是:harpist
|
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">
//---------------------------------------------------------------------------
void __fastcall TEMForm::RzTreeView1DragDrop(TObject *Sender,TObject *Source, int X, int Y)
{
if(Source==NULL)
return;
TTreeNode *Sourcenode = RzTreeView1->Selected;
TTreeNode *Targetnode = RzTreeView1->DropTarget;
TTreeNode *node;
if(Targetnode == NULL)
return; //搬移
TNodeAttachMode AttachMode;
if(Source == RzTreeView1)
{
if(Targetnode->Level > 0)
{
switch(Sourcenode->Level)
{
case 0:
break;
case 1: //群組搬移
if(Sourcenode->AbsoluteIndex < Targetnode->AbsoluteIndex) //下移
{
if(Targetnode != Targetnode->GetNext() && Targetnode->GetNext()!=NULL) //是否有下一個群組
{
Targetnode = Targetnode->GetNext();
bool flag = false; //while迴圈結束旗標
if(Targetnode->Level==2)
{
flag = true;
}
while(flag) //找下一個群組
{
if(Targetnode != Targetnode->GetNext() && Targetnode->GetNext()!=NULL) //是否有下一個群組
{
Targetnode = Targetnode->GetNext();
if(Targetnode->Level==1)
{
flag = false;
}
}
else
{
flag = false;
}
}
if(Targetnode->GetNext()!=NULL) //是否有下一個群組
{
AttachMode = naInsert;
}
else
{
AttachMode = naAdd;
}
}
else
{
AttachMode = naAdd;
}
}
else //上移
{
if(Targetnode != Targetnode->GetPrev()) //是否有上一個群組
{
AttachMode = naInsert;
}
else
{
AttachMode = naAddFirst;
}
}
if(Targetnode->Level==2)
{
Targetnode = Targetnode->Parent;
} Sourcenode->MoveTo(Targetnode, AttachMode); //搬移
Sourcenode->Expand(true); //展開
break;
case 2: //裝置搬移
if(Targetnode->Level== 1) //搬移至群組移動到最後
{
node = RzTreeView1->Items->AddChild(Targetnode,Sourcenode->Text);
Targetnode->Expand(true);
RzTreeView1->Items->Delete(Sourcenode);
}
if(Targetnode->Level== 2)
{
if(Sourcenode->AbsoluteIndex < Targetnode->AbsoluteIndex) //下移
{
if(Targetnode->GetNext()!=NULL && Targetnode->GetNext()->Level==2)
{
Targetnode = Targetnode->GetNext();
AttachMode = naInsert;
}
else
{
AttachMode = naAdd;
}
}
else // 上移
{
AttachMode = naInsert;
}
Sourcenode->MoveTo(Targetnode, AttachMode); //搬移
}
break;
default:
break;
}
}
}
}
//---------------------------------------------------------------------------
</textarea>
大致上可以這樣,再依據你的需求去設計
------
~§~迷時師渡,悟了自渡~§~ |
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">TTreeNode *Newnode = RzTreeView1->Items->AddChild(Targetnode,Sourcenode->Name); //新增node
if(Newnode)
{
YourClass *NewClass = new YourClass(); //建立一個新的Object
NewClass->Member = ((YourClass*)Sourcenode->Data)->Member; //複製物件內容
Newnode->Data = NewClass;
}
</textarea>
類似這樣子,複製內容你可以在設計 Class 時先考慮進去 ===================引 用 文 章=================== 感謝前輩的範例..... 想再問個問題.... 如果tree中要有複製貼上的功能該怎麼做? 假設我選取某一節點..該節點的data有指到一個class. 如果要複製選取的節點所有內容.然後複製好後.點選某的節點按貼上. 就把剛剛複製的貼到選到節點的子節點...這樣該怎麼做??
------
~§~迷時師渡,悟了自渡~§~ |
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |