我想制作一个具有自定义外观的安装程序,并通过将 BorderStyle
设置为 bsNone
来禁用标题栏。
现在我无法再移动窗口了。我环顾四周,找到了 Delphi 的解决方案:
http://www.chami.com/tips/delphi/010397D.html
这可以在 Inno Setup 中完成吗?
我已经在 MSDN 上查找了 WM_NCHITTEST
内容,但我不知道是否以及如何才能完成这项工作。
编辑:环顾四周并使用 advanced compiler 进行编译后高级编译器我想出了这个,但它不起作用。它可以编译,但是当我在窗口内单击时,我无法拖动它。
procedure Dragg(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SendMessage(WizardForm.Handle, $F112, $F012, 0);
end;
procedure InitializeWizard();
begin
WizardForm.OnMouseDown := @Dragg;
end;
最佳答案
没有。无法处理消息或更改控件的 WndProc
。有一点机会来实现像this post
中那样的未记录的拖动 Action 。 ,但不幸的是 InnoSetup 没有为脚本发布发布鼠标按下事件,因此如果没有一些外部库,您就很不幸。
使用您提到的库和代码;您缺少 ReleaseCapture
函数调用。请改用此脚本代码(不要忘记,向导表单的唯一裸露部分位于左下角):
[Code]
function ReleaseCapture: BOOL;
external 'ReleaseCapture@user32 stdcall';
const
SC_DRAGMOVE = $F012;
WM_SYSCOMMAND = $0112;
procedure OnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
WizardForm.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
procedure InitializeWizard;
begin
WizardForm.OnMouseDown := @OnMouseDown;
end;
关于drag-and-drop - 如果标题栏被禁用,则使 Inno Setup WizardForm 可移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792168/