+ -
当前位置:首页 → 问答吧 → 拖动无标题窗口出现的问题

拖动无标题窗口出现的问题

时间:2011-11-10

来源:互联网

一个无标题的窗体,用了如下代码拖动窗体,但是窗体上的Image,SpeedButton的Click事件都不响应了,如何解决?
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (ssLeft in Shift) then
  begin
  ReleaseCapture;
  SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0);
  end;
end;

作者: odbc12345   发布时间: 2011-11-10

这样肯定都不响应啊.. 你点击的按钮,, 可是你在消息里面骗 windows 说你点击的是标题栏.


判断下 X Y 的值, 只能拖动上面.下面不给他

作者: warrially   发布时间: 2011-11-10

另外,,, 我的 FormMouseMove 和你的不一样.

你看看我的

我的是正常的 


Delphi(Pascal) code

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    SpeedButton1: TSpeedButton;
    Image1: TImage;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := 'Button Click';
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbLeft) then
  begin
    ReleaseCapture();
    Perform(WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
  end
  else
    self.Close;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  Caption := 'Image Click';
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Caption := 'SpeedButton Click';
end;

end.


作者: warrially   发布时间: 2011-11-10

public一个 bool 标记变量
一个位置x,位置y坐标

form mousedown
标记:=true;
位置x=x;
位置y=y;

form mouseup
标记:=false;

form mousemove
if 标记=true then
begin
通过位置x,y和当前x,y移动form
end;

作者: funxu   发布时间: 2011-11-10

早几天不是讨论过这问题嘛?搜索都懒得了?

作者: sailxia   发布时间: 2011-11-10