:: Visual Foxpro, Foxpro for DOS
Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31179
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Коллеги, столкнулся с такой проблемой при сборке проекта на FPD 2.6:

Есть PRG-файл, в нем определен массив:

PUBLIC avtors

Есть SCX-файл, в котором один SAY...GET определен так:

@ 3, 4 GET avtor_2 ;
PICTURE "@^" ;
FROM avtors ;
SIZE 2, 21 ;
DEFAULT 1;
COLOR SCHEME 5,6

При сборке ругаеццо так: "Unable to find unknown AVTORS". Понять-то нетрудно. Как исправить?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
EXTERNAL ARRAY AVTORS перед применением в GET (или в другом месте).
Компилятор просто проверяет, была ли определен массив (или переменная?) выше, и EXTERNAL успокаивает этот проверяльщик
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Думаю EXTERNAL ARRAY AVTORS в SETUP поможет


------------------
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Что-то подобное было. Помогло DIMENSION.
Ratings: 0 negative/1 positive
Re: Как передать массив в SCX-файл?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
DIMENSION - это не - EXTERNAL, а переопределяет массив, например DIMENSION AVTORS[1] - превращает массив AVTORS (если он виден, иначе создает новый) в размер [1]
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31179
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
EXTERNAL ARRAY AVTORS перед применением в GET (или в другом месте).
Компилятор просто проверяет, была ли определен массив (или переменная?) выше, и EXTERNAL успокаивает этот проверяльщик

EXTERNAL ARRAY avtors пробовал - не взлетело.

Sawradym
Думаю EXTERNAL ARRAY AVTORS в SETUP поможет

Это где? Если SETUP - это что-то наподобие INIT формы, то нет, ибо массив заполняется ДО вызова .SCX.
Упс... Кажется понял. Попробую.


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 02.12.20 18:56
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Саня, пробуй, падай, и серва подеимайся, как Сфинкс )
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31179
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
Саня, пробуй, падай, и серва подеимайся, как Сфинкс )

Возрождался Феникс. ;)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Аа, точно... Сфинкст стоял, хз с каких веков, раньше типа пирамид Хуфу, ... или другого китайца... шутка )
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
EXTERNAL ARRAY avtors пробовал - не взлетело.

Ставлю на то, что и не взлетит - в команде GET никогда не было опции FROM (или я многое упустил в своё время).

sphinx
Есть SCX-файл, в котором один SAY...GET определен так:

SCX-файл - это dbf-ка. Где именно ты видишь приведенный код?
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ставлю на то, что и не взлетит - в команде GET никогда не было опции FROM (или я многое упустил в своё время).

Хм. Тоже подумал, что нет. Глянул ради интереса, оказывается таки было.
Даже два варианта. Хотя вроде тоже никогда не пользовался подобным. А может и пользовался как-нибудь очень редко, что не запомнилось.

Из хелпа FPD2.6:
+---------------------------------+
¦ @ ... GET - Списки ¦
+---------------------------------+
@ <ряд, колонка> GET <пер> | <поле>
[FUNCTION <вырC1>]
| [PICTURE <вырC2>]
FROM <массив>
[RANGE <вырN1> [, <вырN2>]]
| POPUP <вертикальное меню>
[DEFAULT <выраж>]
[SIZE <вырN3>, <вырN4>]
[ENABLE | DISABLE]
[MESSAGE <вырC3>]
[VALID <вырL1>]
[WHEN <вырL2>]
[COLOR SCHEME <вырN5>
| COLOR <список пар цветов>]
...
FROM <массив>
Строит список из элементов массива. Массив может быть одно- или двумерным. Если
массив одномерный, первый элемент массива будет являться первым элементом списка,
второй - вторым и т. д.
Если массив двумерный, для создания списка используются только элементы первой
колонки массива. Первый элемент массива становится первым элементом списка, второй
элемент массива в этой же колонке становится вторым элементом списка и т. д.

Также и еще один вариант использования, похоже это как раз его случай:
+---------------------------------+
¦ @ ... GET - Вертикальные меню ¦
+---------------------------------+
@ <ряд, колонка> GET <пер>
FUNCTION <вырC1>
| PICTURE <вырC2>
[DEFAULT <выраж>]
[FROM <массив>]
[RANGE <вырN1> [, <вырN2>]]
[SIZE <вырN3>, <вырN4>]
[ENABLE | DISABLE]
[MESSAGE <вырC3>]
[VALID <вырL1>]
[WHEN <вырL2>]
[COLOR SCHEME <вырN5>
| COLOR <список пар цветов>]
-----------------------------------
Cоздает вертикальное меню.
-----------------------------------
...
FROM <массив>
Создает вертикальное меню, исходя из значений элементов массива.
Если фраза FROM <массив> включена, все другие опции, определенные во фразах PICTURE
или FUNCTION игнорируются. но символ ^ должен по-прежнему присутствовать во фразах
PICTURE или FUNCTION. Массив может быть одно- или двумерным. Если массив двумерный,
элементы только первой колонки массива используются для создания опций
вертикального меню. Первый элемент массива становится первой опцией
вертикального меню, второй элемент в первой колонке массива - второй опцией и т.д.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 2 раз(а). Последнее : Crispy, 03.12.20 07:54
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
sphinx
Коллеги, столкнулся с такой проблемой при сборке проекта на FPD 2.6:
Есть PRG-файл, в нем определен массив:

PUBLIC avtors

Есть SCX-файл, в котором один SAY...GET определен так:

@ 3, 4 GET avtor_2 ;
PICTURE "@^" ;
FROM avtors ;
SIZE 2, 21 ;
DEFAULT 1;
COLOR SCHEME 5,6

При сборке ругаеццо так: "Unable to find unknown AVTORS". Понять-то нетрудно. Как исправить?
Исправлять необязательно, но можно уже предложенным способом с External array. Только поставить его нужно в правильное место, где-то в начале секции с say-get, уже не помню.
В scx-файл ничего не передается и передавать в него не требуется. Из этого файла формируется spr-файл, который по сути тот же prg.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Хм. Тоже подумал, что нет. Глянул ради интереса, оказывается таки было.

Дело за малым - осталось найти саму версию FPD, понимающую такой синтаксис - у меня 2.6(x) и она такое не понимает, да и в ее Help ничего подобного не написано. Старше 2.6 версий вроде не было.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Crispy
Хм. Тоже подумал, что нет. Глянул ради интереса, оказывается таки было.

Дело за малым - осталось найти саму версию FPD, понимающую такой синтаксис - у меня 2.6(x) и она такое не понимает, да и в ее Help ничего подобного не написано. Старше 2.6 версий вроде не было.

Русский хелп вроде изначально от 2.0 взят. Хотя использовался в 2.6, изменений не так много было, просто какие-то пункты оставались непереведенными.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Русский хелп вроде изначально от 2.0 взят. Хотя использовался в 2.6, изменений не так много было, просто какие-то пункты оставались непереведенными.

Ты не написал главное - твоя версия FPD реально понимает опцию FROM?

Но Саша еще не прояснил и другое - где именно он видит приведенный код?
Очевидно, что не в SCX-файле, а в каком-нибудь сгенерированном на его основе SPR.
А значит, если даже в его Фоксе такая опция есть, то править (добавлять EXTERNAL ARRAY) надо в самом SCX (MODIFY SCREEN). И далеко не факт, что это поможет, так как Setup и CleanUp секции являлись прообразами Load и Destroy, а EXTERNAL ARRAY должен находиться в той же процедуре, что и сам GET. Куда попадает код из Setup и CleanUp при создании SPR я уже не помню - мы практически не пользовались скринами - всё рисовали программно.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ты не написал главное - твоя версия FPD реально понимает опцию FROM?

Ну если в хелпе есть, почему не понимает.
Эмулятор надо просто откопать, а то сейчас 10х64. Через vDosPlus запускал когда-то на семерке, в принципе и на десятке думаю пойдет.
В хелпе кстати и пример программы даже приведен:

+---------------------------------+
¦ Пример программы ¦
+---------------------------------+
SET TALK OFF
DEFINE WINDOW popupex FROM 7, 16 TO 16,63 ;
FLOAT DOUBLE COLOR SCHEME 5
CLOSE ALL
USE customer
DIMENSION dbftags(256)
dbftags(1) = 'Запись #'
FOR i = 2 to 256
IF empty(tag(i-1))
i = i - 1
DIMENSION dbftags(i)
EXIT
ELSE
dbftags(i) = tag(i-1)
ENDIF
ENDFOR
dbforder = 'Запись #'
ACTIVATE WINDOW popupex
@ 3,7 GET dbforder PICTURE '@^' FROM dbftags SIZE 3,14
@ 0,2 TO 7,43
@ 0,5 SAY ' Заказчик Просмотр Порядок: '
@ 2,27 GET okcancel PICTURE '@*VT \!OK;\?Cancel' ;
SIZE 1, 10, 2 DEFAULT 0
READ CYCLE
RELEASE WINDOW popupex
IF okcancel = 1
IF dbforder = "Запись #"
SET ORDER TO
ELSE
SET ORDER TO (dbforder)
ENDIF
WAIT WINDOW 'Упорядочить '+dbforder NOWAIT
BROWSE WIDTH 10 NOWAIT
ELSE
WAIT WINDOW 'Неупорядочен' NOWAIT
CLOSE ALL
ENDIF

Можно просто запустить и посмотреть.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Ну если в хелпе есть, почему не понимает. Эмулятор надо просто откопать
А пришли мне ее - я и проверю - мне эмулятор не нужен.

Заодно уточни - речь точно про Foxpro 2.6 for DOS, а не Foxpro 2.6 for Windows?
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
У меня в help FPD 2.6 такой опции нет.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Вот и у меня нет, но после более аккуратной проверки оказалось, что пример из Help, приведенный Crispy, работает!
Так что, Crispy, если не сложно, пришли только Help.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Всё - понял!
Эта опция есть в топике "@ ... GET - Списки" (мы этим никогда не пользовались)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 Артём Guest (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика