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

如何將listbox內的Item 扥入Treeview中.

答題得分者是:william
Plum_Yang
一般會員


發表:16
回覆:16
積分:6
註冊:2003-08-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-21 09:43:37 IP:211.144.xxx.xxx 未訂閱
各位DElphi高手,我對於滑鼠扥放事件並不了解. 正好有遇到將listbox中的Item要扥入treeview中. 不知可否給我一些指點.或者給我一些例子. 謝謝大家.< >< >
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-21 10:04:13 IP:147.8.xxx.xxx 未訂閱
滑鼠扥放事 == Drag and drop???    Here is a simple example:    http://delphi.ktop.com.tw/loadfile.php?TOPICID=11295557&CC=252623 發表人 - william 於 2003/08/21 10:05:53
葉雨心
版主


發表:12
回覆:25
積分:12
註冊:2003-08-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-21 10:16:09 IP:210.243.xxx.xxx 未訂閱
試試看吧~畫面上放一個ListBox和一個TreeView unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; TreeView1: TTreeView; procedure FormShow(Sender: TObject); procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); var i:Integer; begin //設定ListBox的初始值 ListBox1.Items.Clear; for i:=1 to 99 do begin ListBox1.Items.Add(Format('%.2d',[i])); end; //將ListBox的拖曳模式設為自動 ListBox1.DragMode:=dmAutomatic; end; procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin //當ListBox項目拖曳經過TreeView時會觸動此事件,此例為判斷如果拖曳進來是TListBox類別的物件,則允許拖曳進入 Accept:=(Source is TListBox); end; procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var TempNode:TTreeNode; TempList:TListBox; begin //將ListBox的項目拖曳到TreeView上放開滑鼠時觸動此事件 if(Source is TListBox) then begin TempList:=(Source as TListBox); //取得TreeView上,滑鼠放開那一點X,Y座標所在的TreeNode TempNode:=TreeView1.GetNodeAt(X,Y); TreeView1.Items.AddChild(TempNode,TempList.Items[TempList.ItemIndex]); TreeView1.FullExpand; end; end; end. 午夜0時30分~飄在窗外芭蕉葉上的綿綿細雨~將成為你我的心情~
------
午夜0時30分~飄在窗外芭蕉葉上的綿綿細雨~將成為你我的心情~
Plum_Yang
一般會員


發表:16
回覆:16
積分:6
註冊:2003-08-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-21 11:43:21 IP:211.144.xxx.xxx 未訂閱
引言: 各位DElphi高手,我對於滑鼠扥放事件並不了解. 正好有遇到將listbox中的Item要扥入treeview中. 不知可否給我一些指點.或者給我一些例子. 謝謝大家.< >< >
感謝兩位版主,都可以使用.可是又出現新的問題,因為我還需要使用點擊Listbox的Item來顯示在Treeview中.可是如果我將Dragmode設為dkAutomatic時,當我 單擊時(事件已經寫入ListBox的ONClick中)就會觸發兩次單擊事件,Treeview中會顯示相同的Node兩次,我不知怎樣作才可以即實現單擊,有實現扥放.
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-21 11:52:02 IP:147.8.xxx.xxx 未訂閱
Set DragMode to dmManual...    
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    ListBox1.BeginDrag(True);
end;
Plum_Yang
一般會員


發表:16
回覆:16
積分:6
註冊:2003-08-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-21 12:00:49 IP:211.144.xxx.xxx 未訂閱
引言: Set DragMode to dmManual...
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    ListBox1.BeginDrag(True);
end;
William大哥: 情況還是沒變.單擊時還是出現兩次.
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-21 12:11:21 IP:147.8.xxx.xxx 未訂閱
Sorry I thought you want to set drag mode to dmManual ... class="code">procedure TForm1.ListBox1Click(Sender: TObject); begin if FClick then begin { .... your code .... } end; end; procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer); begin FClick := True; end; procedure TForm1.ListBox1StartDrag(Sender: TObject; var DragObject: TDragObject); begin FClick := False; end; procedure TForm1.FormCreate(Sender: TObject); begin FClick := True; end; FClick is a boolean field...
Plum_Yang
一般會員


發表:16
回覆:16
積分:6
註冊:2003-08-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-21 12:52:45 IP:211.144.xxx.xxx 未訂閱
William大哥: 你的方法是對的,我的問題是解決了.可是每次必需點擊後滑鼠才會落在那個Item上,才能扥放,以致每次都會顯示那一筆本該扥放的資料,所以我困惑的是應該將onclick下的事件寫在哪裡,才會使我扥放時不會觸發click而將資料顯示出來.
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-21 14:22:21 IP:147.8.xxx.xxx 未訂閱
Plum_Yang
一般會員


發表:16
回覆:16
積分:6
註冊:2003-08-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-21 17:07:33 IP:211.144.xxx.xxx 未訂閱
引言: >< face="Verdana, Arial, Helvetica"> 我在扥放Item時,必須先點它,那樣滑鼠才會落到所選項上,這樣無形中又會觸發Click事件.所以我困惑的是: 如何點選Item而沒觸發click.
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-21 17:26:48 IP:147.8.xxx.xxx 未訂閱
Logic problem? You must select the item and then do the drag. Perhaps you should limit your drag drop action with a key press, say Ctrl? Then you can make use of the MouseDown event together with dmManual drag mode. When Ctrl is down, being drag and show the details otherwise.
系統時間:2024-05-18 16:53:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!