Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 在CreateInputQueryPage创建的页面上的Inno设置中进行多行编辑_Installation_Inno Setup_Pascalscript - Fatal编程技术网

Installation 在CreateInputQueryPage创建的页面上的Inno设置中进行多行编辑

Installation 在CreateInputQueryPage创建的页面上的Inno设置中进行多行编辑,installation,inno-setup,pascalscript,Installation,Inno Setup,Pascalscript,默认情况下,在Inno Setup中将TEdit添加到页面时,高度为一行 如何增加编辑的高度 这是ISS文件的相关部分 ContractConfigPage:=CreateInputQueryPage(ServerConfigPage.ID, “以JSON格式映射合同”,“请输入要以JSON格式使用的映射合同”,以及“”; ContractConfigPage.Add('JSON',False); ContractConfigPage.编辑[0]。高度:=100;{没有任何效果} 编辑:我现在

默认情况下,在Inno Setup中将
TEdit
添加到页面时,高度为一行

如何增加编辑的高度

这是ISS文件的相关部分

ContractConfigPage:=CreateInputQueryPage(ServerConfigPage.ID,
“以JSON格式映射合同”,“请输入要以JSON格式使用的映射合同”,以及“”;
ContractConfigPage.Add('JSON',False);
ContractConfigPage.编辑[0]。高度:=100;{没有任何效果}
编辑:我现在可以有一个更大的编辑,但我不能有多行

ContractConfigPage:=CreateInputQueryPage(ServerConfigPage.ID,
“以JSON格式映射合同”,“请输入要以JSON格式使用的映射合同”,以及“”;
ContractConfigPage.Add('JSON',False);
ContractConfigPage.Edits[0]。自动调整大小:=False;
ContractConfigPage.编辑[0]。高度:=100;
ContractConfigPage。编辑[0]。宽度:=100;
{现在编辑更大,但我仍然不能有多行}

您必须用
TNewMemo
替换
TPasswordEdit

var
JsonMemo:TNewMemo;
过程初始化Wizard();
变量
合同配置页面:TInputQueryWizardPage;
JsonIndex:整数;
JsonEdit:TCustomEdit;
开始
{创建新页面}
ContractConfigPage:=CreateInputQueryPage(wpWelcome,
“以JSON格式映射合同”,“请输入要以JSON格式使用的映射合同”,以及“”;
{添加TPasswordEdit。我们使用它只是为了让Inno安装程序创建提示标签和}
{要计算编辑控件的正确位置}
JsonIndex:=ContractConfigPage.Add('JSON',False);
JsonEdit:=ContractConfigPage.Edits[JsonIndex];
{在同一父控件上创建TNewMemo(多行编辑)}
{与原始单行TPasswordEdit相同的位置(高度除外)}
JsonMemo:=TNewMemo.Create(WizardForm);
JsonMemo.Parent:=JsonEdit.Parent;
SetBounds(JsonEdit.Left、JsonEdit.Top、JsonEdit.Width、ScaleY(100));
{隐藏原始单行编辑}
JsonEdit.Visible:=False;
{将标签链接到新编辑}
{(只有在标签上有键盘加速器时才有实际效果)}
ContractConfigPage.PromptLabels[JsonIndex].FocusControl:=JsonMemo;
结束;

现在,您不能使用
ContractConfigPage.Edits
访问
TNewMemo
及其值(它引用原始的[hidden]
TPasswordEdit
)。您必须使用全局
JsonMemo
变量



当然,您可以使用
CreateCustomPage
从一个干净的页面开始,完全自己创建页面。这可能是一个更干净的解决方案,但更费劲。

以下是我最终根据需要使用的代码:

var
ContractConfigPage: TWizardPage;
ContractMemo: TNewMemo;
然后,在初始值中:

ContractConfigPage := CreateCustomPage(ServerConfigPage.ID,
  'Map contract as JSON', 'Please enter the map contract to use in JSON format WITHOUT DOUBLE QUOTES');    
ContractMemo := TNewMemo.Create(WizardForm);
ContractMemo.Parent := ContractConfigPage.Surface;
ContractMemo.SetBounds(0, 0, 410, 210);
ContractMemo.ScrollBars := ssBoth;
ContractMemo.WordWrap := False;
ContractMemo.Text := '{'+#13#10+
'  name:''map'''+#13#10+
'}';

请不要在JSON中使用“”而不是“因为该值将转换为xml格式,因此更易于阅读:)

该控件缺少使编辑控件多行的
ES\u MULTILINE
样式。不幸的是,如果不重新创建控件,则无法将此样式添加到控件中。您甚至不能用
TNewMemo
one替换控件,因为Inno Setup在处理输入页面项目时会在内部将类型转换为
TPasswordEdit
类。所以剩下的就是失去这个项目,自己创建和处理一个
TNewMemo
控件。“剩下的就是失去这个项目,自己创建和处理一个TNewMemo控件。”=>你能解释一下你的意思吗,我不明白下面Martin的答案。感谢您的帮助,我已将您的答案标记为正确,因为这对我帮助很大,但我将提供一个干净的页面解决方案。您最好将备忘录宽度与
ContractConfigPage.ClientWidth
关联,并使用
ScaleY
作为高度。这是为了在高DPI/大字体上正确缩放版面。