Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.034 c
1-74311
Tihomirov
2003-10-05 21:49
2003.10.23
Графика в DLL


6-74366
BillyJeans
2003-08-29 15:40
2003.10.23
UCP протокол...


6-74364
Николай
2003-08-25 16:22
2003.10.23
TCP/IP


1-74246
able
2003-10-13 20:06
2003.10.23
Люди добрые! Очень надо!!


14-74463
Knight
2003-10-02 23:52
2003.10.23
Кто какие сайты посещает?