标签: pascalscript

使用Pascal Script和SynEdit创建IDE

我正在使用RemObjects的PascalScript(优秀)和SynEdit编辑器创建一个内置的脚本引擎.它几乎完成了使用PascalScript附带的IDE示例和SynEdit中的IDE示例 - 但是 - 我无法看到如何询问PascalScript编号的源代码行是否是"可执行的".(然后我可以用它来用'Delphi蓝点'标记SynEdit排水沟).我想我可能不得不对ROPS输出进行反汇编?

这里有PascalScript专家吗?谢谢.布莱恩.

ide delphi scripting pascalscript synedit

9
推荐指数
1
解决办法
2973
查看次数

如何在Inno Setup Pascal脚本中检查对象是否为NULL?

我正在使用Inno setup studio编写一个pascal函数,它检查对象是否为null并执行某些操作

到目前为止我有:

XMLDocument.setProperty('SelectionLanguage', 'XPath');
XMLNode := XMLDocument.selectSingleNode(APath);
if (XMLNode=Null) then
begin
//do stuff
End
Else
//do other stuff
End
Run Code Online (Sandbox Code Playgroud)

但我一直在收到invalid variant operation错误.

如何在Inno Setup Pascal脚本代码中检查对象是否为空?

inno-setup pascalscript

9
推荐指数
1
解决办法
7051
查看次数

如何在InnoSetup向导页面中读取和设置复选框的值?

我已经在InnoSetup脚本的"其他任务"页面中添加了一个复选框

[Tasks]
Name: "StartMenuEntry" ; Description: "Start my app when Windows starts" ; GroupDescription: "Windows Startup"; MinVersion: 4,4; 
Run Code Online (Sandbox Code Playgroud)

我希望在wpSelectTasks页面显示时初始化此复选框,并在Next单击按钮时读取值.我无法弄清楚如何访问复选框`checked'值.

function NextButtonClick(CurPageID: Integer): Boolean;

var
  SelectTasksPage : TWizardPage ;
  StartupCheckbox : TCheckbox ;

begin
Result := true ;
case CurPageID of

    wpSelectTasks :
        begin
        SelectTasksPage := PageFromID (wpSelectTasks) ;
        StartupCheckbox := TCheckbox (SelectTasksPage... { <== what goes here??? }
        StartupCheckboxState := StartupCheckbox.Checked ;
        end ;
    end ;    
end ;     
Run Code Online (Sandbox Code Playgroud)

checkbox inno-setup pascalscript

8
推荐指数
1
解决办法
1万
查看次数

如何在安装期间为可选文件添加CheckBox?(innosetup)

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

我想以这种方式在复选框上绑定"FILE3.EXE":如果选中复选框,则复制DestDir中的文件(FILE3.EXE),否则如果取消选中复选框,则在安装期间跳过文件(FILE3.EXE).

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

[Files]
Source: FILE1.EXE; DestDir: {app};
Source: FILE2.EXE; DestDir: {app};
Source: FILE3.EXE; DestDir: {app}; //OPTIONAL
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript

8
推荐指数
2
解决办法
2万
查看次数

在RemObjects Pascal脚本(Delphi)中加载预编译的脚本

我试图在运行时在Delphi中加载预编译的RemObjects Pascal脚本.但是,当我尝试加载时,Delphi除了"无法导入VALUE_TEAMCODE". Value_TeamCode是我已经在Pascal脚本中注册的Delphi应用程序中的一个函数.

这就是我在做的事情.下面是粗略的伪代码 - 实际代码分为多个文件.此外,SetCompiled当需要运行脚本时,下面的调用会在应用程序中发生.

关于代码的注意事项: FPascalScript是aTPSScriptDebugger

...

//Register custom functions with Pascal Script
FuncsRegister;  

//Load script
FPascalScript.Script.AddStrings(AContent);

//Compile script
FPascalScript.Compile;

//Get compiled script
FPascalScript.GetCompiled(sCompiledScript)

//Try and set script back in - ERROR Here 'Cannot Import VALUE_TEAMCODE'
FPascalScript.PascalScript.Debugger.SetCompiled(sCompiledScript);

...
Run Code Online (Sandbox Code Playgroud)

也许我错了.我不确定是否可以加载预编译的脚本.

我在RemObjects WebSite Wiki上搜索,但删除了Pascal脚本帮助.我还在StackOverflow上搜索了各种主题,但似乎没有与此问题相关.

再说一遍.我已经在运行时编译和执行脚本而没有任何问题.出于性能原因,我需要预编译.

任何帮助赞赏.

更新:

目前的解决方法是在我的系统中为每个脚本配备一个脚本引擎.然后,这些引擎在预编译后保留在内存中.这将删除每个脚本编译开销30毫秒.它也使用了更多的内存但不足以成为一个问题.

我仍然宁愿只使用一个脚本引擎.(因此需要加载预编译的脚本)

delphi pascal pascalscript

8
推荐指数
1
解决办法
1249
查看次数

如何在Inno Setup中找到用户选择的安装路径?

我需要获取用户选择安装我的应用程序的路径.

如果我设置CreateAppDir=yes并设置了一个DefaultDirName=C:\MyApp\用户可以将其更改为其他目录.完成此操作后,我需要知道他们在下一个安装向导步骤中选择了哪个目录.我怎样才能获得这个价值?

inno-setup pascalscript

8
推荐指数
1
解决办法
4483
查看次数

Inno Setup:如何操作Run部分的进度条?

与此问题类似:
如何在Inno Setup安装脚本的[Run]部分设置进度条值?

当Inno Setup进入该[Run]部分时,进度条显示为100%并停在此位置.

我在本Run节中安装了许多文件,我希望重新启动进度条并控制它,因为它会安装每个程序.

状态消息很容易改变(StatusMsg),但我失去了一些进展.你能帮帮我吗?

例:

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""msxml.msi"" /quiet"; \
    StatusMsg: "MSXML..."; Flags: runascurrentuser
Filename: "msiexec.exe"; Parameters: "/i ""capicom_dc_sdk.msi"" /quiet"; \
    StatusMsg: "CAPICOM..."; Flags: runascurrentuser
Run Code Online (Sandbox Code Playgroud)

由于我想在安装过程中控制进度条,我不知道该怎么做.我想也许在使用BeforeInstall参数,创建一个代码,通过执行类似WizardForm.ProgressGauge.Position = 0;和在AfterInstall参数中相反的方式将进度条设置为0 WizardForm.ProgressGauge.Position = 100;,但是在安装过程中如何更改?

谢谢.

installer inno-setup pascalscript progress-bar

8
推荐指数
1
解决办法
4848
查看次数

使用Inno Setup将Boolean转换为String

在Inno Setup Pascal脚本中将布尔值转换为String的最简单方法是什么?应该完全隐含的这个微不足道的任务似乎需要一个完整的if/ else构造.

function IsDowngradeUninstall: Boolean;
begin
    Result := IsCommandLineParamSet('downgrade');
    MsgBox('IsDowngradeUninstall = ' + Result, mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为"类型不匹配".IntToStr不接受Boolean.BoolToStr不存在.

inno-setup pascalscript

8
推荐指数
2
解决办法
7282
查看次数

Inno Setup 在自定义页面上放置图像/控件

我正在尝试在自定义页面上显示图像 我可以让自定义页面显示或在预定义页面上显示图像,但不能在自定义页面上显示。

我认为问题在于Parent := CustomPage.ID;.

Parent := WizardForm.SelectTasksPage; 虽然有效。

如何正确地做到这一点?

procedure ImageOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('', 'http://test.com', '', '', SW_SHOW, ewNoWait, ErrorCode);
end;

var
  CustomPage: TWizardPage;
  BtnImage: TBitmapImage;

procedure InitializeWizard;
begin
  CustomPage := CreateCustomPage(wpLicense, 'Heading', 'Sub heading.');

  ExtractTemporaryFile('image.bmp');

  BtnImage := TBitmapImage.Create(WizardForm);
  with BtnImage do
  begin
    Parent := CustomPage.ID;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\image.bmp');
    AutoSize := True;
    Left := 90;
    Top := WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height - Height - 8;
    Cursor := crHand;
    OnClick := @ImageOnClick;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript

8
推荐指数
1
解决办法
2482
查看次数

如何将interfaced对象传递给Pascal Script函数调用?

德尔福部分:

我有一个关于事件的类,从那个事件我需要调用一个将接口对象传递给它的过程.它在Delphi中工作正常,但我在Pascal脚本中声明它有问题.

在后台 - IGPGraphics接口是一部分Delphi GDI+ library而没有方法定义如下:

type
  IGdiplusBase = interface
  ['{24A5D3F5-4A9B-42A2-9F60-20825E2740F5}']
  IGPGraphics = interface(IGdiPlusBase)
  ['{57F85BA4-CB01-4466-8441-948D03588F54}']
Run Code Online (Sandbox Code Playgroud)

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

type
  TRenderEvent = procedure(Sender: TObject; const GPGraphics: IGPGraphics) of object;
  TRenderClass = class(TGraphicControl)
  private
    FOnRender: TRenderEvent;
  public
    property OnRender: TRenderEvent read FOnRender write FOnRender;
  end;

// when the TRenderClass object instance fires its OnRender event I want to call 
// the RenderObject procedure passing the IGPGraphics interfaced object to it; I
// hope I'm doing it right, I'm just a …
Run Code Online (Sandbox Code Playgroud)

delphi inno-setup delphi-2009 remobjects pascalscript

7
推荐指数
1
解决办法
1543
查看次数