Форум: "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, если контролы будут отрисовываться по умолчанию согласно стилю WinXPfunction 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.038 c