如何將listbox內的Item 扥入Treeview中. |
答題得分者是:william
|
Plum_Yang
一般會員 發表:16 回覆:16 積分:6 註冊:2003-08-15 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
滑鼠扥放事 == 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 發送簡訊給我 |
試試看吧~畫面上放一個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 發送簡訊給我 |
引言: 各位DElphi高手,我對於滑鼠扥放事件並不了解. 正好有遇到將listbox中的Item要扥入treeview中. 不知可否給我一些指點.或者給我一些例子. 謝謝大家.< >< >感謝兩位版主,都可以使用.可是又出現新的問題,因為我還需要使用點擊Listbox的Item來顯示在Treeview中.可是如果我將Dragmode設為dkAutomatic時,當我 單擊時(事件已經寫入ListBox的ONClick中)就會觸發兩次單擊事件,Treeview中會顯示相同的Node兩次,我不知怎樣作才可以即實現單擊,有實現扥放. |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
Plum_Yang
一般會員 發表:16 回覆:16 積分:6 註冊:2003-08-15 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
Plum_Yang
一般會員 發表:16 回覆:16 積分:6 註冊:2003-08-15 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |