【问题标题】:Make Inno Setup WizardForm moveable if titlebar is disabled如果标题栏被禁用,使 Inno Setup WizardForm 可移动
【发布时间】:2012-12-09 21:44:01
【问题描述】:

我想制作一个具有自定义外观的安装程序,并通过将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;

【问题讨论】:

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


    【解决方案1】:

    没有。无法处理消息或更改控件的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;
    

    【讨论】:

    • 这不是完全不可能的,但它需要外部 DLL 的帮助来子类化 Inno 主窗口。这就是疯狂和/或斯巴达。
    • @Miral,是的,这就是为什么我以 没有一些外部库 结束这篇文章 :-)
    • 哦,是的,我忘了提到我正在使用 restools.hanzify.org 上提供的高级编译器,它能够处理鼠标按下事件以及标准编译器缺乏的许多其他功能.它包含一个显示所有支持类的 txt 文件。你可以在这里得到它:restools.hanzify.org/article.asp?id=89
    • 那么你最终放弃了吗?有没有办法移动Form?
    • 在我上次测试之后,是的,我放弃了,因为此时无法执行此操作,因为您的向导表单拖动移动最重要的类,TNewNotebookPage 没有没有从该库发布OnMouseDown 事件。因此,您将无法拖动,简单地说,每个页面的灰色区域。由于它们包含活动组件,因此您不能禁用它们的父级进行点击。此时可以处理大部分静态控件(标签、图像、进度条等),但放置它们的页面则不行。
    【解决方案2】:

    我正在使用最新知识更新此问题以供将来参考。

    此功能(拖动无边框安装程序窗口)现在可以在 Inno Setup 中使用,但它是 Inno Setup 扩展的 Graphical Installer 的一部分。

    查看网站http://www.graphical-installer.com了解详情。

    注意:图形安装程序是 Inno Setup 和 NSIS 的商业扩展,它提供了新功能并可以创建皮肤安装程序。我是这个扩展的开发者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多