如果禁用标题栏,则使Inno Setup WizardForm可移动

时间:2012-12-09 21:44:01

标签: drag-and-drop window inno-setup draggable pascalscript

我想通过将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;

2 个答案:

答案 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的商业扩展,提供了新功能并允许创建外观化的安装程序。我是此扩展程序的开发人员。