![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как повесить иконку на TMenuItem. Никак. Почему-то... Спасите от [D6, WinXP]
Matolch © (2002-12-11 20:26:00)сумасшествия. Может, я чего-то недоглядываю, но не получается.
procedure TMainForm.PopupMenuGetMenuItem;
var W: Word;
Item: TMenuItem;
AnIcon: TIcon;
AnImage: TBitmap;
IconInfo: TIconInfo;
begin
Item := TMenuItem.Create(Self);
with Item do
begin
Caption := FileName;
OnClick := btnOpenDBClick;
PopupMenuFileNames.Items.Add(Item);
W:=0;
AnIcon := TIcon.Create;
AnIcon.Handle := ExtractAssociatedIcon(HInstance,PChar(FileName),W);
if AnIcon.Handle 0 then
if GetIconInfo(AnIcon.Handle, IconInfo) then
begin
AnImage := TBitmap.Create;
AnImage.Handle := IconInfo.hbmColor;
if SetMenuItemBitmaps(Item.Handle,Item.Parent.Count-1,MF_BYPOSITION,AnImage.Handle,AnImage.Handle)
then
List.Add(AnImage)
else
Canvas.Draw(20,20,AnImage);//проверил - рисует
AnImage.Free;
end;
end;
AnIcon.Free;
end;
Самый прикол в том, что один раз получилось. Но мне как-то не очень внешний вид понравился (IconInfo.hbmColor only), и я решил попробовать загружать битмап, извлекаемый из иконки, в ImageList. Извлекал, нормально, но в меню - никак, и это никак с тех пор продолжается. SubImages - размер 32*32, менюитем огромен, но рисунок не рисует. Попытался вернуться к первому варианту - и все, баста. Никак.
Вопрос ещё такой - можно было бы извлечь маленькую иконку при помощи ExtractIconEx - я так понял, но где взять тогда имя приложения, из которого её извлечь (по ассоциации с файлом).
И ёще.
Извлек. Получил два битмапа: Color & Mask - как их слить в один, целый, который и выглядит, и смотрится?
И ёще: что значит :о), :)), ;), ИМХО и т.п.?
Matolch (2002-12-13 08:57:00) [1]Humble. А ведь я как-то наткнулся на загрузку bmp из файла и установку именно SetMenuItemBitmaps. Даже не подумал TMenuItem глядеть. Во.
> NOBODY (12.12.02 14:43)
Кстати, все-равно корявенько получается. Сравнил бы те иконки, что проводник рисует с этим подобием.
Song (2002-12-12 16:26:00) [2]H - humble
NOBODY (2002-12-12 14:43:00) [3]if GetIconInfo(AnIcon.Handle, IconInfo) then
begin
AnImage := TBitmap.Create;
try
AnImage.Handle := IconInfo.hbmColor;
AnImage.MaskHandle := IconInfo.hbmMask;
AnImage.Transparent := True;
Item.Bitmap := AnImage;
//List.Add???
finally
AnImage.Free;
end;
end;
Matolch (2002-12-11 22:04:00) [4]М-да.. Видимо вопрос чрезвычайно... Даже не знаю чего чрезвычайно... Как говорица, спасибо NOBODY. NOBODY всегда поможет.
BeginnerEx (2002-12-11 20:55:00) [5]
> harismatik
Понял - In My H.. Opinion. Только что за H.. - z не помню
harismatik (2002-12-11 20:49:00) [6]ИМХО - означает с английского "По моему скромному мнению" (сам долгое время не знал, пока случайно на одном из форумов не наткнулся на объяснение :)