我正在创建一个设置,它涉及根据我在第3页中获得的值有条件地跳过页面。我在InitializeWizard()
中创建了所有可能的页面,在调试时我可以看到创建的所有页面。当我尝试跳过ShouldSkipPage
中的页面时,我无法按预期跳过。
在哪种情况下,页面无效或有任何方法可以检查日志或有关页面状态的信息。
P.S - 页面非常有效且可用,我只能跳过它。
下面给出了代码段......
[Code]
var
PageSQL2008SetupFile2: Integer;
PageSQL2008R2SetupFile2: Integer;
PageSQL2012SetupFile2: Integer;
PageSQL2014SetupFile2: Integer;
procedure InitializeWizard();
begin
MyModeTypical := false;
PageProductName := CreateInputQueryPage(wpSelectComponents,
'Settings',
'Product Name',
'Please specify the product name, then click Next.');
PageProductName.Add('Product Name:', False);
PageProductName.Values[0] := ProductName;
//SQL Server selection page
PageSQLServerSelection := CreateInputOptionPage(PageProductName.ID,
'SQL Server Selection', 'Please select the version of SQL Server you want to install.',
'',
True, False);
PageSQLServerSelection.Add('SQL 2008');
PageSQLServerSelection.Add('SQL 2008R2');
PageSQLServerSelection.Add('SQL 2012');
PageSQLServerSelection.Add('SQL 2014');
PageSQLServerSelection.Values[0] := False;
PageSQLServerSelection.Values[1] := False;
PageSQLServerSelection.Values[2] := False;
PageSQLServerSelection.Values[3] := False;
// Creating Setup pages for the 4 servers
PageSQL2008SetupFile2 := MSSQL2008SETUPDIR_CreatePage(PageSQLServerSelection.ID);
PageSQL2008R2SetupFile2 := MSSQL2008R2SETUPDIR_CreatePage(PageSQL2008SetupFile2);
PageSQL2012SetupFile2 := MSSQL2012SETUPDIR_CreatePage(PageSQL2008R2SetupFile2);
PageSQL2014SetupFile2 := MSSQL2014SETUPDIR_CreatePage(PageSQL2012SetupFile2);
// some more logic...
end;
// Function for creating the Setup pages for 4 SQL Servers (Same logic for all 4 servers)
function MSSQL2008SETUPDIR_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
BMPFile: String;
begin
SelectedSQLServerVersion := GetSQLServerVersion('');
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('Database Settings'),
ExpandConstant('Special note for the Microsoft SQL Server 2008 Setup')
);
BMPFile:= ExpandConstant('{tmp}\caution.bmp');
if not FileExists(BMPFile) then ExtractTemporaryFile(ExtractFileName(BMPFile));
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(Page);
with BitmapImage1 do
begin
Bitmap.LoadFromFile(BMPFile);
Parent := Page.Surface;
Left := ScaleX(8);
Top := ScaleY(8);
Width := ScaleX(97);
Height := ScaleY(209);
end;
{ NewStaticText1 }
NewStaticText1 := TNewStaticText.Create(Page);
with NewStaticText1 do
begin
Parent := Page.Surface;
Caption := 'To install Microsoft SQL Server 2008 you have to insert the Microsoft SQL Server 2008 Setup CD, when XXX setup requests it. The installation path of your Microsoft SQL Server 2008 setup and the additional Service Packs can be defined on the next pages.';
Left := ScaleX(112);
Top := ScaleY(8);
Width := ScaleX(292);
Height := ScaleY(77);
AutoSize := False;
TabOrder := 0;
WordWrap := True;
end;
{ NewStaticText2 }
NewStaticText2 := TNewStaticText.Create(Page);
with NewStaticText2 do
begin
Parent := Page.Surface;
Caption :=
'CAUTION: When autorun is activated, dont click in the autorun menu of Microsoft SQL Server 2008.' + #13 +
'Otherwise you must reboot your machine and restart the setup !';
Left := ScaleX(112);
Top := ScaleY(88);
Width := ScaleX(293);
Height := ScaleY(62);
AutoSize := False;
Font.Color := -16777208;
Font.Height := ScaleY(-11);
Font.Name := 'Tahoma';
Font.Style := [fsBold];
ParentFont := False;
TabOrder := 1;
WordWrap := True;
end;
with Page do
begin
//OnActivate := @MSSQLSETUPDIR_Activate;
//OnShouldSkipPage := @MSSQLSETUPDIR_ShouldSkipPage;
//OnBackButtonClick := @MSSQLSETUPDIR_BackButtonClick;
//OnNextButtonClick := @MSSQLSETUPDIR_NextButtonClick;
//OnCancelButtonClick := @MSSQLSETUPDIR_CancelButtonClick;
end;
Result := Page.ID;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
var
begin
if PageID = wpSelectComponents then begin
Result := MyModeTypical;
end else if PageID = PageProductName.ID then begin
Result := MyModeTypical;
end;
Log('Server is...' + SelectedSQLServerVersion);
if SelectedSQLServerVersion <> '' then begin
// Database Settings Warning
if (SQLServer2008Flag = True) and (IsComponentSelected('DBS\SERVER')) then begin
if PageID = PageSQL2008SetupFile2 then begin
Result := false;
end else if PageID = PageSQL2008R2SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2012SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2014SetupFile2 then begin
Result := true;
end;
end else if (SQLServer2008R2Flag = True) and (IsComponentSelected('DBS\SERVER')) then begin
if PageID = PageSQL2008R2SetupFile2 then begin
Result := false;
end else if PageID = PageSQL2012SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2014SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2008SetupFile2 then begin
Result := true;
end;
end else if (SQLServer2012Flag = True) and (IsComponentSelected('DBS\SERVER')) then begin
if PageID = PageSQL2012SetupFile2 then begin
Result := false;
// This PageSQL2014SetupFile2 is not skipped.....
end else if PageID = PageSQL2014SetupFile2 then begin
Result := true;
// This PageSQL2008SetupFile2 and PageSQL2008R2SetupFile2 are skipped properly.....
end else if PageID = PageSQL2008SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2008R2SetupFile2 then begin
Result := true;
end;
end else if (SQLServer2014Flag = True) and (IsComponentSelected('DBS\SERVER')) then begin
if PageID = PageSQL2014SetupFile2 then begin
Result := false;
end else if PageID = PageSQL2008SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2008R2SetupFile2 then begin
Result := true;
end else if PageID = PageSQL2012SetupFile2 then begin
Result := true;
end;
end;
// some more logic
end;
节目播音员