Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > ещё раз о создании....


Автор: X-Vlad 11.11.2002, 02:10
У меня вопрос... я создаю программно попап меню, в меню - ссылки на файлы.. тоисть я на онклик запускаю файл, как мне добавить соответствующему пункту иконку которая есть у ехе-шника?

Автор: Borland_Delphi_6 11.11.2002, 02:25
Если иконка у екзешника, извлеки ее кода нибудь во времменую папку и установи у строки меню свойство bitmap. но для этого придется переконвертить иконку в bmp при помощи проги IconToAny. http://ahasoft.com

Автор: Song 11.11.2002, 02:33
ExtractIcon()
Рисовать - DrawIconEx() в TMenuItem.onDrawItem (OwnerDraw конечно же надо не забыть)

Автор: X-Vlad 11.11.2002, 23:55
привет всем...
вот код:

Код
procedure add_link2;
var
 dir:string;
 mi:TMenuItem;
 ini:Tinifile;
 i:integer;
begin
 form1.popupmenu2.Items.Clear;
 dir:=paramstr(0);
 Ini:= TIniFile.Create(dir+'\link.ini');
 form1.listbox1.Clear;
 ini.ReadSection('link2',form1.listbox1.Items);
 Ini.Free;
 for i:=0 to form1.listbox1.Items.Count-1 do
  begin
   mi:=TMenuItem.Create(form1.popupmenu2);
   mi.Caption:=form1.listbox1.Items[i];
   form1.popupmenu2.Items.Add(mi);
   form1.popupmenu2.Items[i].OnClick:=form1.menuclick2;
  end;
 form1.listbox1.Clear;
end;


Вопрос:

какой код надо дописать что-бы добавлять иконку с ЕХЕ-шника к каждому пукту меню?

спасибо....

Автор: rhf 12.11.2002, 00:11
2 X-Vlad, уважаемый :) да вы так никогда раскладку на клавиатуре не выичите

ExtractAssociatedIcon()
а как рисовать уже сказал Song....
Если не хотите возиться с OwnerDraw, то иконку надо конвертнуть в bmp засунуть в tPopupMenu.Images а потом поставить нужный индекс у  tMenuItem.ImageIndex

Автор: X-Vlad 12.11.2002, 00:26
вы можете написать мне код -  ну что-бы только вставить? а то у меня голова уже от етого болит.... всё накучу и учёба и работа.....
помогите плз..... оччччень нужно...
спасибо.....

Автор: Song 12.11.2002, 00:40
Rhf, ExtractAssociatedIcon - это не та иконка получится.

Автор: rhf 12.11.2002, 00:51
2 Song как не та ??? если подсунуть exe-шник то получим его иконку, если протсой файл, то иконку ассоциированую с этим файлом.... или я всегда не правильно понимал назначение этой функции ???

Автор: Vit 12.11.2002, 01:02
Можно так же:

Код
Icon := TIcon.Create;
try
  SHGetFileInfo(PChar(filename), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
  icon.Handle := FileInfo.hIcon;
 ...........
  DestroyIcon(FileInfo.hIcon);
finally
  Icon.Free;
end;

Автор: Song 12.11.2002, 01:32
Цитата(rhf @ 11.11.2002, 16:51)
2 Song как не та ??? если подсунуть exe-шник то получим его иконку, если протсой файл, то иконку ассоциированую с этим файлом.... или я всегда не правильно понимал назначение этой функции ???

В твоём случае получится та иконка, которая ассоциирована с данным типом файлов в реестре. А ему, как я понял, нужна та икона, которая находится в самом файле. А это не одно и то же.

Автор: man2002ua 12.11.2002, 19:51
:baaa
вопрос в получении иконки, к-я явл. ресурсом ЕХЕшника?
Тогда необх. исп. FindResourse

Автор: rhf 12.11.2002, 20:10
Цитата(Song @ 11.11.2002, 17:32)
В твоём случае получится та иконка, которая ассоциирована с данным типом файлов в реестре. А ему, как я понял, нужна та икона, которая находится в самом файле.

Так если передатся испольняемый файл, то иконка как раз будет извлечена из него самого. А для неисполняемых уже будет иконка из файлов с которыми они асоциированы в реестре.

Автор: Song 12.11.2002, 21:33
Если в ini файле будет иконка с шестерёнкой - то это просто оттого что она там есть, заложена кем-то. Однако это вовсе не факт, что так всегда должно быть. Запросто может быть ini файл с иконкой в виде листка бумаги (который для txt). В этом случае ExtractAssciatedIcon() - вернёт шестерёнку, а ExtractIcon() - бумагу.

Автор: X-Vlad 13.11.2002, 21:28
я читаю с ехе-шника иконку и конвертирую её в бмп потом кидаю в попап меню но у меня  выпадает какая-то ошибка....
вот код:
Код

var
Icon   : TIcon;
Bitmap : TBitmap;
begin
if opendialog1.Execute then
begin
popupmenu1.Items.Bitmap.CleanupInstance;
Icon   := TIcon.Create;
Bitmap := TBitmap.Create;
image1.Picture.Icon.Handle:=ExtractIcon(HInstance, PChar(opendialog1.FileName), 0);
showmessage(extractfileext(opendialog1.FileName));
Icon:=image1.Picture.Icon;
Bitmap.Width := Icon.Width;
Bitmap.Height := Icon.Height;
Bitmap.Canvas.Draw(0, 0, Icon);
popupmenu1.Items[0].Bitmap:=bitmap;
Icon.Free;
Bitmap.Free;
end;
end;

в чем дело?

Автор: Song 13.11.2002, 22:39
Ну нагородил.. :-)
Используй DrawIcon(Ex)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)