Конференция "WinAPI" » непростое контекстное меню [D7, WinXP]
 
  • mistic (01.08.08 10:19) [0]
    Как добавить пункт в системное меню windows, но не в обычное меню вызываемое alt+space а меню editов и memo, в котором пункты вырезать вставить копировать?
  • Leonid Troyanovsky © (01.08.08 10:35) [1]

    > mistic   (01.08.08 10:19)  

    > Как добавить пункт в системное меню windows

    Не надо туда ничего добавлять.

    С помощью TActionList подобным меню можно снабдить нужные контролы
    за пару минут, не написав ни строки кода.

    --
    Regards, LVT.
  • mistic (01.08.08 10:39) [2]
    я имею в виду, не в свое приложение, а в общее конктекстное меню всех приложений windows появляющихся в editax.
  • mistic (01.08.08 10:41) [3]
    возможно как то нужно модифицировать команду
    AppendMenu (GetSystemMenu (Form1.Handle, False), MF_SEPARATOR, 0, '');
  • Leonid Troyanovsky © (01.08.08 10:49) [4]

    > mistic   (01.08.08 10:39) [2]

    Считай, что это нереально.

    --
    Regards, LVT.
  • mistic (01.08.08 11:41) [5]
    Думаю  в дельфи все реально, возможно нужно задействовать сом обьекты...
    или вместо GetSystemMenu может есть какой нибудь getsystempopupmenu...
    выход должен быть...
  • Leonid Troyanovsky © (01.08.08 12:57) [6]

    > mistic   (01.08.08 11:41) [5]

    > выход должен быть...

    Ну-ну.

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

    --
    Regards, LVT.
  • mistic (01.08.08 13:12) [7]
    у меня за пунктами вырезать вставить копировать удалить и выделить все, идут пункты "порядок чтения:спраава налево", "показать управляющие символы юникода".
    если какая то программа может вставить туда свои пункты, то и мы можем, я так думаю!
  • Anatoly Podgoretsky © (01.08.08 14:26) [8]
    > mistic  (01.08.2008 13:12:07)  [7]

    > мы можем

    Ты это про кого.
  • Сергей М. © (01.08.08 14:37) [9]

    > меню всех приложений windows


    Интересно, и что же все приложения windows обязаны будут сделать при клике юзера на невесть откуда появившемся у ихних Edit-контроов пункте конт.меню "показать управляющие символы юникода" ?
  • mistic (01.08.08 14:57) [10]

    > Интересно, и что же все приложения windows обязаны будут
    > сделать при клике юзера на невесть откуда появившемся у
    > ихних Edit-контроов пункте конт.меню "показать управляющие
    > символы юникода" ?

    вставить определенный текст.
    будет несколько пунктов, на одном я бы не заморачивался.
  • mistic (01.08.08 15:12) [11]

    > Ты это про кого.

    про дельфийстов
  • Anatoly Podgoretsky © (01.08.08 16:20) [12]
    > mistic  (01.08.2008 14:57:10)  [10]

    В русском языке Вставить и Показать - это разные слова с разным смыслом.
  • Anatoly Podgoretsky © (01.08.08 16:23) [13]

    > будет несколько пунктов, на одном я бы не заморачивался.

    Разница между несколькими и один чисто экстенсивная.
  • Сергей М. © (01.08.08 16:52) [14]

    > вставить определенный текст


    Откуда, к примеру, приложение Notepad узнает, что при клике на это меню нужно что-то куда-то "вставить" ?)
  • Anatoly Podgoretsky © (01.08.08 16:57) [15]
    > Сергей М.  (01.08.2008 16:52:14)  [14]

    Вставка делается через посылку сообщений, а Notepad работает через сообщения. В Notepad стандартный MEMO компонент Виндоус.
  • Сергей М. © (01.08.08 17:08) [16]

    > Anatoly Podgoretsky ©   (01.08.08 16:57) [15]


    Причем здесь это ?)

    Я про реакцию контрола на клик невесть откуда взявшегося пункта меню)
  • Anatoly Podgoretsky © (01.08.08 20:01) [17]
    > Сергей М.  (01.08.2008 17:08:16)  [16]

    Как думаешь, каким образом реагирует Дельфи на чужое, внешнее меню, для TEdit

    Ответ на вопрос, который немного старее Дельфи - встроить туда свои пункты нельзя, поскольку данное меню HardCoded - единственный путь это написать свое, но это не решает проблемы встраивания в другие приложения. Для расширений файлов это решаемая задача, для компонент Виндоус решение неизвестно.
  • Сергей М. © (01.08.08 20:52) [18]

    > Anatoly Podgoretsky ©   (01.08.08 20:01) [17]


    > каким образом реагирует Дельфи на чужое, внешнее меню


    Никаким.

    Толя, ты вообще мне что доказать хочешь ? Очевидное ?)

    Очевидно ведь одно - чужое приложение знать не знает ни про какие чудеса в некоем контекстном меню некоего своего контрола, хоть стандартного виндового хоть любого другого.
  • Anatoly Podgoretsky © (01.08.08 21:15) [19]
    > Сергей М.  (01.08.2008 20:52:18)  [18]

    Я доказать не хочу, я прямо говорю забудь дорогу всяк сюда попавший.
  • KilkennyCat © (01.08.08 22:01) [20]
    Я бы не хотел, чтобы в мои приложения что-то так нагло вставилось.
    Так что, если найдет решение, сообщите мне, пожалуйста, че я должен дописать в свои программульки, чтобы это решение у меня не сработало. Очень уж я придирчив к интерфейсу.
  • mistic (04.08.08 09:03) [21]
    значит невозможно.
    чтож будем идти обходным путем, писать свой popup и посылать команду вставки активному контролу.
  • mistic (04.08.08 09:53) [22]
    Кстати, как тогда это возможно?
    http://img.muffs.ru/imgstore/D605q895T_1217829135_w638410
  • Cobalt (04.08.08 22:16) [23]
    Дело в том, что есть стандартные контролы, поведение которых прописано в Comctrl32.dll.
    Вот это есть стандартное меню Виндовс для контрола Edit.
    Программы могут переопределять поведение контролов по своему усмотрению (у себя, конечно).
  • CodeMonkey © (08.08.08 11:24) [24]

    > Как добавить пункт в системное меню windows

    Это невозможно. За стандартное меню на edit-контролах отвечает система. Никакими средствами получить хэндл этого меню для модификации нельзя. Стандартное меню не ловится хуками, для него не рассылаются стандартные сообщения (типа WM_INITMENUPOPUP) и т.п. Возможно, это сделано специально, чтобы программисты не мутили с этим (как известно - дай только людям в руки возможность - и они обязательно воспользуются ей неправильно).
    Единственный метод - установить полностью своё меню с эмулированными стандартными пунктами. Проблема в том, что нужно, во-первых, делать пункты локализованными, а во-вторых, учитывать наличие дополнительных unicode-меню (и прочих дополнительных пунктов, если они есть).


    > Кстати, как тогда это возможно? http://img.muffs.ru/imgstore/D605q895T_1217829135_w638410

    Что не так с этим меню? Это - системное меню и система распоряжается им по своему усмотрению. Очевидно, что она может добавить сколько угодно пунктов. В частности, при установке поддержки письма слева-направо и т.п. она добавляет туда эти пункты. Это ни разу не означает, что вы можете менять это меню.
 
Конференция "WinAPI" » непростое контекстное меню [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]