Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   как добавить свой обработчик в стандартное меню edit контролов (https://forum.antichat.xyz/showthread.php?t=128585)

sn0w 06.07.2009 19:53

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

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

Gar|k 06.07.2009 20:38

есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на wasm [1] [2] и вроде не плохая для delphi

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

W!z@rD 06.07.2009 20:38

Цитата:

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

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

примеры на C#.
имхо самый простой способ это в RunTime привязать.

Примерно так:
PHP код:

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")});
                }
            }
        } 

Либо наследоваться от контрола и в конструкторе сделать привязку.
PHP код:

public class MyClass TextBox
    
{
        public 
MyClass()
        {
            
this.ContextMenu = new ContextMenu(new [] {new MenuItem("button1"), new MenuItem("button2")});
        }
    } 


было 666 сообщений :(

sn0w 06.07.2009 20:50

Цитата:

Сообщение от Gar|k
есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
вот хорошая статья на wasm [1] [2] и вроде не плохая для delphi

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

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

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
Еси опять не то, тогда сорри.


Время: 12:20