gpt4 book ai didi

drag-and-drop - 如果标题栏被禁用,则使 Inno Setup WizardForm 可移动

转载 作者:行者123 更新时间:2023-12-02 00:25:18 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com