我从互联网上找到了这样的代码,通过按住鼠标左键拖动无边框表单:
procedure TForm6.Image1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState;X,Y: Integer);
const
SC_DRAGMOVE = $F012;
begin
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
end;
字符串
它工作正常,但我需要拖动鼠标右键。为此必须更改哪个参数?
2条答案
按热度按时间hjzp0vay1#
How to move window by right mouse button using C++?有一个解决方案,可以自行处理拖动,而不是让Windows来做。要从MFC中预测这些工作,需要知道 Delphi 的Forms已经处理了什么,而不是过度调用WinApi函数。
一个主要问题是合并窗口的标题高度,这可能依赖于多个因素。在我的例子中,我使用了一个普通的窗口,它在Windows 7中没有任何主题(看起来像Windows 95)。没有标题、工具窗口、没有边框、窗口大小不能调整,需要调整
GetSystemMetrics()
的调用。我将两者合并:通过鼠标左键和鼠标右键拖动。虽然我鼓励在拖动结束时仍然显示一个潜在的上下文菜单(如Explorer does so for dragging files),因为它仍然是一个鼠标右键,每个用户都希望单击时出现一个弹出菜单。
我的例子也适用于两者:绑定到
TWinControl
或TForm
本身。字符串
请注意,启动拖动绑定到控件的
OnMouseDown
事件,但是处理和结束拖动必须绑定到窗体的事件:型
chhkpiq42#
这可以用另一种方式来完成。
在接口部分:
字符串
在实施部分:
型