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

Сообщений: 33855
Дата регистрации: 05.11.2006
Да, действительно. Тоже никогда не пользовался. Может быть, и придумал бы, как использовать. Но уже как-то без этого обошлось.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Может быть, и придумал бы, как использовать. Но уже как-то без этого обошлось.

Когда в Фоксе это появилось, то все подобные интерфейсные штучки уже давно были реализованы иначе и с бОльшим функционалом, чем обычный Popup. Поэтому пересаживаться с Мерседеса на Запорожец смысла не было никакого.
Так что, видимо, прочитал когда-то и забыл за бесполезностью...



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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Ставлю на то, что и не взлетит - в команде GET никогда не было опции FROM (или я многое упустил в своё время).

Увы, в старом (нескомпилированном) проекте прекрасно работает с этой конструкцией FROM.

ssa
Только поставить его нужно в правильное место, где-то в начале секции с say-get, уже не помню.

Не нашел, куда втиснуть - попробовал в секцию WHERE. Ругаццо перестал, компилируется без ругани на AVTOTS.. но при работе с SCX ругается на тот же массив.


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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Но Саша еще не прояснил и другое - где именно он видит приведенный код?
Очевидно, что не в SCX-файле, а в каком-нибудь сгенерированном на его основе SPR.

Именно в таком виде - да в SPR. Это чтоб было понятно, какой именно SAY. А врезать EXTERNAL ARRAY надо где-то в SCX - тут без вариантов.


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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Не нашел, куда втиснуть - попробовал в секцию WHERE. Ругаццо перестал, компилируется без ругани на AVTOTS.. но при работе с SCX ругается на тот же массив.
Не верю! (с)

Эта "ругань", даже когда происходит, не мешает компилятору создавать правильный EXE.
И если массив действительно глобальный, то при выполнении команда его увидит.

Другое дело, что команда
PUBLIC Avtors
не создает массив - лишь описывает переменную как глобальную, и по умолчанию она становится логической .F.
Так что проверь, что в этом месте Avtors - это действительно массив.



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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
PUBLIC ARRAY наверное надо было..


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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
PUBLIC ARRAY наверное надо было
Необязательно.

Можно
PUBLIC var
DIMENSION var[10]
и var станет глобальным массивом.
Ratings: 0 negative/1 positive
Re: Как передать массив в SCX-файл?
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Как ты здесь писал в какой-то теме - пришли проект и тебе помогут!
Присылай и, почти уверен, я решу эту проблему.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Если завтра не взлетит - пришлю.


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

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
если не сложно, пришли только Help.

Вот, держи: www.upload.ee
Там я русский хелп 2.0 "наложил поверх" английского 2.6. Т.е. большинство пунктов русско-английские, а сколько-то более новых (немного) - только английские, собирался перевести, все руки не доходили. А там уже и VFP занялся, не актуально стало.


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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Вот, держи
Спасибо!
Правда, в своем Help'е я уже тоже обнаружил этот FROM.
Более того, я сам переводил в свое время Help (почти весь), и этот топик оказался переведенным.
Но вот пользоваться таким вариантом не приходилось, и забыл напрочь.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
akvvohinc
Как ты здесь писал в какой-то теме - пришли проект и тебе помогут!
Присылай и, почти уверен, я решу эту проблему.

Сергей, я сам все успешно зарешал. DIMENSIOM прописал - и стало так, как доктор прописал!

Спасибо всем!


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

Сообщений: 324
Дата регистрации: 04.10.2007
sphinx
Сергей, я сам все успешно зарешал. DIMENSIOM прописал - и стало так, как доктор прописал!
Я это в самом начале предлагал.
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
vnkor
sphinx
Сергей, я сам все успешно зарешал. DIMENSIOM прописал - и стало так, как доктор прописал!
Я это в самом начале предлагал.

Да я разве спорю? Я просто уперся на EXTERNAL ARRAY и вкуда его грамотно прописать. Понял ошибку. И Вам спасибо, это не прошло без внимания.


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




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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Ставлю на то, что и не взлетит

Много ставил?


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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Коллеги, я ДОКАЗАЛ на практике, что все разговоры у нас, мол, не собрать - развенчал! Раз работает с вызовом Фокса - значит немного поприседав - закомпилю. Да, хоть и поддерживаю много FPD 2.6 - но руки не доходили, запугали немного (да и других задач немало, где приходится попотеть.. но результат будет).

Так вот! Доказал сам себе - что эти проекты, если есть мозги - собираются. Я не про все препоны при сборке рассказал, сам зарешал, пусть и без гугла - на интуиции (интуиция - это отражение опыта).

Вот так! "А кто-то говорил - мелкая речка Урал..."(с) ;)

Проект собран! И работает! Маленькая победа? Ну, как сказать... Наши и это не смогут.


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




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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Я просто уперся на EXTERNAL ARRAY и вкуда его грамотно прописать. Понял ошибку.
А я тоже упрусь!

DIMENSION здесь хоть и помог, но для работы проги и ее сборки не необходим. Ты просто переопределил то, что уже и так существовало в этом месте.

То есть тебе пришлось написать что-то вроде такого:
DIMENSION avtors[ALEN(avtors,1),ALEN(avtors,2)]
Но ты же сам говорил, что программа работала и без этого.
То есть эта команда не выполнила ничего, кроме того, что показала компилятору в нужном месте, что avtors - массив.
Я бы назвал этот способ натуральным костылём.

На мой взгляд, если бы ты ровно в том же месте, где ты поставил этот костыль, написал EXTERNAL ARRAY avtors, то это убрало ошибку, которую ты получал при сборке.

sphinx
Много ставил?

Ты же видел, что причиной моей ставки было не сомнение в твоих силах - я сомневался в возможностях Фокса переварить опцию FROM.
Ладно, придется поголодать пару недель...



Исправлено 4 раз(а). Последнее : akvvohinc, 05.12.20 04:02
Ratings: 0 negative/0 positive
Re: Как передать массив в SCX-файл?
sphinx
Автор

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



Да не надо! Я за всех подниму вечером. ;)


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

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Но ты же сам говорил, что программа работала и без этого.
То есть эта команда не выполнила ничего, кроме того, что показала компилятору в нужном месте, что avtors - массив.
Я бы назвал этот способ натуральным костылём.

Было вообще PRIVATE. Нет под рукой Хелпа, но допускаю, что это работало, как МОЯ связка PUBLIC+DIMENSION. Массив-то потом заполнялся без ошибок при НЕСОБРАННОМ проекте. Можно проверить, будет ли работать на одном PRIVATE. Но какие-то нюансы есть, раз простой компиляцией не увидел AVTORS (практика - критерий истины). Речь только про это. И вряд ли это костыль, это скорее более полное указание для сборки. Как бы там ни было - без EXTERNAL ARRAY в SCX не взлетело. Я прописал в WHERE - работает. Но может НУЖНО было в другой секции, не сильно играю в FPD26.

20 лет никто не мог собрать проект. А делов-то оказалось. Фу, я думал на порядок сложнее.


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




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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Но какие-то нюансы есть, раз простой компиляцией не увидел AVTORS (практика - критерий истины).
Компилятор видит в SPR нечто с именем Avtors, но не знает, массив ли это (а в опции FROM может быть только массив), поскольку он был определен как массив не в этом файле.
Это обычное поведение компилятора хоть в FPD, хоть в VFP.

А псевдокоманда EXTERNAL ARRAY avtors в этом SPR как раз и призвана указать компилятору, что Avtors - действительно массив.
При этом работать созданный EXE будет и без EXTERNAL ARRAY - компилятор всё равно свою работу сделает, просто тебе будет выдаваться это сообщение каждый раз при сборке.

Цитата:
И вряд ли это костыль, это скорее более полное указание для сборки.
Если бы ты создавал массив именно в этом SPR, то естественно, это бы не было костылем.
Но ты своим DIMENSION не создаешь массив - он уже существовал в этом же самом месте в точно таком же виде и уже заполненный (ты сам об этом писал - "ибо массив заполняется ДО вызова .SCX").

Твоя команда DIMENSION avtors, в том виде, в котором я ее написал раньше, ничего с этим массивом не сделала - сохранила как его размерность, так и значения всех элементов. А следовательно, была не нужна.

Указание же для компилятора - именно команда EXTERNAL ARRAY avtors, которая командой не является (не переводится в псевдокод, то есть не попадает в EXE). И ее единственное назначение - сообщить компилятору, что avtors - массив.

PS
На самом деле я в свое время использовал EXTERNAL ARRAY еще одним способом (можно назвать это Undocumented feature ).
Представь, что тебе в программе нужно вызывать некую функцию/процедуру, которой не будет в этом EXE (например, будет создаваться на лету или будет находиться во внешнем (процедурном или непроцедурном) файле).

То есть ты где-то вызываешь процедуру/функцию
proc1()
а ее в данный момент нет ни в качестве отдельного файла, ни как процедуры в каком-то PRG, и в EXE она не должна попасть.
Компилятор напишет:
Unable to find Unknown proc1
и предложит найти proc1 или проигнорировать сообщение.

Так вот чтобы это сообщение не появлялось, можно написать в этом файле ту же команду EXTERNAL ARRAY proc1.
Компилятор сочтет proc1 внешним массивом и "ругаться" не станет, построив нормальный EXE.
А нормальным он будет потому, что команды вызова процедуры/функции и обращения к элементу массива превращаются компилятором в один и тот же код!
Причем, не важно, будут ли при обращении к proc1 параметры или нет, а если будут, то 1-2 или больше.

PPS
В некоторых случаях (например, при подключении внешнего процедурного файла) ту же проблему можно решить иначе - создав где-то, например, в головном файле процедуру-пустышку с именем proc1. Компилятор ее увидит и ругаться не будет, а при работе EXE вызываться будет не она, а реальная процедура из процедурного файла согласно приоритету вызовов.
Этот вариант проще, так как команду EXTERNAL ARRAY придется вставлять во все PRG, где вызывается proc1, а определить процедуру-пустышку достаточно один раз (ну, увеличится EXE на несколько байтов на каждую такую пустышку - не проблема ).



Исправлено 9 раз(а). Последнее : akvvohinc, 06.12.20 03:22
Ratings: 0 negative/0 positive


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

On-line: 32 Rifat  (Гостей: 31)

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