拖动Dialog是能随鼠标移动怎么实现?(50分)

  • 主题发起人 主题发起人 wukw
  • 开始时间 开始时间
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
拖动Dialog是能随鼠标移动怎么实现?
请您给出几句的源代码,谢谢!
 
老大,什么意思,说明白点。
 
我简单说个例子,要源程序,你发EMAIL找我。yuleibo@tytxy.com
在MOUSE的点击事件里面记下MOUSE当前的位置,在MOUSE移动的事件里面
判断位置变化,并调用函数改变窗体的位置。
在MOUSE抬起来的事件里面释放过程和变量。一切回到现状
 
就是这个意思。
也就是,用鼠标按在在Dialog上任意一点不放开,然后拖动整个Dialog,是怎样实现的?
麻烦楼上把源代码发给小弟,多谢了!!!
 
wukw@263.net.cn
 
吴兄弟,以前有个托动图片的,你假如有用就拿去看:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AppEvnts, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
ApplicationEvents1: TApplicationEvents;
procedure Image1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure Image1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
x,y,nx,ny,ox,ol,ot,oy:integer;
p:tpoint;
d:boolean;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
d:=true;
getcursorpos(p);
ox:=p.x;
oy:=p.y;
ol:=image1.left;
ot:=image1.Top;
end;

procedure TForm1.Image1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
d:=false;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if d then
begin
getcursorpos(p);
x:=p.x-ox;
y:=p.y-oy;
image1.left:=ol+x;
image1.top:=ot+y;
end;
end;
end.
 
在窗口上点住就可以拖着窗体移动。其他如TIMAGE一样道理
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button=Mbleft then
begin
ReleaseCapture;
Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);
end;
end;
 
好。向上顶
 
对不起,再详细说一下,免得误人,我的这段程序拖动的始终都是Form。
而不是拖动窗口上的组件。代码的目的是让系统以为鼠标点击的是窗口的标题栏,
所以造成窗口移动的效果。
 
谢谢姜兄弟和呆兄弟。
姜兄弟的代码倒是很简单,可是image1.left:=ol+x;是很简单,但是程序本身这个窗口的位置移动,
那改用什么函数或者对象(如同image1)??
还有那个=rand(200,99)我试了,虽然怪,其实也不怪。大概是VBA程序启作用了。
我上过一天的VBA培训,什么都没听懂,就记住了Word可以做动态万年历,也是特别简单。
就是不知道,它的调用那个函数语句是否直接写在Word文档里,还是写在别的地方???
呆兄弟的代码更简单,可是有个问题请教,我不懂Delphi,要把它翻译成VC。
那么Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);是个什么函数??
msdn里我没找到这个函数。请指教,谢谢!!!
 
我的问题csdn上有人帮我解决了。多谢两位兄弟。
其实真的很简单,只是我不知道而已。
void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CDialog::OnLButtonDown(nFlags, point);
}
 
csdn的VC还是很不错的,非常火!
 
TO :wukw@263.net.cn
老大,这个我看不用消息编程就对了,不过我发现你留的EMAIL有误吧。我以前用263的
信箱,好象在后面没有。CN吧?呵。
 
后退
顶部