问题标签 [pascalscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1872 浏览

delphi - 如何将接口对象传递给 Pascal 脚本函数调用?

德尔福部分:

我有一个带有该事件的类,并且从该事件中我需要调用一个将接口对象传递给它的过程。它在 Delphi 中运行良好,但我在 Pascal 脚本中声明它时遇到问题。

到后台 -IGPGraphics接口是其中的一部分,Delphi GDI+ library并且没有方法定义如下:

以下只是我需要在 Pascal 脚本中执行的简化 Delphi 伪代码:

Pascal 脚本编译部分:

我的目标是让带有事件的类在 Pascal 脚本中可用,并且需要将该接口对象传递给该过程,就像上面一样,所以我首先尝试在编译时声明这个(但我什至不确定是否这是这样做的正确方法):

Pascal 脚本运行时部分:

我绝对迷失的地方是运行时部分。我不知道如何从调用堆栈中获取接口对象并将其传递给我的 RenderObject 过程:

问题是:

谁能建议我如何为这种情况正确定义编译和运行时部分,或者通过某种方式传递接口对象来纠正我?

PS 对那个 Inno-Setup 标签感到抱歉,但也许那里有人试图以这种方式自定义 InnoSetup。

非常感谢!

0 投票
1 回答
10723 浏览

constants - 如何将 Pascal Inno Setup ExpandConstant 与字符串变量一起使用?

对于安装程序,我需要创建文件夹链接。

为此,我使用“[Dirs]”部分创建目标文件夹。没问题。

然后,在“[代码]”部分,使用函数“CurStepChanged(ssPostInstall)”,我读取了一个临时安装文件,以获取要创建的文件夹链接列表。文件的每一行都包含一个目标文件夹路径名和一个链接路径名... 使用 Inno Setup 常量。每个值都被读取并存储为“字符串”变量。

当我将这些字符串变量传递给“ExpandConstant(lLinkTarg)”时,任何常量名称都会出现内部运行时错误。

如果我将字符串内容复制粘贴到 'ExpandConstant('{#gRepNasSvg}\UT{code:getProjetc}\Docs')' 调用,那么它可以工作......

关于我做错了什么的任何提示?

提前致谢。L.

有些东西我已经忘记了。

链接描述变量的格式为 '{#gRepNasSvg}\UT{code:getProjetc}\Docs'...

0 投票
2 回答
1951 浏览

inno-setup - Innoscript - 获取当前用户个人资料信息

我正在尝试使用 innoscript 创建一个应用程序。我需要在 HKLM 中创建/编辑注册表信息值。因此我需要管理员权限来安装应用程序。

但是,如果非管理员用户尝试安装应用程序,innoscript 需要管理员用户密码,一旦他们输入管理员用户密码,每当我在安装脚本(比如 HKCU)中查询注册表时,它都会从管理员用户那里检索信息。但我想从当前登录的用户那里获取信息。结果,程序安装在管理员用户位置而不是当前登录用户帐户下。

当应用程序以管理员身份运行或提示管理员用户启动时,有没有办法从 innoscript 获取当前登录用户用户和用户应用程序数据位置。

等待你的更新。

谢谢,

0 投票
1 回答
1940 浏览

dll - 如何在 Inno Setup 的安装和卸载时使用具有依赖关系的 DLL?

卸载应用程序时,我想在我的 .iss 中导入两个 dll。我找不到办法做到这一点。

adcore.dll我也想在程序中导入Uninstalled。它失败了,如下所示;

这没用。

Installed()并且Uninstalled()在 中StatisticInstallInfo.dll,这取决于adcore.dll

0 投票
1 回答
899 浏览

decimal - 如何在 Inno Setup 中定义 Single-type 变量中的小数位数?

我需要计算我的设置中所有组件的总大小。由于一些自定义代码,我不能为此使用 Inno Setup 的内部功能。

问题是组件共享大量文件。所以我为每个组件定义了一个字符串,其中包含他们使用的文件的变量。然后,我将这些字符串添加到单个字符串中,如果在该字符串中找到某个变量,则将文件的大小(以字节为单位)添加到 type 的变量“size”中Single。最后“大小”显示安装需要多少空间。

实际上这很好用,但我想在下一页显示以 GB 为单位的大小。但是该函数FloatToStr在小数点后添加了很多数字,而我只想有两个。

这是脚本(问题出现在最后几行):

如您所见,我尝试了几件事来摆脱数字。问题是 中的FloatToStr函数MsgBox,它会自动添加所有数字。如果我选择Integer“大小”的类型,它仍然显示长数字,但我不能使用IntegerIntToStrMsgBox什么可以解决问题),因为这里处理的数字太大,我想在点后有两位小数。

我也尝试将Format函数放入,MsgBox但我也得到了“类型不匹配”错误。

FloatToStrFInno Setup 不支持。

预先使用转换“大小”FloatToStr并截断它也不起作用,因为编译器会检查“大小”声明的类型并坚持在后面FloatToStr使用MsgBox

我不知道如何将这个数字四舍五入。也许一些不同的方法会有所帮助?

我期待着您的回答!

0 投票
4 回答
23996 浏览

inno-setup - 如何在 Inno Setup 中安装期间为可选文件添加复选框?

我正在尝试在我的自定义页面中制作一个自定义复选框(因为它是一个单页安装程序),只需要一个没有对话框或任何东西的复选框,我试图编译的安装程序非常线性和简单。

我想以FILE3.EXE这种方式绑定复选框:如果选中复选框,则将文件 ( FILE3.EXE) 复制到 中DestDir,否则如果未选中复选框,则FILE3.EXE在安装过程中跳过文件 ()。

这是我使用的代码,显然复选框代码丢失了,因为我无法做到这一点

0 投票
2 回答
1281 浏览

inno-setup - Innosetup - 识别标准用户的管理员用户和 dll 注册

在我的 innosetup 应用程序安装期间,我正在注册一个 dll(用于 Windows 右键单击​​上下文菜单和图标覆盖,类似于 dropbox/tortoise cvs)并执行一些其他操作。到目前为止,我只为管理员用户安装应用程序。该dll会在HKCR、HKLM中写入信息。现在,我也计划支持其他非管理员用户(标准用户)的安装。

我尝试了以下几件事,

  • 将所需的权限从管理员更改为无。
  • 将所有注册表更新从 HKLM 更改为 HKCU。

但是,如果我尝试安装应用程序,由于无法在 HKCR 上写入,dll 注册失败。所以,我打算只为管理员用户注册 dll。对于其他普通用户,计划跳过 dll 注册并做其他事情。但我不知道,如何识别当前用户是管理员用户。任何人都可以让我知道以下事情,

  • 我们能否确定当前登录用户是否是管理员/高级用户?
  • 我们可以在没有管理员权限的情况下注册 dll(编写 HKCR)吗?

感谢您的回复。

0 投票
2 回答
1531 浏览

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

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

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

这可以在 Inno Setup 中完成吗?

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

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

0 投票
2 回答
1204 浏览

inno-setup - 如何在自定义页面处理后强制调用 Check 谓词

Check在组件部分使用参数来检查用户是否选中了某个单选按钮。

在向用户显示自定义页面之前调用我的谓词,并且我总是返回默认值。

如何从自定义页面获取用户输入以影响最终组件选择?

0 投票
2 回答
1718 浏览

inno-setup - Inno Setup:如何在 64 位操作系统中重命名 system32 文件

System32 和 syswow64 文件夹存在于 64 位操作系统的 C:\Windows 下。

xyz.sys我在文件夹下有一个文件System32\drivers。我尝试重命名xyz.sysxyz1.sys使用以下代码:

但在 64 位操作系统中,innosetup 是{sys}='Driveletter:\Windows\syswow64'默认设置。

即使我尝试下面的代码来重命名xyz.sys文件System32\drivers

但上面的代码也不起作用,谁能建议我如何在 64 位操作系统中重命名 system32 文件。

我正在使用windows2008R2。