Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

LoadImage не работает   Найти похожие ветки 

 
tradakad ©   (2005-01-21 15:15) [0]

пытаюсь загрузить иконку из exe файла
var
btm:HBITMAP;

btm:=LoadImage(Handle,"D:\ww\w.exe",IMAGE_ICON,16,16,LR_LOADFROMFILE);

Handle - это окно.

но btm всегда равен нулю. почему? можно ли воспользоаваться этой функцией не зная файла откуда брать рисунок а зная только дескриптор окна?


 
inic ©   (2005-01-21 15:48) [1]

tradakad ©   (21.01.05 15:15)

По поводу LoadImage почитай Win32 SDK или MSDN,
<имхо> первый параметр здесь не важен, можно поставить ноль,
потом файл должен быть именно графического типа (bmp и т.д.)</имхо>

ExtractIcon пробуй

ExtractIcon(hInstance, "D:\win.exe", 0); //например так


 
tradakad ©   (2005-01-21 15:52) [2]

да читал вроде... а если не знаю файла? если знаю только хендл окна в котором есть иконка?


 
Jel ©   (2005-01-21 15:57) [3]

WM_GETICON не подойдет? Подробности в справке.


 
tradakad ©   (2005-01-21 16:02) [4]

WM_GETICON не подойдет, так как возвращает хендл иконки HICON
а я его не могу дальше использовать, мне нужен HBITMAP


 
Jel ©   (2005-01-21 16:14) [5]

Можно сделать например так:

procedure TForm1.Button1Click(Sender: TObject);
var Icon_Handle : hIcon;
   BMP : tBitmap;
   Icon : tIcon;
begin
 Icon_Handle := SendMessage(Handle, WM_GETICON, ICON_BIG, 0);
 if Icon_Handle <> 0 then begin
   Icon := TIcon.Create;
   Icon.Handle := Icon_Handle;
   BMP := TBitmap.Create;
   BMP.Width := Icon.Width;
   BMP.Height := Icon.Height;
   BMP.Transparent := true;
   BMP.Canvas.Draw(0,0, Icon);
   Icon.Free;
   //вот тут у тебя есть нормальный Битмап, сделанный из иконки
   //Хочешь - бери его Handle, хочешь просто рисуй.
   Canvas.Draw(0,0,BMP);
   bmp.Free;
 end;
end;


Или нужно на чистом API?


 
inic ©   (2005-01-21 16:15) [6]

tradakad ©   (21.01.05 16:02) [4]

Зачем HBITMAP ?


 
tradakad ©   (2005-01-21 16:30) [7]

2 Jel
В  принипе я не знаю как на WinAPi сделать это
BMP.Transparent := true;
BMP.Canvas.Draw(0,0, Icon);
т.е. иконку я нашел
Icon:=GetClassLong(hw,GCL_HICONSM);
а вот как ее запихнуть в новосозданный битмап - не знаю... думаю что в любом случае ножно использовать CreateBitmap , но допустим высоту и ширину я укажу , а вот как на WinApi  сказать что мол "в этой новосозданной битмапке должна лежать иконка , хендл которой равен Icon"

вот такая проблема.


 
tradakad ©   (2005-01-21 16:32) [8]

2 Inic
потмому что при SetMenuItemBitmap нужен хендл именно битмапа а не иконки, т.е. проблема как бы в конвертации иконки в битмап (если можно так сказать)


 
Jel ©   (2005-01-21 16:33) [9]

В догонку - если уж позарез необходим именно HBitmap и именно на API :

procedure TForm1.Button1Click(Sender: TObject);
var Icon_Handle : hIcon;
   IconInfo : _ICONINFO;
begin
 Icon_Handle := SendMessage(Handle, WM_GETICON, ICON_BIG, 0);
 if Icon_Handle <> 0 then begin
   GetIconInfo(Icon_Handle, IconInfo);
   { Тут делаем все, что нужно
     IconInfo.hbmColor - Handle битмапа.
   }
   DeleteObject(IconInfo.hbmMask);
   DeleteObject(IconInfo.hbmColor);
 end;
end;


 
tradakad ©   (2005-01-21 17:06) [10]

Thanks a lot 2Jel . Это то что мне нужно было!



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
14-1108639991
Doxygen
2005-02-17 14:33
2005.03.06
Pas2DOC


3-1107713071
kingdom2000
2005-02-06 21:04
2005.03.06
KADao и база Access


6-1103882327
Lau
2004-12-24 12:58
2005.03.06
Зависание сокета при Send


1-1107779131
Zhekson
2005-02-07 15:25
2005.03.06
аналоги Sleep_а


3-1107865579
YurikGL
2005-02-08 15:26
2005.03.06
Запрос на последние данные





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