论坛风格切换切换到宽版
  • 2007阅读
  • 4回复

请教老虎版主,页面ID怎么弄? [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-15
下面是自定义页面标题和安装目录选择两段代码整合的,都是页面ID问题,也不知道整合后代码是不是有问题,老虎版主帮忙看下:

; 代码:
#ifdef Unicode
#define A "W"
#else
#define A "A"
#endif

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: "D:\SomeDir\*"; DestDir: "{code:SpecialDir}"

[Code]
var
DataDirPage: TInputDirWizardPage;
DirSelected: String;

function SetWindowText(hWnd: Integer; lpString: String): Integer;
external 'SetWindowText{#A}@user32.dll stdcall';

procedure CreateInputDirWizardPages;
var
  Page: TInputDirWizardPage;
begin
DataDirPage := CreateInputDirPage(wpSelectDir,
  '选择数据存放目录', '您想将你的数据安装到何处?',
  '您想将你的PHP程序安装到何处?'+#13#10 +'请选择不同的位置,键入新的路径,或单击“浏览”现有的文件夹。点击“继续”进入下一步。 '+#13#10,
  False, '');
DataDirPage.Add('');
DataDirPage.Values[0] := 'D:\www';
end;

function SpecialDir(Param: String): String;
begin
  Result := DirSelected;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
result:= true;
if CurPageID = DataDirPage.ID then
DirSelected := DataDirPage.Values[0];
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = DataDirPage.ID then
  SetWindowText(StrToInt(ExpandConstant('{wizardhwnd}')), '这是自定义页面的标题')
else
  SetWindowText(StrToInt(ExpandConstant('{wizardhwnd}')), '这是原始的标题');
end;

就是想请教您,页面ID怎么设置,从昨天折腾到今天还是不知道怎么弄,一直报错?




请问怎么指定自定义页面的ID?


---------------------------->>
那你是怎样创建自定义页面的?
假如你创建的页面是 Page,用
Page := CreateCustomPage(......
那么页面的 ID 就是 Page.ID


上面这个好像是您以前回复的问题,但是用 Page.ID 会报错不能识别 “Page”

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-15
你定义了一个函数用来创建自定义页面,但是这个函数你从来没有调用它,也就是说实际上你还是没有创建自定义页面。通常在初始化安装向导时,你要调用一次你定义的那个创建自定义页面的函数:
procedure InitializeWizard();
begin
  CreateInputDirWizardPages;
end;

页面 ID 就是 xxx.ID,代码中有应用它。

另外,那个 Page 变量你从来没有用它,可以删除它。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2015-08-15
#ifdef Unicode
#define A "W"
#else
#define A "A"
#endif

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: "D:\SomeDir\*"; DestDir: "{code:SpecialDir}"

[Code]
var
DataDirPage: TInputDirWizardPage;
DirSelected: String;
OriginalTitel: String;

function SetWindowText(hWnd: Integer; lpString: String): Integer;
external 'SetWindowText{#A}@user32.dll stdcall';

procedure CreateInputDirWizardPages;
begin
DataDirPage := CreateInputDirPage(wpSelectDir,
  '选择数据存放目录', '您想将你的数据安装到何处?',
  '您想将你的PHP程序安装到何处?'+#13#10 +'请选择不同的位置,键入新的路径,或单击“浏览”现有的文件夹。点击“继续”进入下一步。 '+#13#10,
  False, '');
DataDirPage.Add('');
DataDirPage.Values[0] := 'D:\www';
end;

function SpecialDir(Param: String): String;
begin
  Result := DirSelected;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
result:= true;
if CurPageID = DataDirPage.ID then
DirSelected := DataDirPage.Values[0];
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = DataDirPage.ID then
  SetWindowText(StrToInt(ExpandConstant('{wizardhwnd}')), '这是自定义页面的标题')
else
  SetWindowText(StrToInt(ExpandConstant('{wizardhwnd}')), OriginalTitel);        //'这是原始的标题'
end;

procedure InitializeWizard();
begin
  CreateInputDirWizardPages;
  OriginalTitel:= WizardForm.Caption;
end;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2015-08-15
关于你说的 用 Page.ID 会报错的原因:
每个变量有它的作用范围。你把 Page 定义为局部变量,仅在它所在的函数范围里有效,如果你在其他地方调用它当然会出错。而  DataDirPage 是全局变量,所以你可以在整个代码范围里调用它。
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 4 发表于: 2015-08-15
回 1楼(gnatix) 的帖子
gnatix:你定义了一个函数用来创建自定义页面,但是这个函数你从来没有调用它,也就是说实际上你还是没有创建自定义页面。通常在初始化安装向导时,你要调用一次你定义的那个创建自定义页面的函 .. (2015-08-15 21:58) 

谢谢老虎版主讲解,现在有点明白了