如何实现类似于Windows任务栏在拖放时,自动移动到屏幕最近的边上的功能? 使用API,我的主页有VB的程序:http://www.applevb.com/sourcecode/dockbarapp.zip 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 vb中我会。delphi我刚上手帮不了你了。 一点提示:首先要知道屏幕的边的位置:winapi GetWorkArea接下来可以在OnMove事件中或者用个定时器判断离那条边近了。 判断窗体在屏幕的坐标form1.align:=albottom; alleft; alright; altop; 给你举个例子:拦截WM_MOVE消息type TForm1 = class(TForm) private procedure WMMOVE(var Msg: TMessage); message WM_MOVE; end;var Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.WMMOVE(var Msg: TMessage);begin Inherited; //在这里扩充你的程序 if (Left < 10) and (Top < 10) and (Left <> 0) and (Top <> 0) then // 设定移动到左上角 10 点范围内时贴到边上去 begin Left := 0; Top := 0; Msg.Result := 0; end;end;end. to javis(蓝枫):这种方法确实可行,但把窗体向外拖时闪烁的厉害。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1; MPos:TPoint;implementation{$R *.DFM}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin MPos.X := X;MPos.Y := Y;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i:integer;beginif ssLeft in Shift then begin i:=50; if (Form1.Left - (MPos.X-X))>i then Form1.Left := Form1.Left - (MPos.X-X) else Form1.Left :=0; if (Form1.Top - (MPos.Y-Y))>i then Form1.Top := Form1.Top - (MPos.Y-Y) else Form1.Top := 0; end;end;end. 请问ReadString读INI文件问题?怎么读取TMemo.Lines的类型 请教个SQL问题 enlib的dbgrid 问题 急~~~~~~ 调用TOleContainer,如何直接显示word界面 关于BussinessSkinForm 的问题 高手帮忙!!!连接数据库问题 用BDE连接加密的PARADOX数据库,已经去处LOGINprompt,但是打开表时,还是提示输入密码?具体设置如下?? 如何用delphi 6调用水晶报表9的报表 如何在DELPHI中清空数据库中表中的记录 TChromium使用问题 Delphi5 + MSSQL7 中的计数问题? Delphi奇怪问题求助?
一点提示:
首先要知道屏幕的边的位置:winapi GetWorkArea
接下来可以在OnMove事件中或者用个定时器判断离那条边近了。
form1.align:=albottom;
alleft;
alright;
altop;
TForm1 = class(TForm)
private
procedure WMMOVE(var Msg: TMessage); message WM_MOVE;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.WMMOVE(var Msg: TMessage);
begin
Inherited;
//在这里扩充你的程序
if (Left < 10) and (Top < 10) and
(Left <> 0) and (Top <> 0) then // 设定移动到左上角 10 点范围内时贴到边上去
begin
Left := 0;
Top := 0;
Msg.Result := 0;
end;
end;
end.
这种方法确实可行,但把窗体向外拖时闪烁的厉害。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
MPos:TPoint;
implementation{$R *.DFM}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MPos.X := X;
MPos.Y := Y;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var i:integer;
begin
if ssLeft in Shift then
begin
i:=50;
if (Form1.Left - (MPos.X-X))>i then
Form1.Left := Form1.Left - (MPos.X-X)
else Form1.Left :=0; if (Form1.Top - (MPos.Y-Y))>i then
Form1.Top := Form1.Top - (MPos.Y-Y)
else Form1.Top := 0; end;end;end.