上节文章已经简单的介绍了Inno Setup集成MySQL和JDK
Inno Setup实例教程之二:集成MySQL和JDK
这节主要是讲解一下自定义窗口控件,然后将输入的内容赋值到xml配置文件。
xml配置文件
在本地新建一个xml配置文件config.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config>
<from>
<project url="" port=""/>
<datasource name="" username="" password=""/>
</from>
</config>
这里面的url,port,name,username,password这几个属性的值都是空的
Inno Setup 的 Pascal 脚本
[Code]
var
myPage:TwizardPage;//定义窗口
ed1:TEdit;//username
ed2:TEdit;//密码
ed3:TEdit;//端口
Lbl1: TNewStaticText; //username
Lbl2: TNewStaticText; //密码
Lbl3: TNewStaticText; //端口
ErrorCode: Integer;
//定义校验方法,校验失败时,下一步按钮为空
procedure Key_Form_KeyChange(Sender: TObject);
begin
if((length(ed1.Text) <= 6)or(length(ed2.Text) <= 4)) then
WizardForm.NextButton.Enabled := True
else
WizardForm.NextButton.Enabled := False;
end;
//初始化引导 窗口
procedure InitializeWizard();
begin
myPage:=CreateCustomPage(wpWelcome, '项目基本信息', '请填写正确的数据库账号密码和不冲突的系统启动端口');
Lbl3 := TNewStaticText.Create(myPage);
Lbl3.Left := ScaleX(10);
Lbl3.Top := ScaleY(5);
Lbl3.Width := ScaleX(100);
Lbl3.Height := ScaleY(50);
Lbl3.Caption := '系统端口';
Lbl3.Parent := myPage.Surface;
ed3:=TEdit.Create(myPage);
ed3.Width:=ScaleX(100);
ed3.Left := ScaleY(10);
ed3.Top := ScaleY(25);
ed3.Text :='8003';
ed3.Parent:=myPage.Surface;
//ed1.OnChange := @Key_Form_KeyChange;//添加校验方法
Lbl1 := TNewStaticText.Create(myPage);
Lbl1.Left := ScaleX(10);
Lbl1.Top := ScaleY(80);
Lbl1.Width := ScaleX(100);
Lbl1.Height := ScaleY(50);
Lbl1.Caption := '数据库账号';
Lbl1.Parent := myPage.Surface;
ed1:=TEdit.Create(myPage);
ed1.Width:=ScaleX(100);
ed1.Left := ScaleY(10);
ed1.Top := ScaleY(100);
ed1.Text :='root';
ed1.Parent:=myPage.Surface;
//ed1.OnChange := @Key_Form_KeyChange;//添加校验方法
Lbl2 := TNewStaticText.Create(myPage);
Lbl2.Left := ScaleX(200);
Lbl2.Top := ScaleY(80);
Lbl2.Width := ScaleX(100);
Lbl2.Height := ScaleY(50);
Lbl2.Caption := '数据库密码';
Lbl2.Parent := myPage.Surface;
ed2:=TEdit.Create(myPage);
ed2.Width:=ScaleX(100);
ed2.Left := ScaleY(200);
ed2.Top := ScaleY(100);
ed2.Text :='root';
ed2.Parent:=myPage.Surface;
//ed2.OnChange := @Key_Form_KeyChange;//添加校验方法
end;
//添加步骤
procedure CurStepChanged(CurStep: TSetupStep);
var
fileName,tempStr:String;
svArray: TArrayOfString;
nLines,i:Integer;
begin
//if CurStep=ssinstall then
//安装前执行
if CurStep=ssPostinstall then
//复制文件后执行
begin
//开始修改文件
fileName := ExpandConstant('{app}\app\cluster\config.xml');
LoadStringsFromFile(fileName, svArray);
nLines := GetArrayLength(svArray);//读取文件
for i := 0 to nLines - 1 do
begin
tempStr := svArray[i];
//端口
if (1 = Pos(' <project url="" port=""/>', tempStr)) then//查找目标行
begin
svArray[i] := ExpandConstant(' <project url="{app}/" port="'+ed3.Text+'" />');//修改行
StringChangeEx(svArray[i], '\', '/', True);
end;
//账号密码
if (1 = Pos(' <datasource name="" username="" password=""/>', tempStr)) then//查找目标行
begin
svArray[i] := ExpandConstant(' <datasource name="" username="'+ed1.Text+'" password="'+ed2.Text+'"/>');//修改行
StringChangeEx(svArray[i], '\', '/', True);
end;
end;
SaveStringsToFile(fileName, svArray, false);
end;
if CurStep=ssDone then
//安装完成后执行
end;
描述
Pascal 脚本功能 (modern Delphi-like Pascal) 增加了许多新的功能定制你的安装程序和卸载程序,一些例子:
1.支持自定义条件的情况下的中断安装和卸载。
2.支持的安装程序运行时添加自定义向导页。
3.在安装前、安装期间、安装后从 Pascal脚本提取或调用 DLL 或其它文件。
4.支持当作任何普通常量的脚本化常量,从注册表读取,从 ini 读取和从命令行读取常量等。
5.支持运行时自定义条件下的类型、组件和/或任务的删除。 根据自定义条件支持有条件的 [Files] 、 [Registry] 、 [Run] 等条目安装。
6.几乎 Inno Setup 自身可以执行的许多支持函数来自 Pascal 脚本。
也可以使用一个完整的 run-time 调试器调试你的自定义 Pascal 脚本。
这样通过【code】段的自定义脚本代码,就可以实现自定义窗口控件,然后输入内容后,会自动修改xml配置文件,实现动态替换属性值的目的。
源码
下载直接可用,无需更改,一键执行
Inno Setup集成mysql和JDK,将jar包打包成exe