我想通过将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;
答案 0 :(得分:4)
没有。没有办法处理消息或改变控件的WndProc
。有一点机会像this post
那样实现未记录的拖动移动,但不幸的是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;
答案 1 :(得分:0)
我正在用最新知识更新此问题,以供将来参考。
此功能(拖动无边界安装程序窗口)现在可以在Inno Setup中使用,但是它是 Graphic Installer (属于Inno Setup扩展程序)的一部分。
查看网站http://www.graphical-installer.com以获得详细信息。
注意:图形安装程序是Inno Setup和NSIS的商业扩展,提供了新功能并允许创建外观化的安装程序。我是此扩展程序的开发人员。