Форум: "WinAPI";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизКак получить размер вдираемой из DLL ки иконки Найти похожие ветки
← →
Эдуард (2003-08-18 18:23) [0]Собственно сабж.
Известно, что иконки могут быть не только 16х16 и 32х32, но и, вообще говоря, произвольного размера ХхХ... То, что при вытягивании иконки из библиотеки *.dll (я используюExtractIcon(...)
) определить её размер можно, это факт (многие программы делают это).
Вопрос: как?
← →
Almaz (2003-08-19 00:35) [1]Интересно, но мне не удалось найти функции определяющей размер иконки по ее Handle ... Поэтому пришлось написать свою - на оптимальность я не претендую - возможно есть варианты проще.
Вот, собственно, что получилось:
function GetIconSize(Icon: HICON): TPoint;
var
BitmapInfo: TBitmapInfo;
DC: HDC;
IconInfo: TIconInfo;
begin
ZeroMemory(@IconInfo, sizeof(IconInfo));
if GetIconInfo(Icon, IconInfo) then
begin
ZeroMemory(@BitmapInfo, sizeof(BitmapInfo));
BitmapInfo.bmiHeader.biSize := sizeof(BitmapInfo.bmiHeader);
DC := GetDC(0);
GetDIBits(DC, IconInfo.hbmColor, 0, 0, nil, BitmapInfo, DIB_PAL_COLORS);
ReleaseDC(0, DC);
Result.x := BitmapInfo.bmiHeader.biWidth;
Result.y := BitmapInfo.bmiHeader.biHeight;
DeleteObject(IconInfo.hbmMask);
DeleteObject(IconInfo.hbmColor);
end else
Result := Point(0, 0);
end;
И пример использования:
var
Icon: HIcon;
S: TPoint;
begin
Icon := ExtractIcon(hInstance, "C:\WINDOWS\Notepad.exe", 0);
S := GetIconSize(Icon);
ShowMessage(IntToStr(S.x) + " " + IntToStr(S.y));
...
Удачи.
← →
Эдуард (2003-08-19 13:52) [2]Спасибо за помощь. Только у меня этот код определяет не тот размер что есть на самом деле :( ...
У меня есть подозрения, что вытянув иконку с помощью ExtractIcon, уже нельзя получить истинный размер - только системыный, т.е. либо 16х16 либо 32х32.
Например, я закинул на
http://www.serdyuk.pisem.net/MSNsmileys19x19.dll
DLL"ку, в которой лежат иконки размером 19х19. Если открыть её ResHacker"ом, то можно видеть что размер иконок - действительно 19х19.
Используя твой код, мне выдаётся результат - 32х32... :((
Может кто-то ещё сможет подсказать решение?
← →
Игорь Шевченко (2003-08-19 14:56) [3]EnumResourceNames, FindResource, LoadResource...
В Program Files\Borland\Delphi\Demos\Resxplor лежит готовый проект - ищущий да обрящет, прыгающий, да допрыгается.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c