2016-02-29 129 views
1

我試圖在wpPreparing頁面上放置一個標籤,指示在運行新安裝之前卸載現有版本。這裏是我的代碼:Inno Setup在wpPreparing上放置控件頁面

function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    UninstallingLabel: TNewStaticText; 
    intResultCode: Integer; 
begin 
    with UninstallingLabel do 
    begin 
     Caption := 'Uninstalling existing version...'; 
     Left := WizardForm.StatusLabel.Left; 
     Top := WizardForm.StatusLabel.Top; 
     Parent := wpPreparing.Surface; 
    end; 
    if strExistingInstallPath <> '' then 
    begin 
     Exec(GetUninstallString, '/verysilent /suppressmsgboxes', '', SW_HIDE, 
     ewWaitUntilTerminated, intResultCode); 
    end; 
end; 

麻煩的是它似乎不喜歡Parent := wpPreparing.Surface和編譯失敗,並

分號(;)預計

錯誤。將標籤添加到自定義創建的頁面時,此語法起作用。爲什麼在嘗試將其添加到wpPreparing時失敗?

回答

1

實例中的wpPreparing不是一個對象,它只是一個數值不變。

WizardForm.PreparingPage持有對「準備安裝」頁面的引用。請注意,它已經是TNewNotebookPage類型,而不是TWizardPage。所以你直接用它作爲父母。


還要注意的是StatusLabel是「安裝」頁面上。您可能希望將新標籤與PreparingLabel相關聯。


而且您必須創建UninstallingLabel


UninstallingLabel := TNewStaticText.Create(WizardForm); 

with UninstallingLabel do 
begin 
    Caption := 'Uninstalling existing version...'; 
    Left := WizardForm.PreparingLabel.Left; 
    Top := WizardForm.PreparingLabel.Top; 
    Parent := WizardForm.PreparingPage; 
end; 

儘管你真的希望影着PreparingLabel(如你使用它的座標)。

如何重複使用它呢?

WizardForm.PreparingLabel.Caption := 'Uninstalling existing version...'; 
+0

謝謝馬丁。 'WizardForm.PreparingPage'是我所需要的。我意外地忽略了我發佈的代碼中的標籤創建行。因爲「PrepaaringLabel」與「StatusLabel」的對齊方式不同(它進一步向右偏移),所以我沒有重複使用'PreparingLabel'並引用'StatusLabel'座標。也許'PreparingLabel'的位置可以修改以反映'StatusLabel'的位置,但我不知道如何去做,所以就去創建自己的標籤。 –

1

我已重播您的代碼。如果您僅使用WizardForm作爲父項,它將起作用。但它在窗體的左上角...

wpPreparing是保存相應頁面的ID的常量的名稱。

而且你要創建的UninstallingLabel