Форум: "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