Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-74137
Буланов Дмитрий
2003-10-11 04:15
2003.10.23
проблема


1-74158
From_X
2003-10-10 10:32
2003.10.23
Web Browser onClick, события компонентов


3-73968
OVAD
2003-10-01 15:07
2003.10.23
Помогите с фильтром.


6-74347
Atatoly
2003-08-25 15:05
2003.10.23
Socket


1-74110
Chicago
2003-10-13 06:37
2003.10.23
Окно неправильной формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский