Присвоение значений переменной при выборе пункта меню

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Необходимо при выборе того или иного пункта меню (Frame) присваивать некоторой глобальной переменной значения, зависящие от выбранного пункта меню. Не могу найти точку вставки где бы можно было это сделать. Работаю с С5.5g
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Сообщение Admin »

При редактировании пункта меню.
Закладка Action
Кнопка Embed
Там все точки вставки данного пункта ...
Написал: Mixer(144)
Гость

Сообщение Гость »

Увы. Имею:
MenuBar
Menu
Item
.
End
Menu
Menu ! Требуемое место вставки
Item
.
End
Menu ! Требуемое место втавки
Item
.
End
.
End
Action - Emded в указанных местах не помогает, а значение переменной мне нужно когда я иду по Item внутри Menu .
End
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

Пока понял вопрос...:) Ну да ладно, это мои проблемы.
Сам не проверял, но думаю поможет:
1. Установить меню FEQ - это то что пишется как ?MyMenu, соответственно для меню появится Embeds, правда, я не уловил там слова Accepted. Но попробовать можно.
2. Установить меню FEQ. В точке вставки, что то вроде TakeEvent на WindowManager, если вы конечно пишете на ABC, попробуйте что то вроде:
if EVENT()=EVENT:Accepted and FIELD()=?MyMenu
GLO:MyVariable=MyValue
end
3. Установить меню FEQ. При нажатии на подпунктах меню :) смотреть ?MyMenuItem{Prop:Parent}, который будет равен какому то ?MyMenu, т.е. отслеживать нахождение в пункте меню исходя из подпунктов.
4. Кратко, только суть: Можно поставить на MENU OWNERDRAW, но реально не перерисовывать меню, а отдавать уже существующему по умолчанию callback-у. Так вот при наведении на меню будет посылаться событие WM_DRAWITEM с указанием номера пункта меню, который можно вычислить и связать уже с существующим FEQ. Это не просто, но удивительно точно. :)))))

Возможно есть еще различные варианты, которые мне сейчас не приходят в голову, ну там типо определения координат мыши.

aka Still Zero

ЗЫ: давно так не смеялся
Написал: PAA(27)
Гость

Сообщение Гость »

Спасибо за направление мыслей. Вопрос разрешил следующим способом.
В Emded - WindowManager - TakeAccepted - внутри Loop сделал вставку
If Abs(Field()) => Abs(?MenuPrib) and Abs(Field()) < Abs(?MenuIm)
Glo:Ntask = 9104
.
If Abs(Field()) => Abs(?MenuIm) and Abs(Field()) < Abs(?MenuSpr)
Glo:Ntask = 9105
.
Оказалось, для меня это было открытием, что значения Field(), Accepted(),
?Field имеют на выходе отрицательные значения, поэтому пришлось прилепить к ним Abs
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

Отрицательные значения FEQ только для меню фрэйма и кнопок на тулбаре.
Написал: PAA(27)
Ответить