PDA

Просмотр полной версии : как добавить свой обработчик в стандартное меню edit контролов


sn0w
06.07.2009, 19:53
ну типа, правой кнопкой щелкаем на эдите - и вылазит - вставить, вырезать, етц. ток нужно это глобально, чтоб во всех эдитах работало. типа своего обработчика.

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

Gar|k
06.07.2009, 20:38
есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на 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
06.07.2009, 20:38
ну типа, правой кнопкой щелкаем на эдите - и вылазит - вставить, вырезать, етц. ток нужно это глобально, чтоб во всех эдитах работало. типа своего обработчика.

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

примеры на 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 сообщений :(

sn0w
06.07.2009, 20:50
есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на 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)

ну это я вижу решение этой проблемы в создании собственного элемента окна... возможно есть другие пути... но я точно уверен что эта тема сработает )

ну да, но не совсем то, но все равно сенкс!

sn0w
06.07.2009, 20:54
W!z@rD а у меня блин 333)

вот на шарпе я увы не втыкаю %) апибы)

Feonor
06.07.2009, 21:01
Я бы сделал свой класс наследник Edit'а. А дальше меняй/дописывай что хочешь. И юзай свой класс.
на C#
public class MyEditBox : System.Windows.Forms.TextBox
IMHO самый простой способ, если только уместно создавать свой класс..

KIR@PRO
06.07.2009, 21:17
в 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 меню, которое выпадает по клику, правой кнопки мыши на эдит...

sn0w
06.07.2009, 21:44
нее вы не поняли. это вообщемто atl получается. вот нашел похожее - но там встраивание в контекстное меню в оболочке. а мне аналогичное встраивание во все обработчики comctl

[n]-c0der
06.07.2009, 21:53
да если честно, я не понял поэтому погадаю немного):

http://www.rsdn.ru/article/qna/controls/editpret.xml
Еси опять не то, тогда сорри.

sn0w
08.07.2009, 13:50
вот что имею ввиду http://img34.imageshack.us/img34/6726/444444444444444444.png

Gar|k
08.07.2009, 14:29
ну ващет туда (если ты вообще про глобальное меню) добавляется из реестра.

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

если ты про это )

_nic
08.07.2009, 14:53
Я конечно в хуках неочень шарю.Но ИМХО надо перехватывать вызовы контекстного меню от всех эдитов в системе и подменять потом указатель на свое попап меню.Вот в принципе и весь концепт.