2014-02-16 23 views
2

我正在使用Inno Setup(Unicode)和一組我在Delphi XE2中編寫的DLL。該DLL具有在安裝嚮導/進度期間顯示的VCL表單。如何將VCL樣式應用於Inno安裝程序中基於DLL的表單?

我在我的Inno Setup安裝程序中試用過implementing VCL Styles。一切都很好,除了在這些DLL中創建的表單。有些形式是皮膚,但不是所有的...

Partial Skin

正如你可以看到,表格的背景色,列表視圖背景顏色和字體顏色都變了。但是,列表視圖標題,進度條和表單的邊框仍舊是舊樣式。

如何讓這些DLL中的窗體顯示正確的樣式?

+0

實際上,我猜,我有通過將風格的文件名到它加載這個樣式文件到每個DLL,使用例如像'ApplyVclStyle導出程序(const的文件名:WideS tring);' –

+0

該插件只能對inno setup創建的表單和控件進行皮膚處理。對於你的DLL的形式,你必須像你在評論中所說的那樣加載VCL樣式。 – RRUZ

回答

4

Inno Setup的VCL樣式插件僅用於在Inno Setup中的窗體和控件上繪製樣式。爲了獲得這些DLL的形式來剝皮,你需要導出從DLL中的函數,Inno Setup的可以在文件傳遞...

Inno Setup的

[Code] 
#define public VclStyleFile "Carbon (2).vsf" 

procedure DllLoadStyle(const StyleFilename: WideString); 
    external '[email protected] stdcall'; 

function InitializeSetup: Boolean; 
begin 
    ExtractTemporaryFile('{#VclStyleFile}'); 
    LoadVCLStyleW(ExpandConstant('{tmp}\{#VclStyleFile}')); 
    DllInit; //Presumed your DLL needs to initialize/instantiate the form 
    DllLoadStyle(ExpandConstant('{tmp}\{#VclStyleFile}')); 
    ... 
end; 

德爾福DLL

uses 
    Vcl.Themes, 

procedure DllLoadStyle(const StyleFilename: WideString); stdcall; 
begin 
    TStyleManager.SetStyle(TStyleManager.LoadFromFile(StyleFilename)) 
end; 

exports 
    DllLoadStyle; 
+0

OT:你不需要擴展你的預處理器變量,除非它們的值中包含一些Inno Setup常量(你需要擴展它們)。預處理器只是將變量的值發送給腳本。所以'ExtractTemporaryFile'函數調用中的'ExpandConstant'函數完全沒有任何作用。 – TLama

+1

@TLama我看到了,感謝指針! –

相關問題