Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

По поводу тормознутости KolToolBar c tboFlat и FixFlatXP   Найти похожие ветки 

 
Viman ©   (2004-05-26 12:45) [0]

Это не вопрос, это решение :), вдруг кому-то участь облегчит...
Есть у меня на форме KOLToolbar, хочется чтобы он был tboFlat и нормально отображался под WinXP с манифестом. Что на данный момент недоступно без включения свойства FixFlatXP. Его же включение приводит к тому, что под WinXP Toolbar становиться Transparent и тормозит все безбожно. И при чем не важно - подключен манифест или нет. А как оказалось при включеном манифесте совсем необязательно Toolbar-у иметь стиль tboFlat и так и так одинаково рисуется. Т.е. если мы с манифестом и при включенной "теме"(конечно же под XP), то нужно просто убрать стиль tboFlat и никакого Transparent включать не нужно, иначе включаем tboFlat и тоже без Transparent. Одно "но" - как узнать достоверно как стандартные контролы винда на данный момент рисует: по теме или стандартно? По-мне так не катило проверять наличие манифеста в файле или ресурсе( а вдруг есть файл с манифестом, но он глючный?) И надеяться, что кто-то будет его включать жестко в ресурс? Наивно... Побывал тут на форуме WinApi, в других форумах - готового решения не было, пришлось решать :),теперь вот оно.
Вызываем функцию, если она вернула false - нас должны рисовать стандартно(без всяких тем), если true - то по теме. Никаких проверок на манифест не нужно. Результат не предположительный, а гарантированно верный. Единственно что, так это я не проверял на Windows выше XP - нет нигде рядом, но думаю что нормально будет...

> Кладов В., Gandalf
Хоть и немного она громоздкая, но наверно её можно включить  в какой либо стандартный модуль KOL и управлять стилем flat Toolbar посредством её? Да и далеко не лишнее узнать иногда как контролы будут представляться иногда? Как думаете?

Вот сама функция:
//IsDrawingWithVStyle - true, если контролы будут отрисовываться по умолчанию согласно стилю WinXP
function IsDrawingWithVStyle: Boolean;
const Comctl32Dll = "comctl32"; UxThemeDll = "uxtheme";
  funcIsAppThemed = "IsAppThemed";
var fviSize, fviSize2: Cardinal; fviData, fviData2: Pointer;
{$IFDEF KOL_MCK}
// OVI: TOsVersionInfo;
{$ENDIF}
LibHandle: THandle;
IsAppThemed: function : Boolean;stdcall;
begin
 result:= false;
{$IFNDEF KOL_MCK}
 OVI.dwOSVersionInfoSize := Sizeof( OVI );
 GetVersionEx( OVI );
 if (OVI.dwMajorVersion >= 6)
   or ((OVI.dwMajorVersion >= 5) and (OVI.dwMinorVersion >= 1)) then
{$ELSE}
 if WinVer >= wvXP then
{$ENDIF}
 begin
   LibHandle:= LoadLibrary(UxThemeDll);
   if LibHandle <> 0 then
   begin
     try
       @IsAppThemed:= GetProcAddress(LibHandle, funcIsAppThemed);
       if (@IsAppThemed <> nil) and IsAppThemed then
       begin
         fviSize:= GetFileVersionInfoSize(Comctl32Dll, fviSize);
         if fviSize<>0 then
         begin
           GetMem(fviData, fviSize);
           try
             result:= GetFileVersionInfo(Comctl32Dll, 0, fviSize, fviData)
               and VerQueryValue(fviData, "\", fviData2, fviSize2)
               and ((PVSFixedFileInfo(fviData2)^.dwFileVersionMS shr 16) > 5);
           finally
             FreeMem(fviData, fviSize);
           end;
         end;
       end;  
     finally
       FreeLibrary(LibHandle);
     end;
   end;
 end;
end;


Mini HOWTO ^)


 
Viman ©   (2004-05-26 13:42) [1]

Да, как говориться, "Поспешишь - людей насмешишь.
Небольшое исправление:
"Есть у меня на форме KOLToolbar..." не на самой непосредственно форме, а например на панели и т.п. - только тогда transparent включается.



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
14-1103879678
Кудесник
2004-12-24 12:14
2005.01.16
Лечится или нет?


6-1098771266
ArMellon
2004-10-26 10:14
2005.01.16
Народ как реливать быструю пересылку скриншотов по


1-1104669867
lipskiy
2005-01-02 15:44
2005.01.16
Подскажите по инсталляции свой программы для всех пользователей


6-1096999575
Ezhik
2004-10-05 22:06
2005.01.16
TClientSocket и TServerSocket


9-1096094110
Goblin V
2004-09-25 10:35
2005.01.16
Смена видеорежима при переходе на другое приложение без закрытия