Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

По поводу тормознутости 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 вся ветка

Форум: "KOL";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.039 c
1-1104402433
Cardinal
2004-12-30 13:27
2005.01.16
Массив как параметр функции


14-1104388809
Пользователь
2004-12-30 09:40
2005.01.16
Драйверок для HP LaserJet 5Si


14-1104223573
Юзер
2004-12-28 11:46
2005.01.16
AutoCad


1-1103876185
whiteswan
2004-12-24 11:16
2005.01.16
не запускается прога в вин98. работаю в винХП,дельфи6.


1-1104141631
Aleksandr.
2004-12-27 13:00
2005.01.16
Как у главного меню поменять цвет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский