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

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

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

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

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

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

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

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

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

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

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

С уважением
...
Рейтинг: 0 / 0
25.09.2012, 08:38
    #37970787
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
Michael Ermi,
У вас FPD 2.x ?
...
Рейтинг: 0 / 0
25.09.2012, 21:38
    #37972070
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
Насколько я помню, в 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
25.09.2012, 21:46
    #37972076
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
Michael Ermi,

Вы действительно всё делаете IN SCREEN? Или, всё же, таково требование - "сделать всё именно на главном экране", определять окна и располагать в них элементы нельзя?
...
Рейтинг: 0 / 0
25.09.2012, 22:20
    #37972100
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
ВладимирМЗапретить закрывать 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
25.09.2012, 23:26
    #37972164
Michael Ermi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
AndreTM Michael Ermi,

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

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

Раньше я просто решал эту задачу - перепрограммируя клавиши, например от F1...F10 на время показа таблицы, и потом возвращал все назад. Теперь нужны кнопки.
...
Рейтинг: 0 / 0
25.09.2012, 23:27
    #37972167
Michael Ermi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
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
25.09.2012, 23:32
    #37972172
Michael Ermi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro 2.6 Win: Совместная работа Browse и Button (@Get .. Function..)
asdorMichael Ermi,
У вас FPD 2.x ?

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

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

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

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

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

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

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


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


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