|
|
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
На форме несколько ButtonedEdit, RightButton.DropDownMenu каждого эдита связан с одним и тем же PopupMenu с несколькими MenuItem. Как узнать на кнопке какого эдита был кликнут пункт меню? Пробовал так: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:36 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYingКак узнать на кнопке какого эдита был кликнут пункт меню? А как ты это меню открываешь? F1Set PopupComponent to associate a control with the menu before calling the Popup method programmatically to bring up the pop-up menu. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:40 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, т.е. помимо связи RightButton.DropDownMenu эдита с PopupMenu, нужно еще и св-во PopupMenu самого эдита связать с этим же попапом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:45 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Так тоже не работает. "А как ты это меню открываешь?" - клик по правой кнопке ButtonedEdit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:51 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYing, у PopupMenu есть свойство PopupComponent Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:52 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYing, если у тебя какие-то кастомные компоненты, то весь вопрос к их создателям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:53 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)LiYing, если у тебя какие-то кастомные компоненты, то весь вопрос к их создателям Только родные делфовые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:56 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYingпомимо связи RightButton.DropDownMenu эдита с PopupMenu У стандартного эдита нет ни свойства RightButton, ни свойства DropDownMenu. Что возвращает нас к вопросу о левых компонентах. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:04 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYing, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Как видим TEditButton игнорирует PopupComponent, поэтому узнать кто вызывает меню не получится никак. Разве что если сделать полностью свой класс TEditButton, т.к. тип TGlyph амба зачем-то засунула в приватную секцию этого класса, т.е. даже в наследнике до неё не добраться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:28 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYing, Как вариант - убрать DropDownMenu, назначить OnClick() и там вручную вызывать PopupMenu с присвоением ей нужного PopupComponent. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:31 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovLiYingпомимо связи RightButton.DropDownMenu эдита с PopupMenu У стандартного эдита нет ни свойства RightButton, ни свойства DropDownMenu. Что возвращает нас к вопросу о левых компонентах. http://docwiki.embarcadero.com/Libraries/Rio/en/Vcl.ExtCtrls.TButtonedEdit это левый компонент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 20:04 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 20:25 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
DimaBr, А если с клавиатуры откроют? Хотя не факт, что это возможно с этим контролом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 20:49 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYingэто левый компонент? Да. Они его спёрли то ли у Rz то ли у джедаев. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 21:33 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа. Они его спёрли то ли у Rz то ли у джедаев. Нууу... так можно договориться о черт знает чем... Всем спасибо за обсуждение и предложенные решения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 08:06 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Вот не могу в моск взять, какие могут быть проблемы с определением подлежащего или порождающего контрола. Есть курсор. Всегда можно узнать, над чем он находится. Например, в treeview на какой-то ветке вызывается попап. Всегда можно заюзать NodeAT. А тривиальные способы описаны в учебниках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 09:34 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Почему так ? Код: pascal 1. 2. Здесь в PopupPoint попадают координаты выпадения меню. Экспериментально (возможно из-за того, что у меня картинки больше ButtonEdit) меню появляется чуть ниже компонента и по координатам PopupMenu1.PopupPoint функция ControlAtPos ничего не находит. Поэтому я немного сдвинул координату вверх Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 09:38 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
GatorЕсть курсор. Всегда можно узнать, над чем он находится. Например, в treeview на какой-то ветке вызывается попап. Всегда можно заюзать NodeAT. А ещё есть комбинации клавиш на клавиатуре, которые или имитируют нажатие правой кнопки мыши на активном контроле (а не под курсором) или вообще вызывают всплывающее меню без нажатия кнопок мыши - например пробел для кнопок с DropDownMenu по-умолчанию. Но зачем нам учитывать такие случаи, они ведь не случатся никогда-никогда, а если и случатся то пользователь сам дурак, верно? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 09:50 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
OnContextPopup? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 10:15 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
alekcvp> ... без нажатия кнопок мыши - например пробел ... А какая разница? На форме всегда есть что-то активное. Допустим, на мемо вертикально расположен алфавит. И ты ползаешь стрелками по нему, как на лифте, вверх/вниз. И ты всегда знаешь, на какой строке ты находишься (по её индексу, например) Жмакай хоть пробел, хоть [Alt]+? Так что точка показа попапменю всегда под контролем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 12:06 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
GatorЕсть курсор. Всегда можно узнать, над чем он находится. Вот только "над чем он находится сейчас" и "над чем он находился в момент клика" это две большие разницы. Две типичные ошибки новичка складываются и в результате программы при кислородном процессорном голодании ведут себя совершенно сумасшедшим образом. Не надо так делать. А если и приспичило, координаты надо брать не текущие, а те, что пришли в сообщении WM_LBUTTONDOWN. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 12:44 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, абсолютно согласен. Я к тому, что позицию попапа можно всегда вычислить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 13:20 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYingтак можно договориться о черт знает чем... О том, что в VCL внезапно есть баги? Да, в ней туева прорва багов. Если этот - первый на которого ты нарвался, то ты либо нуб, либо везунчик. Теперь придётся пересматривать своё мировоззрение и архитектуру программы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 13:21 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
GatorЯ к тому, что позицию попапа можно всегда вычислить. Но это не поможет аффтару с его задачей связать попап с конкретным компонентом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 13:41 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Так компонента может не быть вовсе. афтар, скорее всего имеет в виду "элемент графического интерфейса". В конце концов. у компонентов есть их координаты на известна точка клика. Что ещё надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 13:58 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:00 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Gatorу компонентов есть их координаты на известна точка клика. И вот тут мы начинаем второй раунд с того, что точка клика неизвестна. Ибо VCL вследствие криворукости своих разработчиков плюёт на координаты, приходящие с сообщением о клике. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:04 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Еще можно выяснить Screen.ActiveControl; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:30 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov,ну и не надо к ним привязываться, а придумать сто-нибудь своё. На примере ТриВью, например, видно, что выделенных веток может быть много, с галками и без, может не быть совсем, но это не повод отказываться от попапа. (причем не только меню, но и текста, картинки, ещё чего-то) Не координатами механизм жив однако и не контролами едиными. Вот например, в DataSource жмакнуть невозможно, потому что он невизуальный. Но работать и попапить можно его свойства и другую трехмудию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:31 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
22.08.2019 14:30, rgreat пишет: > Еще можно выяснить Screen.ActiveControl; нет Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:34 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
rgreatможно выяснить Screen.ActiveControl; "О, сколько нам открытий чудных..." При правом клике контрол не получает фокус. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:34 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПри правом клике контрол не получает фокус. Это смотря какой контрол. Тут все решения не дают 100% результата. Да и не могу дать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:38 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
В общем топикстартеру ответ "это так не работает". Надо вручную вызывающий контрол запоминать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:40 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
rgreatТут все решения не дают 100% результата. Есть решение, дающее 100% результат: пофиксить бага в VCL. Но оно недоступно для аффтара. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 14:47 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Gatoralekcvp> ... без нажатия кнопок мыши - например пробел ... А какая разница? .... Жмакай хоть пробел, хоть [Alt]+? Так что точка показа попапменю всегда под контролем. Такая, что код выше анализирует положение указателя мыши чтобы определить кем было открыто меню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:35 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
alekcvpТакая, что код выше анализирует положение указателя мыши чтобы определить кем было открыто меню. А, не, пиз туплю, точку всплытия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:36 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
alekcvpalekcvpТакая, что код выше анализирует положение указателя мыши чтобы определить кем было открыто меню. А, не, пиз туплю, точку всплытия...Да. А координаты можно всегда указать в терминах экрана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:55 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕсть решение, дающее 100% результат: пофиксить бага в VCL. Но оно недоступно для аффтара. Для сторонних компонентов это не гарантирует результат. Да и при вызове PopupMenu1.Popup(100,100); ручками - тоже никак не спасет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 18:24 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
rgreatДа и при вызове PopupMenu1.Popup(100,100); ручками - тоже никак не спасет.Это смотря как (100,100) считать, в каких единицах и т.п. Я предлагал "от печки" (0, 0) видимой области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 21:28 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
GatorЭто смотря как (100,100) считать, в каких единицах и т.п. Я предлагал "от печки" (0, 0) видимой области.Какая разница как считать если в данном случае вообще нет связи ни с какими визуальными компонентами. Попап просто вызывается сам по себе. В центре экрана по таймеру, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 21:45 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
rgreatПопап просто вызывается сам по себе. А теперь перечитываем вышеотквоченную справку: "тот, кто вызовет попап ручками, несёт полную ответственность за установку или неустановку свойства PopupComponent". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 21:55 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
rgreat, я и говорю. Вопрос из пальца высосан. Афтрар ведь на экран смотрит, там и щёлкает мышой или кнопки жмакает. А куда он попапку высветит - его видение. И причём тут контролы и компоненты?. Достаточно мессаг и координат на форме. А если формы нет, попапка повиснет в воздухе. ОС ещё никому отменить не удалось. Разве что программы-мониторы. Но там ни экранов не было, ни ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 21:57 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Другими словами в общем случае задача не решаема. А частные случаи решений тут все уже небось поперечисляли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 06:04 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYingНа форме несколько ButtonedEdit, RightButton.DropDownMenu каждого эдита связан с одним и тем же PopupMenu с несколькими MenuItem. Как узнать на кнопке какого эдита был кликнут пункт меню? Пробовал так: ... День добрый. Если все компоненты однотипные ("несколько ButtonedEdit"), то решается след. образом. Заводится глобальная переменная, например: Код: pascal 1. Делаем процедуру (имя придумаешь сам...): Код: pascal 1. 2. 3. 4. При создании формы (или при показе) - к каждому компоненту на событие onEnter цепляем эту процедуру: Код: pascal 1. 2. 3. 4. 5. Как работает: При клацанье мышью, у компонента происходит событие onEnter, в нем в переменную заносится тот объект, на котором сработало это событие. Т.е. после вызова твоего по-папа, можно узнать из переменной на чем оно сработало. Вот и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 14:26 |
|
||
|
Как узнать на каком контроле кликнут элемент попапменю?
|
|||
|---|---|---|---|
|
#18+
LiYing проект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 14:34 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039100]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 525ms |

| 0 / 0 |
