Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
Имеется динамически создаваемый грид для которого имеется попапменю. И если хотя-бы один раз вызвать это попамменю, то все хорошо, свойство PopupControl получает ссылку на владельца, но вот если обратится по горячей клавише к элементу меню, без предварительного его вызова, то PopupControl имеет уже значение nil, что в общем-то логично ведь меню то не вызывалось, но как же мне в таком случае добраться до контрола-владельца без вызова попапменю?
4 дек 18, 11:55    [21752725]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
DimaBr
Member

Откуда:
Сообщений: 10780
Привязать меню к гриду, например через Tag
4 дек 18, 12:56    [21752810]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
alekcvp
Member

Откуда:
Сообщений: 1197
Через Form.ActiveControl? Или пункт меню может быть вызван даже не для активного грида?..
4 дек 18, 13:13    [21752830]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1682
Страдалецъ,

присвоить значение PopupComponent пробовал?
4 дек 18, 13:21    [21752839]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12558
Страдалецъ
свойство PopupControl получает ссылку на владельца


почему при создании сетки сразу нельзя указать нужное меню, которое будет привязано к сетке?
4 дек 18, 17:42    [21753471]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
Спасибо за участие в мозговом штурме.
автор
присвоить значение PopupComponent пробовал?
нет не пробовал, а идея здравая, жаль только не сработала. Все равно имеем PopupComponent=nil в обработчике, при активации горячей клавишей.

Form.ActiveControl я бы рад использовать, но я то как раз и пытаюсь через обработчик попапменю добраться хоть до чего-то кроме самого попапменю, а сие возможно только через PopupComponent который зараза пустой.

автор
почему при создании сетки сразу нельзя указать нужное меню, которое будет привязано к сетке
как-то мне категорически не нравится идея создать десяток попамменю делающих одно и то-же и прицепить каждое к своему гриду. У меня одно попапменю которое привязано к десятку разных гридов.
5 дек 18, 01:06    [21753838]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
автор
Привязать меню к гриду, например через Tag
не сработает, т.к. этот таг просто неоткуда взять в обработчике, контекста формы то и нет в нем.
5 дек 18, 01:10    [21753841]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
DimaBr
Member

Откуда:
Сообщений: 10780
Страдалецъ
У меня одно попапменю которое привязано к десятку разных гридов.

И какое срабатывает по горячей клавише ?
5 дек 18, 01:33    [21753850]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1682
Страдалецъ
Спасибо за участие в мозговом штурме.
автор
присвоить значение PopupComponent пробовал?
нет не пробовал, а идея здравая, жаль только не сработала. Все равно имеем PopupComponent=nil в обработчике, при активации горячей клавишей.

Form.ActiveControl я бы рад использовать, но я то как раз и пытаюсь через обработчик попапменю добраться хоть до чего-то кроме самого попапменю, а сие возможно только через PopupComponent который зараза пустой.

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


а проверить присвоенное значение PopupComponent пробовал?
5 дек 18, 09:39    [21753959]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1682
а написать обработчик OnPopup пробовал?
5 дек 18, 09:49    [21753968]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Василий 2
Member

Откуда:
Сообщений: 303
Если у тебя одно меню м.б. привязано к нескольким гридам, то как ты хочешь определить конкретный грид?
Если привязка 1:1, то можно просто перебором Components искать, у кого PopupMenu совпадает с владельцем пункта-Sender-а
5 дек 18, 10:10    [21753989]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Василий 2
Member

Откуда:
Сообщений: 303
Страдалецъ
Form.ActiveControl я бы рад использовать, но я то как раз и пытаюсь через обработчик попапменю добраться хоть до чего-то кроме самого попапменю, а сие возможно только через PopupComponent который зараза пустой.

Есть же Owner
5 дек 18, 10:12    [21753993]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
s62
Member

Откуда: Жуковский
Сообщений: 855
Страдалецъ,

на всякий случай, "попапменю" - всплывающее меню, контекстное меню.
5 дек 18, 15:41    [21754557]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
автор
а написать обработчик OnPopup пробовал?

Да я много чего уже перепробовал, все и не перечислишь, но пока решения найти не получается.
1. Использовать OnPopup не поможет т.к. никакого события OnPopup не наступает при использовании горячих клавиш.
2. Owner использовать не получается т.к. свойство это ридонли, а само меню создано статически в датамодуле и владельцем соответственно является датамодуль, а не грид.
3. Sender в обработчике события это элемент меню и это нас выводит к меню владельцем которого является датамодуль.

Вот такая сказка про белого бычка.
6 дек 18, 03:31    [21755236]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
alekcvp
Member

Откуда:
Сообщений: 1197
Страдалецъ
2. Owner использовать не получается т.к. свойство это ридонли, а само меню создано статически в датамодуле и владельцем соответственно является датамодуль, а не грид.

ССЗБ так делать.
Как вариант - при активации (фокусе) формы с гридом делай PopupMenu.Tag := NativeInt(Self); тогда в обработчике меню можно будет сделать TForm(((Sender as TMenuItem).Owner as TPopupMenu)).Tag) ...
6 дек 18, 10:20    [21755431]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6127
Страдалецъ,

По идее - остается только угадывать.
Берешь активную форму, ищещь на ней грид, который имеет фокус - к нему применяешь команду, которая прилетела. Если не нашел грид - ну, значит "не шмогла...".
6 дек 18, 10:33    [21755450]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Василий 2
Member

Откуда:
Сообщений: 303
Тогда ActiveForm, да. А еще поучиться выдавать всю информацию, чтобы не пришлось вытаскивать клещами по кусочкам
6 дек 18, 10:49    [21755483]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2964
Страдалецъ,
автор
а само меню создано статически в датамодуле и владельцем соответственно является датамодуль, а не грид

Картинка с другого сайта.
Вначале трудности себе создаём, а потом героически их решаем.
6 дек 18, 11:02    [21755505]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1682
Страдалецъ
автор
а написать обработчик OnPopup пробовал?

Да я много чего уже перепробовал, все и не перечислишь, но пока решения найти не получается.
1. Использовать OnPopup не поможет т.к. никакого события OnPopup не наступает при использовании горячих клавиш.
2. Owner использовать не получается т.к. свойство это ридонли, а само меню создано статически в датамодуле и владельцем соответственно является датамодуль, а не грид.
3. Sender в обработчике события это элемент меню и это нас выводит к меню владельцем которого является датамодуль.

Вот такая сказка про белого бычка.


KeyPreview пробовал?
AppMessage пробовал?
6 дек 18, 11:09    [21755521]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
makhaon в чем вы видите трудности мною созданные? Абсолютно без разницы, где я popupmenu изначально размещу, но все общие элементы удобнее хранить в отдельном контейнере, что я и делаю.
6 дек 18, 14:34    [21755846]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
А вот предложение alekcvp, с небольшими доработками, вполне похоже жизнеспособно. Ранее было предложение использовать Tag, но несколько иначе и я его сразу отбросил, а зря - был неправ. Тестирую, пока косяков не замечаю, работает как надо. Всем спасибо за потраченное время.
6 дек 18, 14:55    [21755879]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
s62
Member

Откуда: Жуковский
Сообщений: 855
Страдалецъ,

с самого начала задача не была сформулирована (предполагаю, может быть и не осознана) четко. Если одно меню на несколько форм/таблиц(гридов), то чтобы меню адекватно работало, нужно, чтобы к моменту его вызова была указана информация, к какому элементу управления меню вызывается. Раз эти данные уже должны быть, то значит их нужно указать 1) в какой-то момент раньше. И каким-то образом передать их в меню и 2) сохранить там. Чтобы при вызове эти данные использовать.
И вот решение этой задачи, как предложил alekcvp: момент передачи - активация формы, а сохранять данные - в Tag.
6 дек 18, 15:19    [21755926]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
s62
Member

Откуда: Жуковский
Сообщений: 855
s62,
*к моменту его вызова - к моменту его вызова с помощью горячих клавиш (если меню вызывается по клику на элементе управления, то информацию можно передать в этот момент)
6 дек 18, 15:22    [21755935]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1347
Как оказалось, не все так хорошо и с тагом. А вот простое решение использовать Screen.ActiveControl, оказалось рабочим. alekcvp почти попал в точку предложив еще в самом начале Form.ActiveControl.
8 дек 18, 00:29    [21757703]     Ответить | Цитировать Сообщить модератору
 Re: Как получить контрол источник для попапменю без вызова попамменю?  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1682
Страдалецъ
Как оказалось, не все так хорошо и с тагом. А вот простое решение использовать Screen.ActiveControl, оказалось рабочим. alekcvp почти попал в точку предложив еще в самом начале Form.ActiveControl.


исходники показал бы, чтоб не приходилось гадать, что там у тебя получилось
8 дек 18, 00:38    [21757706]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить