powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / СПРАВОЧНИК В FOX FOR DOS 2.6
14 сообщений из 14, страница 1 из 1
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32405071
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой есть
форма, на форме есть поля, как мне сделать чтобы при попадании курсора на форму выводился "справочник" т.е. какие данные нужно заносить?
например есть база с полями:
name ima oches pol
данные в полях:
иванов иван иванович М/Ж
в поле пол высвечивался или м или ж и заносился в поле "пол"
ВАРИАНТ
@ 4 ,31 SAY 'ПОЛ' GET POL ;
FUNCTION 'M М,Ж';
НЕ ПОДХОДИТ
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32405144
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считаю, что извращаться не надо, и лучше всего подойдет стандартный элемент интерфейса - popup, который определяется функцией
@ GET ... FUNCTION '^ М;Ж' ...

Правда, он не работает с таблицей-источником данных непосредственно, зато работает с массивом (сам справочник можно поместить в массив кодом, например, в screen setup). Да, и кстати, ЭТО ВАЖНО: какой тип переменной для поп-апа будет задан в screen setup, так она и дальше себя будет вести! Если задать числовой тип - то потом переменная поп-апа будет всегда возвращать номер строки, отображаемой поп-апом, а вот если строковый - то переменная будет возвращать ту строку, что показывает поп-ап. ;-)))
Сам справочник при попадании на него "фокуса" открываться не будет (только мышкой или пробелом, например). Но так даже лучше - ведь не каждый раз обходя поля, например, tab-ом, пользователь хочет раскрывать справочник.
Если код из справочника, который нужно записать в FK, отличается от того, что показывает поп-ап, нужно предусмотреть это. Например, определить двумерный массив - в первом столбце поместить то, что должно отображаться на экране, а во втором - собственно, значения PK справочника. В этом случае элемент придется сделать "свободным" (пользуясь акцессной терминологией) и на valid элемента повесить дополнительный код, делающий настоящий replace.

Если хочется более тесно связать элемент с таблицей, можно использовать List, который можно строить непосредственно на таблице (правда, он займет гораздо больше места, зато будет всегда раскрыт ;-)). Присвоение значения FK писать кодом придется все равно.

Путь для извращенцев - написать самодельный контрол, состоящий из поля ввода (when=.f.) и невидимой кнопки, наложенной поверх этого поля ввода, по нажатии на кнопку открывается popup, определенный командой define popup prompt field - выглядит весьма симпатично, но более сложно поддерживать приложения с такими наворотами.
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32405155
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай контрол на основе POPUP'а с перечислением М и Ж. В его When'e выполни KEYBOARD [{SPACE}] PLAIN, чтоб списочек афтоматом распахивался при фходе
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32405850
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО ЗА СОВЕТ, ВСЕ КОНЕЧНО ХОРОШО НО ВОТ ПРОБЛЕМА, ЕСЛИ Я ХОЧУ СОЗДАСТЬ СПРАВОЧНИК ИЗ "УЛИЦ" ТАМ ЕСТЬ НЕ "М и Ж" а названий 20 как мне поступить ?
с меню на форме неполучается
может есть у кого нибудь примерчик
Заранне , спасибо
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32405876
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в секции Setup экрана сделать SELECT-SQL в массив и указать в построителе экранов, что список для popup-контрола береца их этого массива
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32406566
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re ==в секции Setup экрана сделать SELECT-SQL в массив и указать в
re== построителе экранов, что список для popup-контрола береца их этого re ==массива

Я ВООБЩЕ-ТО УЧУСЬ ТОЛЬКО, МОЖЕТ ПРИМЕРЧИК ЕСТЬ, ИЛИ ССЫЛКА?
ЕСЛИ, ЧЕСТНО НЕ ПОНЯЛ ЧТО ПОНИМАЕТСЯ ПОД SETUP ЭКРАНА
ЭТО DEFINE WINDOW ?
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32406575
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧТО ПОНИМАЕТСЯ ПОД SETUP ЭКРАНА
ЭТО DEFINE WINDOW ?
при создании экранов в FPD есть фсякие разные примочки. Зайди в меню Screen\Screen layout. Setup секция - это первые строки, с кот стартует экран. в ClenUp'e - можна свои ф-ци и процедуры катать.. Вопщем нужна тебе книжку Попова искать по FPD. Я излагаца не умею :)
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407001
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RE=при создании экранов в FPD есть фсякие разные примочки. Зайди в меню RE=Screen\Screen layout. Setup секция - это первые строки, с кот стартует RE=экран. в ClenUp'e - можна свои ф-ци и процедуры катать.. Вопщем нужна RE= тебе книжку Попова искать по FPD. Я излагаца не умею :)

КНИГА А..А. ПОПОВА у меня есть но Screen\Screen layout - это постоитель экрана, а мне нужно на форме
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407103
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Screen\Screen layout - это постоитель экрана, а мне нужно на форме

гы :)) а ч:Е тогда такое форма!? Проста это слово ввелось толька начиная с версии VFP30. До этого этим словом звались экоаны ;)))
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407113
andrew_Pr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ГЕОРГИЙ18
но Screen\Screen layout - это постоитель экрана, а мне нужно на форме
В FPD2.6 вообще не было понятия "форма".
Формы появились лишь в VFP .
Аналогом и предшественником форм в FPD были "скрины" (Screen).
Посмотри еще раз ПОПОВА.
Сдается мне, что ты и @ 4 ,31 SAY 'ПОЛ' GET руками в коде пишешь.
Почитай ПОПОВА - сэкономишь потом кучу времени на рисовании форм-скринов.
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407264
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел пример - получи, не жалко ;-)

Первым делом создаем таблицы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table ts (tsid c( 1 ), name c( 10 ))
insert into ts (tsid, name) values ('1','Oranges')
insert into ts (tsid, name) values ('2','Apples')
insert into ts (tsid, name) values ('3','Grapes')

create table td (tdid c( 1 ), tsid c( 1 ),  name c( 10 ))
insert into td (tdid, tsid,  name) values ('1','1','For Sale 1')
insert into td (tdid, tsid,  name) values ('1','1','For Sale 2')


А теперь рисуем форму

Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
set talk off
set compatible foxplus
define window win from int((srow()- 9 )/ 2 ),int((scol()- 41 )/ 2 ) ;
                  to int((srow()- 9 )/ 2 )+ 8 ,int((scol()- 41 )/ 2 )+ 40  ;
       nofloat noclose shadow nominimize color scheme  1 
set default to c:\ 0 \test
use ts in  0 
use td in  0 
select ts.name, ts.tsid from ts order by name into array ats
use in ts
select td
go top
scatter memvar
vts = ''
activate window win noshow
@  1 , 2  say  "id"  size  1 , 2 ,  0 
@  3 , 2  say  "type"  size  1 , 4 ,  0 
@  5 , 2  say  "name"  size  1 , 4 ,  0 
@  1 , 11  get m.tdid size  1 , 1  default  " " 
@  2 , 9  get vts picture  "@^"  from ats size  3 , 14  ;
      default  "" valid vtsvalid(vts) color scheme 1 ,  2 
@  5 , 11  get m.name size  1 , 10  default "  "
@ 1 , 27  get act picture "@*VN <- ;-> ;Close" ;
	size  1 , 9 , 1  default  1  valid actvalid(act)
activate window win
read cycle modal show showvts()
release window win
use in td
* ======
func actvalid
param pact
gather memvar
do case
case pact= 1  and !bof()
  skip - 1 
  if bof()
    wait wind nowa 'First Record'
    go top
  endif
case pact= 2  and !eof()
  skip  1 
  if eof()
    wait wind nowa 'Last Record'
    go bottom
  endif
case pact= 3 
  clear read
case bof()
  go top
case eof()
  go bottom
otherwise
  wait wind nowa 'Feature Not Available'
endcase
scatter memvar
show gets
return
* ======
func vtsvalid
param pvts
if ats(ascan(ats, pvts)+ 1 )<>td.tsid
  m.tsid = ats(ascan(ats, pvts)+ 1 )
endif
return
* ======
func showvts
vts = ats(ascan(ats, m.tsid)- 1 )
show get vts
return


Соответственно, ts - справочник, а td - таблица, ссылающаяся на справочник.
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407279
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел ошибки в обоих скриптах ;-)
В первом - во втором insert нужно вставить значение tdid='2' (иначе какой же это id ;-))
Во втором - убрать строку с set default (это я вставлял для себя, потому что у меня именно там таблички лежали).

;-)
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32407284
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а терь лезь в построитель экранов в руках с Поповым и фс:Е что ДО @ в Setup-секцию (кроме дефина виндовса), что после RELEASE WINDOW - в CleanUp, а контролы ручками как белый чел расставляй. Иначе при модернизации экрана укокошишься @SAY рисовать ;))
...
Рейтинг: 0 / 0
СПРАВОЧНИК В FOX FOR DOS 2.6
    #32408046
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОГРОМНОЕ СПАСИБО ЗА ПРИМЕР ВСЕ ТО, ЧТО НАДО ЕЩЕ РАЗ БЛАГОДАРЮ
ТЕМА ЗАКРЫТА УРА!!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / СПРАВОЧНИК В FOX FOR DOS 2.6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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