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

拖曳panel及shape?????

尚未結案
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-01 22:18:19 IP:61.59.xxx.xxx 未訂閱
各位大大  小弟日前將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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-11 08:40:25 IP:211.74.xxx.xxx 未訂閱
hi..pgdennis.. 我按照你的Code做了一點修正,已經OK了..如下 TYR TRY SEE..< class="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; VShape: boolean;//加入這個變數,判斷是否由Shape拖曳 implementation {$R *.dfm} procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MouseCapture := True;//加入這一行 // setcapture(handle);//MARK XX := X; YY := Y; Vmouse := true; VShape := False; end; procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MouseCapture := True;//加入這一行 // setcapture(handle);//MARk XX := X; YY := Y; Vmouse := False; VShape := 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; end; if VShape = true then begin 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; if VShape = true then VShape := false; MouseCapture := False;//加入這一行 //releasecapture;//MARK end; end. <>< face="Verdana, Arial, Helvetica">引言: 各位大大 小弟日前將flyup給的code(讓panel可以用滑鼠拖曳)修改一下,將panel改成shape..照道理說結果應該一樣,但奇怪的是,如果我用滑鼠右鍵拖曳,則結果同用左鍵拖曳panel,反之,用左鍵拖曳shape的話,會出現奇怪的現象....下面是code..請大大指點
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-11 08:56:39 IP:218.16.xxx.xxx 未訂閱
想不只修改 capture 的用語便能解決,讚!
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-11 09:13:56 IP:210.243.xxx.xxx 未訂閱
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.... Fear is the path to the dark side. Fear leads to anger.Anger leads to hate.Hate leads to suffering....
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-11 09:22:59 IP:210.243.xxx.xxx 未訂閱
  修正      必須在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;    
Fear is the path to the dark side. Fear leads to anger.Anger leads to hate.Hate leads to suffering....
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-11 09:32:22 IP:211.74.xxx.xxx 未訂閱
hahalin...COOL...< >< >< >< >
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-11 10:02:59 IP:61.219.xxx.xxx 未訂閱
引言: hahalin...COOL...< >< >< >< >
謝謝chih兄 原來根本不用 > 也謝謝
------
星期一,二...無窮迴圈@@
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-11 10:16:30 IP:210.243.xxx.xxx 未訂閱
 好說好說...    大家都是好兄弟,分數不會計較的啦,     腦力激盪也很好玩為平淡的生活製造一些樂趣...     這個問題也啟發不少靈感..     我有作一個範例程式,     有興趣可以參考看看..     http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28541     Fear is the path to the dark side. Fear leads to anger.Anger leads to hate.Hate leads to suffering.... 發表人 - hahalin 於 2003/04/11 10:23:14
系統時間:2024-07-06 1:55:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!