Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Добавить пункт в контекстное меню


Автор: Cetus 18.4.2005, 12:24
Как добавить пункт в контекстное меню проводника?
(вызывается при клике правой кнопкой на файле)
желательно чтобы пункт в меню находился снизу либо был отделен сплошной линией.

Автор: Cetus 19.4.2005, 22:15
знаю способ через реестр:
HKEY_CLASSES_ROOT\*\shellex\мой_пункт\command
значение по умолчанию := 'c:\exefile.exe'

но тогда пункт добавляется в верху списка,

мне же хотелось бы чтобы мой пункт меню находился внизу списка
для этого надо писать *.dll и подключать через CLSID.
кто нибудь практиковал?

Автор: Cetus 24.4.2005, 09:23
Кто нибудь! откликнитесь!

Автор: Alex 24.4.2005, 16:33
Перенесенно из раздела Delphi

Автор: Rouse_ 24.4.2005, 17:27
Цитата(Cetus @ 19.4.2005, 22:15)
мне же хотелось бы чтобы мой пункт меню находился внизу списка
для этого надо писать *.dll и подключать через CLSID.
кто нибудь практиковал?

Это очень легко, причем ты удивишся но именно такой пример идет в поставке с Дельфи. Находиться он тут: {delphi_path}\Demos\ActiveX\ShellExt\contmenu.dpr

Автор: Cetus 26.4.2005, 06:40
Rouse_ спасибо!

Автор: Marsianin 20.11.2005, 10:24
Спасибо за примеры, за которыми, как оказалось далеко ходить не надо.
НО! Всё же есть 2 вопроса:

1. Как повесить своё меню на любой файл в системе - понятно. Но как сделать так, чтобы оно вызывалось и когда несколько файлов выделены ?

2. Как воткнуть в меню свою иконку ? Пробовал сделать через
Код

TheBitmap:=LoadBitmap(hInstance,'0')
SetMenuItemBitmaps(Menu, indexMenu+1, MF_BYPOSITION, TheBitMap, TheBitMap);
Но, наверное, где-то накосячил или не в том месте вставил. Не работает вообщем smile

Автор: newalex 20.11.2005, 22:55
В нете есть статьи "РУководство полного идиота". Без обид только... Я сам когда разбирался, очень обиделся на название это. Так вот... там кода немеренно и на все вопросы найдешь ответы там. Единственный минус - на сях.
По поводу иконки... грузи из ресурса. Тип должен быть HBitmap.

Автор: Marsianin 21.11.2005, 02:52
Да не нужны статьи, я более-менее разобрался в том, что уже есть в Delphi.
Вот только с иконками не пойму.
LoadBitmap(hInstance,'0') как раз загружает иконку из ресурса и выдаёт hBitMap, но видимо, я куда-то не туда всё это засунул, может грузить надо иконку где-то в специальном месте - не работает вообщем smile

Автор: newalex 21.11.2005, 23:36
С ресурсом всё правильно делаешь? Директиву $R в начале не забыл? Может с индексами чего напутал, в смысле возле какого пункта иконку показывать?
В LoadBitmap(hInstance,'0') вместо 0 пиши имя того, что у тебя в файле ресурсе написано (имя иконки).

Автор: Marsianin 22.11.2005, 00:49
Да нет, $R не забыл. Посмотрел же свой dll через Resource Hacker. Иконка там есть в ресурсах.
Называется: Bitmap - 1 - 0
Я так понял, что "0" и есть её название, которое нужно указать в LoadBitmap.

И ещё, где в DLL нужно делать загрузку bitmap из ресурса ? Непосредственно перед вставкой картинки в меню или где при инициализации DLL ?

С индексами...только дошло, что наверное накосячил. Т.к. сначала добавил свой пункт меню а потом на тот же индекс картинку, а оно, поидее, сместится уже должно. А чужому пункту картинка не добавится ?

Автор: newalex 22.11.2005, 11:16
Вот тебе пример... немного доделаный стандартный пример из делфы. Внимательно изучи все файлы в архивчике. По себе знаю, что лучше пример перед глазами иметь. Делов на пять минут, но если первый раз, то муторно как-то это делать. Нормальных FAQ в нете нету (кроме тех статей, что я посоветовал, почитай на досуге всё-таки).
Ничего... как диплом сделаю, напишу свой FAQ на эту тему...

Слушай... напиши мне на мыло, а я тебе отвечу письмом с примером, а то чё-то у меня глючит тут всё...

Автор: newalex 22.11.2005, 17:33
Кинул всё, что мог smile

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