2010-05-21 35 views
0

我覺得主題講述的一切程序...導入特定的(在我的情況 - Themes.ThemesService.ThemesEnabled)函數/在runetime德爾福

我只需要這個方法。沒有必要浪費約6Mb的內含單位,如果只有我需要的東西是該單位的一種方法(主題)...

我在想UxTheme單元,但它沒有包含正確的功能。我需要導入哪些Windows DLL以及此方法代表什麼API函數?

謝謝。

P.S.問題旨在不僅涵蓋這種特定的方法,還包括其他人,因爲我將需要在MSXML和MM單元中執行相同的操作...

回答

1

@HX_unbanned,顯然你有點困惑。因爲將主題單元添加到您的項目中只會增加321 kb aprox中exe的大小。無論如何,如果你想檢查你的應用程序是否爲主題(themesEnabled)手動你必須按照下面的步驟。

1)檢查comctl32.dll庫的版本(必須是大或等於6)

2)加載的uxtheme.dll庫

3)導入IsThemeActiveIsAppThemed功能。

4)檢查的論文函數的值(兩者都必須爲真)

檢查該樣品

function ThemesEnabled :Boolean; 
const 
    ComCtlVersionIE6 = $00060000; 
var 
    ThemeLib  : THandle; 
    IsThemeActive : function: Boolean; stdcall; 
    IsAppThemed  : function: Boolean; stdcall; 
begin 
    Result:=GetFileVersion('comctl32.dll')>=ComCtlVersionIE6; 
    if not Result then exit; 
    ThemeLib := LoadLibrary('uxtheme.dll'); 
    try 
    if ThemeLib > 0 then 
    begin 
     IsAppThemed := GetProcAddress(ThemeLib, 'IsAppThemed'); 
     IsThemeActive := GetProcAddress(ThemeLib, 'IsThemeActive'); 
     Result:=IsAppThemed and IsThemeActive; 
    end 
    else 
    Result:=False; 
    finally 
    FreeLibrary(ThemeLib); 
    end; 
end; 
+0

嗯。好吧,這將是正確的解決方案,但 - 實際上添加UxThemes單元項目增量大小約321kb ...如果我添加主題單元,有額外約6.5 MB的編譯EXE。 Btw - 有沒有什麼辦法可以在相應的Windows DLL(API調用)中找到delphi函數? – 2010-05-21 07:24:05

+0

謝謝。我會盡快測試;) – 2010-05-21 08:09:54

+0

是的,HX。只需搜索源代碼。 Delphi函數將調用API函數,因此當您找到其中一個時,您會發現附近的其他人。 – 2010-05-21 18:23:19