Вниз
Скачать: CL | DM;

Как получить размер вдираемой из 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.014 c
1-74115
Qwe
2003-10-11 20:01
2003.10.23
Label в несколько строк


1-74204
Vin
2003-10-09 10:24
2003.10.23
на нажатие правой кнопки мыши также как на левой


3-74019
kostik78ua
2003-10-03 11:26
2003.10.23
Експорт MSSQL->Interbase


7-74490
Alexander2030
2003-08-10 11:37
2003.10.23
Иконка в системном меню


1-74130
nevalex
2003-10-10 23:18
2003.10.23
Можно ли вытенуть инфу(например темпер.CPU из MainBoardMonitor)




   Наверх