DELPHI 拖动窗体
我写了一个无边框的窗体.想通过pnlTop实现拖动窗体,与双击时最大化的功能.
最佳的解决方案如下:
procedure TFMain.pnlTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(FMain.Handle, WM_SYSCOMMAND, $F011, 0);
end;
procedure TFMain.pnlTopDblClick(Sender: TObject);
begin
self.Top := 0;
self.Left := 0;
self.Width := screen.WorkAreaWidth; //屏幕宽度
self.Height := screen.WorkAreaHeight; //屏幕高度
end;
ReleaseCapture 函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。
WM_COMMAND & WM_SYSCOMMAND参考资料: https://blog.csdn.net/qq_16334327/article/details/81952256
踩过的坑:
我先声明了一个全局
var P:point;
然后:
procedure TFMain.pnlTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
P.X=X;
P.Y=Y;
end;
procedure TFMain.pnlTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if shift=[ssLeft] then
begin
self.left:=self.left + x - p.x;
self.top := self.top + y - p.y;
end;
end;
写到这里,程序还是没问题的.
但是后来想通过双击panel来实现窗体最大化就不行了.按下/弹起事件与双击事件有冲突,怎么都实现不了.最后是大佬指明了道路,感谢大佬!