Просмотр полной версии : как добавить свой обработчик в стандартное меню edit контролов
ну типа, правой кнопкой щелкаем на эдите - и вылазит - вставить, вырезать, етц. ток нужно это глобально, чтоб во всех эдитах работало. типа своего обработчика.
на сях желательно, хотя код не важен - нужен концепт. так что на любом языке впринципе, ес есть инфа...
есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на wasm [1] (http://www.wasm.ru/article.php?article=1001020) [2] (http://www.wasm.ru/article.php?article=1001022) и вроде не плохая для delphi (http://www.delphisite.ru/faq/sabklassing-i-superklassing-v-delphi-dlya-nachinayushchikh)
ну это я вижу решение этой проблемы в создании собственного элемента окна... возможно есть другие пути... но я точно уверен что эта тема сработает )
ну типа, правой кнопкой щелкаем на эдите - и вылазит - вставить, вырезать, етц. ток нужно это глобально, чтоб во всех эдитах работало. типа своего обработчика.
на сях желательно, хотя код не важен - нужен концепт. так что на любом языке впринципе, ес есть инфа...
примеры на C#.
имхо самый простой способ это в RunTime привязать.
Примерно так:
public void SetMenu()
{
foreach (Control control in Controls)
{
if (control is TextBox)
{
(control as TextBox).ContextMenu = new ContextMenu(new[] { new MenuItem("button1"), new MenuItem("button2")});
}
}
}
Либо наследоваться от контрола и в конструкторе сделать привязку.
public class MyClass : TextBox
{
public MyClass()
{
this.ContextMenu = new ContextMenu(new [] {new MenuItem("button1"), new MenuItem("button2")});
}
}
было 666 сообщений :(
есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на wasm [1] (http://www.wasm.ru/article.php?article=1001020) [2] (http://www.wasm.ru/article.php?article=1001022) и вроде не плохая для delphi (http://www.delphisite.ru/faq/sabklassing-i-superklassing-v-delphi-dlya-nachinayushchikh)
ну это я вижу решение этой проблемы в создании собственного элемента окна... возможно есть другие пути... но я точно уверен что эта тема сработает )
ну да, но не совсем то, но все равно сенкс!
W!z@rD а у меня блин 333)
вот на шарпе я увы не втыкаю %) апибы)
Я бы сделал свой класс наследник Edit'а. А дальше меняй/дописывай что хочешь. И юзай свой класс.
на C#
public class MyEditBox : System.Windows.Forms.TextBox
IMHO самый простой способ, если только уместно создавать свой класс..
в C++Builder или Delphi
Есть такой замечательный компонент TPopupMenu, а у всех Tedit'ов есть замечательное свойство PopupMenu для подключения к эдиту TPopupMenu....
кидаеш на форму TPopupMenu заполняеш ему итемы выделяеш все едиты и в поле свойств PopupMenu выбираеш компонент PopupMenu1 теперь у всех выделенных едитов будет появляться твое меню.... и обрабатываться тобой)
p.s. возможно я не ясно понял вопрос, но если я его понял правильно то это легкое решение...
p.p.s. если же едитов очень много то лучше написать класс основанный на Tedit и сразу в классе подключить popupmenu с определёнными полями и зарание предустановленной обработкой событий
[n]-c0der
06.07.2009, 21:36
Привет от мазохистов: PopUp меню, которое выпадает по клику, правой кнопки мыши на эдит...
нее вы не поняли. это вообщемто atl получается. вот нашел похожее - но там встраивание в контекстное меню в оболочке. а мне аналогичное встраивание во все обработчики comctl
[n]-c0der
06.07.2009, 21:53
да если честно, я не понял поэтому погадаю немного):
http://www.rsdn.ru/article/qna/controls/editpret.xml
Еси опять не то, тогда сорри.
вот что имею ввиду http://img34.imageshack.us/img34/6726/444444444444444444.png
ну ващет туда (если ты вообще про глобальное меню) добавляется из реестра.
http://www.prjsoft.ru/rus/windows/contextmenu.php
http://bbs.vbstreets.ru/viewtopic.php?p=57055#57055
http://faq.pp.ru/html/delphi_for_professionals/glava31/index6.html
если ты про это )
Я конечно в хуках неочень шарю.Но ИМХО надо перехватывать вызовы контекстного меню от всех эдитов в системе и подменять потом указатель на свое попап меню.Вот в принципе и весь концепт.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot