Импорт определенной (в моем случае - Themes.ThemesService.ThemesEnabled) функции / процедуры во время выполнения в Delphi - PullRequest
0 голосов
/ 21 мая 2010

Я думаю, что субъект все говорит ...

Мне нужен только этот метод.Не нужно тратить около 6 МБ включенного модуля, если мне нужен только один метод из этого модуля (Темы) ...

Я думал об устройстве UxTheme, но оно не содержало надлежащей функции.Какую DLL-библиотеку Windows мне нужно импортировать и какую функцию API обозначает этот метод?

Спасибо.

PS Вопрос предназначен не только для этого конкретного метода, но и для других, которые мне понадобятсясделать то же самое в единицах MSXML и MM ...

1 Ответ

1 голос
/ 21 мая 2010

@ HX_unbanned, видимо, вы немного смущены. потому что добавление модуля тем в ваш проект только увеличивает размер exe в 321 кб приблизительно. в любом случае, если вы хотите проверить, является ли ваше приложение тематическим (themesEnabled) вручную, вы должны выполнить следующие шаги.

1) проверить версию библиотеки comctl32.dll (должна быть главной или равной 6)

2) загрузить библиотеку uxtheme.dll

3) импортировать функции IsThemeActive и IsAppThemed.

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;
...