拖曳panel及shape????? |
尚未結案
|
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
各位大大
小弟日前將flyup給的code(讓panel可以用滑鼠拖曳)修改一下,將panel改成shape..照道理說結果應該一樣,但奇怪的是,如果我用滑鼠右鍵拖曳,則結果同用左鍵拖曳panel,反之,用左鍵拖曳shape的話,會出現奇怪的現象....下面是code..請大大指點
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, CheckLst, ToolWin, ActnMan, ActnCtrls, ComCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Shape1: TShape; procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; XX,YY:integer; Vmouse:boolean; implementation {$R *.dfm} procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin setcapture(handle); XX:=X; YY:=Y; Vmouse:=true; end; procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin setcapture(handle); XX:=X; YY:=Y; Vmouse:=true; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Vmouse=true then begin {這邊切換一下可比較兩種結果} // panel1.Left:=X-XX; // panel1.Top:=Y-YY; shape1.Left:=X-XX; shape1.top:=Y-YY; end; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Vmouse=true then Vmouse:=false; releasecapture; end; end.
------
星期一,二...無窮迴圈@@ |
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
hi..pgdennis..
我按照你的Code做了一點修正,已經OK了..如下
TYR TRY SEE..
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
type TForm1 = class(TForm) Panel1: TPanel; Shape1: TShape; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure mymouseMove(sender:tobject;Shift: TShiftState; X, Y: Integer); procedure myMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; var Form1: TForm1; xx,yy:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to self.Controlcount -1 do begin //借一下panel的onmousemove tpanel(self.Controls[i]).OnMouseMove:=mymousemove; tpanel(self.Controls[i]).OnMousedown:=mymousedown; end; end; procedure TForm1.mymouseMove(sender:tobject;Shift: TShiftState; X, Y: Integer); var ct:tcontrol; begin ct:=getcapturecontrol; if ct =nil then exit; ct.left:=ct.left+x-xx; ct.top:=ct.top+y-yy; end; procedure TForm1.myMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ctl:tcontrol; begin ctl:=tcontrol(sender); setcapturecontrol(ctl); xx:=x; yy:=y; end; end.能逼出這種程式,實在痛快, 雖然寫得也不怎麼好,可是拿來動動腦也很好玩.. Hi....Ha.... |
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
修正 必須在mouseup的時候release capture 不然button類的會吃掉focus焦點
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to self.Controlcount -1 do begin //借一下panel的onmousemove tpanel(self.Controls[i]).OnMouseMove:=mymousemove; tpanel(self.Controls[i]).OnMousedown:=mymousedown; tpanel(self.Controls[i]).OnMouseup:=mymouseup; end; end; procedure TForm1.myMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin releasecapture; end; |
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
好說好說...
大家都是好兄弟,分數不會計較的啦, 腦力激盪也很好玩為平淡的生活製造一些樂趣... 這個問題也啟發不少靈感.. 我有作一個範例程式, 有興趣可以參考看看.. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28541
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |