3

我想制作一个具有自定义外观的安装程序,并通过BorderStylebsNone.

现在我不能再移动窗口了。我环顾四周,找到了德尔福的解决方案:http:
//www.chami.com/tips/delphi/010397D.html

这可以在 Inno Setup 中完成吗?

我已经WM_NCHITTEST在 MSDN 上查找了这个东西,但我不知道我是否以及如何使它工作。

编辑:在环顾四周并使用高级编译器高级编译器编译它之后,我想出了这个,但它不起作用。它可以编译,但是当我在窗口内单击时,我无法拖动它。

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;
4

2 回答 2

4

不,没有办法处理消息或更改WndProcfor 控件。有一点机会像 in 那样实现未记录的拖动移动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;
于 2012-12-09T21:51:28.727 回答
0

我正在用最新知识更新这个问题,以供将来参考。

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

有关详细信息,请查看网站http://www.graphical-installer.com

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

于 2018-11-22T11:00:05.563 回答