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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 6 Jul 2009.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ну типа, правой кнопкой щелкаем на эдите - и вылазит - вставить, вырезать, етц. ток нужно это глобально, чтоб во всех эдитах работало. типа своего обработчика.

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

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    есть такая тема как саббклассинг (контроль сообщений окон путем модификации оконной процедуры последних) и суперклассинг (создание и регистрация нового класса окна в системе).
    вот хорошая статья на wasm [1] [2] и вроде не плохая для delphi

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

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    примеры на 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 сообщений :(
     
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ну да, но не совсем то, но все равно сенкс!
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    W!z@rD а у меня блин 333)

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

    Feonor Elder - Старейшина

    Joined:
    23 Jul 2008
    Messages:
    128
    Likes Received:
    52
    Reputations:
    19
    Я бы сделал свой класс наследник Edit'а. А дальше меняй/дописывай что хочешь. И юзай свой класс.
    на C#
    Code:
    public class MyEditBox : System.Windows.Forms.TextBox
    IMHO самый простой способ, если только уместно создавать свой класс..
     
  7. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    825
    Likes Received:
    287
    Reputations:
    359
    в C++Builder или Delphi
    Есть такой замечательный компонент TPopupMenu, а у всех Tedit'ов есть замечательное свойство PopupMenu для подключения к эдиту TPopupMenu....

    кидаеш на форму TPopupMenu заполняеш ему итемы выделяеш все едиты и в поле свойств PopupMenu выбираеш компонент PopupMenu1 теперь у всех выделенных едитов будет появляться твое меню.... и обрабатываться тобой)


    p.s. возможно я не ясно понял вопрос, но если я его понял правильно то это легкое решение...

    p.p.s. если же едитов очень много то лучше написать класс основанный на Tedit и сразу в классе подключить popupmenu с определёнными полями и зарание предустановленной обработкой событий
     
    _________________________
  8. [n]-c0der

    [n]-c0der Member

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    24
    Reputations:
    -1
    Привет от мазохистов: PopUp меню, которое выпадает по клику, правой кнопки мыши на эдит...
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    нее вы не поняли. это вообщемто atl получается. вот нашел похожее - но там встраивание в контекстное меню в оболочке. а мне аналогичное встраивание во все обработчики comctl
     
  10. [n]-c0der

    [n]-c0der Member

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    24
    Reputations:
    -1
    да если честно, я не понял поэтому погадаю немного):

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    вот что имею ввиду http://img34.imageshack.us/img34/6726/444444444444444444.png
     
  12. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    ну ващет туда (если ты вообще про глобальное меню) добавляется из реестра.

    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

    если ты про это )
     
    _________________________
    #12 Gar|k, 8 Jul 2009
    Last edited: 8 Jul 2009
  13. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я конечно в хуках неочень шарю.Но ИМХО надо перехватывать вызовы контекстного меню от всех эдитов в системе и подменять потом указатель на свое попап меню.Вот в принципе и весь концепт.