powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
13 сообщений из 13, страница 1 из 1
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37968853
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день. Прошу помощи в решении возникшей задачу.
Задача: вывести на экран базу данных в Browse и одновременно вывести кнопки управления в виде Button через @..Get ...Function "*NH..."

Проблема в том, что не могу заставить их работать одновременно. То сначала выводятся кнопки и я должен на что-то нажать, и только потом выходит таблица, и наоборот. Пробовал для Get поставить просто команду READ без CYCLE, то после вывода таблицы кнопки уже не активны.

Прошу подсказки. Советы типа "Читай инструкцию" прошу не давать.

С уважением
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37969060
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общая схема:

- Вывести все объекты
- Организовать точку останова

Команда Browse по умолчанию останавливает дальнейшее выполнение приложения до своего закрытия. Чтобы открыть окно Browse, но тем не менее, не остановить выполнение приложения, необходимо добавить опцию NOWAIT

В общем случае имеем нечто вроде такого

Код: sql
1.
2.
3.
4.
BROWSE NOWAIT
@ ... get ... Function "*NH..."

READ CYCLE
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37969110
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, опробую и сразу напишу
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37970699
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось, но возникла новая проблема. Если активны кнопки, то при нажатии Esc исчезают и кнопки и таблица, что так и должно быть. Но если активна таблица, то Esc выключает ее, а кнопки остаются.

И второй вопрос - как переводить фокус на таблицу. Например, когда выполнилась функция на кнопках, то по окончании ее работы кнопки остаются активными, а таблица нет.

Заранее извиняюсь за простоту вопросов и жду ваших советов.

С уважением
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37970787
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Ermi,
У вас FPD 2.x ?
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972070
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я помню, в FP2.6 for Win это все решалось довольно кривыми путями. Корректного решения все-равно не будет.

Запретить закрывать Browse по нажатию Esc можно только подавив вообще реакцию на Esc через

Код: sql
1.
On Key Label ESC *



Но это означает отсутствие реакции вообще везде на нажатие клавиши Esc. Восстановить настройку можно командой без параметров

Код: sql
1.
On Key Label ESC



Переключить фокус в Browse-окно можно командой на активизацию окна

Код: sql
1.
Activate Window (Заголовок Browse-окна)



Заголовок - это то, что указано в опции TITLE команды BROWSE. Лучше это делать через переменную

Код: sql
1.
2.
3.
4.
5.
PRIVATE titleBrow
titleBrow = 'Мой заголовок'

BROWSE TITLE m.titleBrow NOWAIT
ACTIVATE WINDOW (m.titleBrow)
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972076
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Ermi,

Вы действительно всё делаете IN SCREEN? Или, всё же, таково требование - "сделать всё именно на главном экране", определять окна и располагать в них элементы нельзя?
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972100
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЗапретить закрывать Browse по нажатию Esc можно только подавив вообще реакцию на Esc через
Код: sql
1.
On Key Label ESC *


Но это означает отсутствие реакции вообще везде на нажатие клавиши Esc. Восстановить настройку можно командой без параметров
Код: sql
1.
On Key Label ESC

Если реакция на кнопки сделана через @..GET...VALID MyFunction(choice), и есть кнопка, привязанная к Esc, то можно "почти логично" сделать переопределение. Главное при таком использовании - не забывать сразу же восстанавливать переназначения после интерактива. Впрочем, от глюков это всё равно не убережёт :)
Test
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
set talk off
close all
clear all
clear

use test in 0 shared

 browse nowait
 @22,1 get ch function '*NH Read;Top;Bottom;\?Exit' size 1,10 default 1 valid test_ch(ch)

on key label ESC do test_ch with 4
 read cycle
on key label ESC

use in test

*
function test_ch
parameter ch
 do case
 case ch=1
  *
 case ch=4
  clear read
 endcase
return

...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972164
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM Michael Ermi,

Вы действительно всё делаете IN SCREEN? Или, всё же, таково требование - "сделать всё именно на главном экране", определять окна и располагать в них элементы нельзя?

У меня не было требования - в окне или без. Была просто поставлена задача - видеть на экране таблицу, и рядом с ней кнопки управления (вызова подсказки, распечатать, дополнительная функция для выбранной ячейки и т.д.).

Раньше я просто решал эту задачу - перепрограммируя клавиши, например от F1...F10 на время показа таблицы, и потом возвращал все назад. Теперь нужны кнопки.
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972167
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMВладимирМЗапретить закрывать Browse по нажатию Esc можно только подавив вообще реакцию на Esc через
Код: sql
1.
On Key Label ESC *


Но это означает отсутствие реакции вообще везде на нажатие клавиши Esc. Восстановить настройку можно командой без параметров
Код: sql
1.
On Key Label ESC

Если реакция на кнопки сделана через @..GET...VALID MyFunction(choice), и есть кнопка, привязанная к Esc, то можно "почти логично" сделать переопределение. Главное при таком использовании - не забывать сразу же восстанавливать переназначения после интерактива. Впрочем, от глюков это всё равно не убережёт :)
+
Test
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
set talk off
close all
clear all
clear

use test in 0 shared

 browse nowait
 @22,1 get ch function '*NH Read;Top;Bottom;\?Exit' size 1,10 default 1 valid test_ch(ch)

on key label ESC do test_ch with 4
 read cycle
on key label ESC

use in test

*
function test_ch
parameter ch
 do case
 case ch=1
  *
 case ch=4
  clear read
 endcase
return




Большое спасибо за подсказку. завтра опробую и напишу, как получилось.
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972172
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorMichael Ermi,
У вас FPD 2.x ?

У меня FoxPro 2.6a Win
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972209
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в свое время, чтобы избавиться от большинства таких глюков, делал примерно так:
- каждый набор элементов интерфейса располагается в собственном окне-фрейме
- при активизации соответствующего окна - запоминаются все предыдущие назначения клавиатурных макросов, и назначаются те, которые соответствуют данному окну, при деактивизации - возвращаются предыдущие назначения
- структура переходов между окнами - линейная, т.е. активизация-деактивизация происходит по дереву
Для хранения состояний "предыдущих назначений" использовалась таблица-стек.

В принципе, никто не запрещает вместо постоянного запоминания/возврата - заранее прописать все назначения в некую таблицу, и при активизации окна - заливать соответствующие назначения, а при деактивизации - очищать вообще все.

Я просто сильно подозреваю, что вы столкнетесь с необходимостью переопределения ESC, ENTER, +/-TAB и т.д. И тут проблема встанет во весь рост: либо пользоваться переназначениями, либо строить логику работы интерфейса не "как хочется, как в VFP", а анализируя множество состояний...

Да, забыл - рассуждения относились к FoxPro 2.6a DOS
...
Рейтинг: 0 / 0
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
    #37972365
Michael Ermi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMЯ в свое время, чтобы избавиться от большинства таких глюков, делал примерно так:
- каждый набор элементов интерфейса располагается в собственном окне-фрейме
- при активизации соответствующего окна - запоминаются все предыдущие назначения клавиатурных макросов, и назначаются те, которые соответствуют данному окну, при деактивизации - возвращаются предыдущие назначения
- структура переходов между окнами - линейная, т.е. активизация-деактивизация происходит по дереву
Для хранения состояний "предыдущих назначений" использовалась таблица-стек.

В принципе, никто не запрещает вместо постоянного запоминания/возврата - заранее прописать все назначения в некую таблицу, и при активизации окна - заливать соответствующие назначения, а при деактивизации - очищать вообще все.

Я просто сильно подозреваю, что вы столкнетесь с необходимостью переопределения ESC, ENTER, +/-TAB и т.д. И тут проблема встанет во весь рост: либо пользоваться переназначениями, либо строить логику работы интерфейса не "как хочется, как в VFP", а анализируя множество состояний...

Да, забыл - рассуждения относились к FoxPro 2.6a DOS


Спасибо большое за примерный алгоритм. К сожалению, переходить на VFP пока нет возможности.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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