Главная страница
    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.011 c
3-74033
drAlex
2003-10-06 10:59
2003.10.23
Apollo Dll в Delphi 6


1-74221
WED
2003-10-09 12:37
2003.10.23
Ошибка: Не был произведен вызов CoInitialize


1-74277
microprogs
2003-10-12 23:53
2003.10.23
EXE TO DELPHI конвертор


4-74527
wicked
2003-08-17 16:05
2003.10.23
вопрос о TPageSetupDlg....


3-74055
noiza
2003-10-03 17:43
2003.10.23
Interbase И





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