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

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

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

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

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

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

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

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

Код: 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
12.02.2004, 15:10
    #32407279
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СПРАВОЧНИК В FOX FOR DOS 2.6
Нашел ошибки в обоих скриптах ;-)
В первом - во втором insert нужно вставить значение tdid='2' (иначе какой же это id ;-))
Во втором - убрать строку с set default (это я вставлял для себя, потому что у меня именно там таблички лежали).

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


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