Как использовать горячие клавиши на форме | |
---|---|
shumik73 Автор Сообщений: 565 Откуда: Алматы Дата регистрации: 10.05.2006 |
Добрый день всем!
Всем знакомо системное меню Foxpro Его можно отключить "SET SYSMENU ON" или включить "SET SYSMENU OFF" в момент исполнения Можно ограниченно выбрать несколько PUPUP: "SET SYSMENU TO _MFILE, _MWINDOW" Можно вернуть на исходную "SET SYSMENU TO DEFAULT" Системное меню отображает функционал самого foxpro Полный набор из чего состоит можно найти тут help.foxclub.ru Просканировать запущенное меню можно по PAD и BAR следующим способом:
Для работы своей прикладной программы системное меню отключается "SET SYSMENU TO" А вместо него формируется свое меню: Сформировать меню можно как свой PRG или сгенерить MPR. В меню закладываются
Запущенное меню выполняет ряд задач: Когда при запуске такого универсального меню - я получал и функционал, и проверку доступа и горячие клавиши Сложность в том что меню в foxpro можно запустить только в формах верхнего уровня (Top-Level-Form) То есть меню предназначено для "материнских" окон - точнее _screen или для формы с oForm.ShowWindow="Top-Level-Form" А вот создать меню в "дочерней" форме внутри твоей программы - нельзя, или приходится создовать самописное меню из кнопок Если создал пользовательское меню - как быть с вызовом горячих клавиш? В системном меню это решало само меню "KEY CTRL+?", при этом нажатие клавиш исполнялось с условием SKIP FOR ? Это было равносильно "ON KEY LABEL KeyLabel ACTIVATE POPUP MenuName" - то есть горячие клавиши пытались нажать на пункт в меню если есть возможность Условие вызова пункта меню можно исправить "SET SKIP OF MENU MenuBarName1 lExpression1" или даже отключить Но как вызывать горячую клавишу без системного меню? Если системное меню отключено - то уже горячие клавиши не работают Как отказаться от системного меню, но при этом реализовать ON KEY LABEL Ctrl+P но с проверкой SKIP FOR на конкретно выбранной форме ? Исправлено 2 раз(а). Последнее : shumik73, 10.06.25 12:04 ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
alex; Сообщений: 3641 Откуда: Москва Дата регистрации: 23.11.2004 |
Так то событие KeyPress? ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
sphinx Сообщений: 32141 Откуда: Екатеринбург Дата регистрации: 22.11.2006 |
KeyPress завязана на объектах, сдается, что для задачи Евгения не прикрутить.
Сам такой проблемой не озадачивался, но может посмотреть в сторону WM_KEYDOWN и WM_KEYUP, их прикрутить к BindEvent. Идею подсмотрел здесь: www.tek-tips.com ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
alex; Сообщений: 3641 Откуда: Москва Дата регистрации: 23.11.2004 |
Вроде, свойство KeyPreview решает привязку события KeyPress к объектам. ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
Владимир Максимов Сообщений: 14165 Откуда: Москва Дата регистрации: 02.09.2000 |
Вот так попробуй
Условия через ИЛИ, чтобы, например, если активной формы нет или нет метода на форме, то пункт меню был недоступен ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
Владимир Максимов Сообщений: 14165 Откуда: Москва Дата регистрации: 02.09.2000 |
Точно также. А в чем проблема? Хм... А как вообще приложение-то организовано? Обычно все-таки есть "основное окно". Это либо _SCREEN или Top-Level Form и все пользовательские формы "живут" внутри него. И для них меню просто не нужно. Меню "общее" для всех форм PS: А, понятно. Нужно нажатие горячих клавиш по условию. Но можно по другому сформулировать задачу: Выполнить действие по условию. Т.е. сам вызов действия всегда, но внутри этого действия, проверка условий. Если условия не выполняются - ничего не делать Исправлено 1 раз(а). Последнее : Владимир Максимов, 10.06.25 17:52 ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
Владимир Максимов Сообщений: 14165 Откуда: Москва Дата регистрации: 02.09.2000 |
Сама постановка вопроса вводит в заблуждение
Вопрос формулируется так Необходимо по нажатию горячих клавиш на форме выполнить некое действие. Но! Это выполнение должно быть выполнено только при соблюдении определенных условий (по данным на форме) При этом использование пунктов меню с KEY и SKIP FOR - невозможно 1. "Условия на форме" - в общем случае, это вызов метода формы. Поскольку форма, очевидно, является активной в момент нажатия горячих клавиш, то это вызов _SCREEN.ActiveForm.MyMethod(). Этот метод определяет можно или нельзя выполнять действия по горячим клавишам 2. "Выполнить действия" - в общем случае, это тоже вызов некоего метода. Вот в этом методе и можно перед его выполнением, проверить, что вернет метод активной формы. Можно имя метода передать как параметр В результате, это все тот же ON KEY LABEL. Просто первой командой в вызванном методе будет проверка допустимости выполнения ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
shumik73 Автор Сообщений: 565 Откуда: Алматы Дата регистрации: 10.05.2006 |
Обычно есть материнское окно, в нем одно меню. Все по классике А если материнское окно - это рабочий стол, а формам нужно свое меню - то получится необычно [attachment 37193 333.png] Решил в KeyPress()
Я вообще системное меню отключил БЫ - чтобы не видеть эту белую полоску. Но вот проблема - формы перестают встраиваться. После развертки формы на весь экран - кнопки формы "улетают" в строку меню. А тут "улетать" некуда [attachment 37194 444.png] Исправлено 2 раз(а). Последнее : shumik73, 11.06.25 13:54 ![]() |
Re: Как использовать горячие клавиши на форме | |
---|---|
PaulWist Сообщений: 14779 Дата регистрации: 01.04.2004 |
Почему в готовом EXE не работает копирование по Ctrl+C, Ctrl+V
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
© 2000-2025 Fox Club  |