Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отловить события раскрытия меню / 12 сообщений из 12, страница 1 из 1
17.07.2008, 13:36
    #35436624
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Есть меню, в котором при помощи команды "SET MARK OF BAR nMenuItemNumber OF
MenuName2 TO lExpression3" маркируются пункты меню.

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

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.07.2008, 13:42
    #35436656
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Подозреваю что нет такого события, меню не объект потому и перехватить его открытие не удастся.
Думаю надо копать в сторону BINDEVENT() если VFP9
...
Рейтинг: 0 / 0
17.07.2008, 14:06
    #35436754
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
> Подозреваю что нет такого события, меню не объект потому и
> перехватить его открытие не удастся.

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.07.2008, 14:30
    #35436845
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Galyamov RinatПодозрение такое тоже есть. Думал может есть какой нибудь ON ACTIVATE,
Как вариант. Вместо
Код: plaintext
ON PAD ... OF _MSYSMENU ACTIVATE POPUP ....
сделать
Код: plaintext
ON SELECTION PAD ... OF _MSYSMENU do MY_POPUP
а в MY_POPUP генерить POPUP меню с нужными проверками
Тут с координатами надо будет поразбираться и пункты из горизонтально меню модальность игнорируют.
...
Рейтинг: 0 / 0
17.07.2008, 14:45
    #35436908
po2
po2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
В любой версии VFP при активизации меню перед его раскрытием срабатывают все блоки SET SKIP, поэтому повесьте хотя бы на один PAD фиктивный SKIP с пользовательской функцией, которая и будет выполнять задуманное. Только учтите, что есть разница при действиях мышью и клавиатурой. Щелчок мыши будет обработан дважды как при нажатии, так и при отпускании.
...
Рейтинг: 0 / 0
18.07.2008, 05:00
    #35438125
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
А вот про "повесить на SKIP" я как - то не подумал. Спасибо, сейчас
попробую.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18.07.2008, 08:06
    #35438173
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
такой подход впринципе неверный. Ибо как я полагаю в зависимости от чека позиции должны или не должны выполнятся какие-то действия. Дык вот вместо того, чтоб анализить через MRKBAR() нужно буит снова опрашивать систему и т.д и т.п. А вот отслеживание и назначение lExpression3 внутри проги - это и понятней и прозрачней для других програмцов, кот придут после
...
Рейтинг: 0 / 0
18.07.2008, 09:44
    #35438328
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
> такой подход впринципе неверный. Ибо как я полагаю в зависимости от
> чека позиции должны или не должны выполнятся какие-то действия. Дык вот
> вместо того, чтоб анализить через MRKBAR() нужно буит снова опрашивать
> систему и т.д и т.п. А вот отслеживание и назначение lExpression3 внутри
> проги - это и понятней и прозрачней для других програмцов, кот придут
> после


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

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18.07.2008, 10:18
    #35438422
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Galyamov RinatМысль такая: Есть несколько панелей инструментов. Чек показывает
отображается данная панель или нет. Если отображается, то по пункту меню
скрыть, если нет - то отобразить. Я хочу, чтобы "меню" само смотрело есть
такая панель или нет.

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

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

Логичнее рассматривать галочку в меню как свойство панели, а не панель свойством галочки. А выбор пункта меню - одно из управляющих действий. ИМХО.
...
Рейтинг: 0 / 0
18.07.2008, 11:21
    #35438622
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Меню, тулбары, панели и проч. есть отражение состояния каких-то бизнес-объектов. Можно напрямую не дергать никакие меню и т.д., а управлять состоянием бизнес-объектов, а уже последние должны уметь отображать своё состояние везде.

В небольших проектах такой подход скорее не целесообразен из-за излишней сложности, но по мере роста проекта может сильно облегчить жизнь.
...
Рейтинг: 0 / 0
18.07.2008, 11:23
    #35438633
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Да хочется зделать "блоками".

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

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

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18.07.2008, 12:44
    #35438999
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить события раскрытия меню
Galyamov Rinat
Это так, если форма сама себе командир. А можно завести внешний управляющий бизнес-класс, который умеет создавать свою форму, содержит все методы для обработки своих данных, управляет своим пунктом меню, своей кнопкой в тулбаре и т.д., - ни форма, ни меню, ни тулбар не должны ничего друг о друге знать, они пользуются методами и свойствами своего бизнес-класса. Другой подход.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отловить события раскрытия меню / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]