Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.054 c
14-1108132236
wl
2005-02-11 17:30
2005.03.06
Раз уж заговороли о HTML...


6-1104381463
Delpher_Gray
2004-12-30 07:37
2005.03.06
Обработка ошибки 10061, TClientSocket


14-1108674869
ASM
2005-02-18 00:14
2005.03.06
123


1-1108676633
NickKuz
2005-02-18 00:43
2005.03.06
сравнение двух близких цветов


1-1108973484
Sonic_gd
2005-02-21 11:11
2005.03.06
Поиск текста