Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Отловить события раскрытия меню  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

Есть меню, в котором при помощи команды "SET MARK OF BAR nMenuItemNumber OF
MenuName2 TO lExpression3" маркируются пункты меню.

Отслеживать ото всюду надо промаркировать пункт меню или снять данное
выделение не хочется.
Заводить таймер для отслеживания состояния маркировки считаю неправильным.
Кстати, в самой оболочке фокса enebled\disabled кнопок на панели
инструментов, очень похоже, происходит именно по таймеру. По крайней мере
визуально заметна задержка отрисовки.

Внимание вопрос: как отловить момент раскрывания меню пользователем, чтобы в
это время (перед раскрытием меню) проверить состояние системы и при
необходимости промаркировать отдельные пункты меню?


Posted via ActualForum NNTP Server 1.4

17 июл 08, 13:36    [5947919]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Подозреваю что нет такого события, меню не объект потому и перехватить его открытие не удастся.
Думаю надо копать в сторону BINDEVENT() если VFP9
17 июл 08, 13:42    [5947981]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

> Подозреваю что нет такого события, меню не объект потому и
> перехватить его открытие не удастся.

Подозрение такое тоже есть. Думал может есть какой нибудь ON ACTIVATE,
которого я не заметил в help`e.


Posted via ActualForum NNTP Server 1.4

17 июл 08, 14:06    [5948218]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Galyamov Rinat
Подозрение такое тоже есть. Думал может есть какой нибудь ON ACTIVATE,

Как вариант. Вместо
ON PAD ... OF _MSYSMENU ACTIVATE POPUP ....
сделать
ON SELECTION PAD ... OF _MSYSMENU do MY_POPUP
а в MY_POPUP генерить POPUP меню с нужными проверками
Тут с координатами надо будет поразбираться и пункты из горизонтально меню модальность игнорируют.
17 июл 08, 14:30    [5948446]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
po2
Member

Откуда:
Сообщений: 121
В любой версии VFP при активизации меню перед его раскрытием срабатывают все блоки SET SKIP, поэтому повесьте хотя бы на один PAD фиктивный SKIP с пользовательской функцией, которая и будет выполнять задуманное. Только учтите, что есть разница при действиях мышью и клавиатурой. Щелчок мыши будет обработан дважды как при нажатии, так и при отпускании.
17 июл 08, 14:45    [5948592]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

А вот про "повесить на SKIP" я как - то не подумал. Спасибо, сейчас
попробую.


Posted via ActualForum NNTP Server 1.4

18 июл 08, 05:00    [5951404]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
такой подход впринципе неверный. Ибо как я полагаю в зависимости от чека позиции должны или не должны выполнятся какие-то действия. Дык вот вместо того, чтоб анализить через MRKBAR() нужно буит снова опрашивать систему и т.д и т.п. А вот отслеживание и назначение lExpression3 внутри проги - это и понятней и прозрачней для других програмцов, кот придут после
18 июл 08, 08:06    [5951533]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

> такой подход впринципе неверный. Ибо как я полагаю в зависимости от
> чека позиции должны или не должны выполнятся какие-то действия. Дык вот
> вместо того, чтоб анализить через MRKBAR() нужно буит снова опрашивать
> систему и т.д и т.п. А вот отслеживание и назначение lExpression3 внутри
> проги - это и понятней и прозрачней для других програмцов, кот придут
> после


Мысль такая: Есть несколько панелей инструментов. Чек показывает
отображается данная панель или нет. Если отображается, то по пункту меню
скрыть, если нет - то отобразить. Я хочу, чтобы "меню" само смотрело есть
такая панель или нет.

Можно, конечно, в дестрой панели прописать, чтобы она анчекала нужный пункт
меню. Но мне кажется логичнее проверить при отрисовке меню в каком состоянии
должен быть чек.


Posted via ActualForum NNTP Server 1.4

18 июл 08, 09:44    [5951845]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Galyamov Rinat
Мысль такая: Есть несколько панелей инструментов. Чек показывает
отображается данная панель или нет. Если отображается, то по пункту меню
скрыть, если нет - то отобразить. Я хочу, чтобы "меню" само смотрело есть
такая панель или нет.

Можно, конечно, в дестрой панели прописать, чтобы она анчекала нужный пункт
меню. Но мне кажется логичнее проверить при отрисовке меню в каком состоянии
должен быть чек.

Мне наоборот кажется :)
Проще чтобы выбор пункта меню приводил к отображению скрытой панели или скрытию отображенной, а панель рулила своей галочкой в пункте меню.

Я ведь правильно понимаю что панель может быть отображена/скрыта не только из меню? отсюда и потребность допконтроля возникла?

Логичнее рассматривать галочку в меню как свойство панели, а не панель свойством галочки. А выбор пункта меню - одно из управляющих действий. ИМХО.
18 июл 08, 10:18    [5952094]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
XAndy
Member

Откуда: Киев
Сообщений: 326
Меню, тулбары, панели и проч. есть отражение состояния каких-то бизнес-объектов. Можно напрямую не дергать никакие меню и т.д., а управлять состоянием бизнес-объектов, а уже последние должны уметь отображать своё состояние везде.

В небольших проектах такой подход скорее не целесообразен из-за излишней сложности, но по мере роста проекта может сильно облегчить жизнь.
18 июл 08, 11:21    [5952640]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

Да хочется зделать "блоками".

Скажем форма не обязана знать, что есть какие то панели меню чтобы разрешить
или запретить какие - то кнопки на панелях (тем более, что кол-во панелей
планируется увеличивать). Есть функция refresh_toolBar - она вызывается на
activate deactivate формы. Вот эта функция продергивает панели, а они уже
сами смотрят на активную форму и смотрят что форма умеет, а чего нет. На то
что форма не умеет - кнопки на панели лочатся.

Так же и с меню. Панель не обязана знать, откуда есть на нее ссылки (меню,
другие панели и прочее). А меню (раз уж там есть управляющие команды для
панелей) должно уметь посмотреть текущее состояние панелей. С чем set skip
замечательно справился.

В общем, ИМХО, вопрос религии, т.к. действительно в ините и дестрое самой
панели можно прописать чек/анчек пункта меню.


Posted via ActualForum NNTP Server 1.4

18 июл 08, 11:23    [5952663]     Ответить | Цитировать Сообщить модератору
 Re: Отловить события раскрытия меню  [new]
XAndy
Member

Откуда: Киев
Сообщений: 326
Galyamov Rinat
Это так, если форма сама себе командир. А можно завести внешний управляющий бизнес-класс, который умеет создавать свою форму, содержит все методы для обработки своих данных, управляет своим пунктом меню, своей кнопкой в тулбаре и т.д., - ни форма, ни меню, ни тулбар не должны ничего друг о друге знать, они пользуются методами и свойствами своего бизнес-класса. Другой подход.
18 июл 08, 12:44    [5953672]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить