:: Visual Foxpro, Foxpro for DOS
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Могу пояснить откуда берется конструкция "&cArray[256]" (кавычки тоже часть конструкции).
В визуальном дизайнере меню добавляю строку и в для PROMPTа (имени пукта меню) прописываю как &cArray[256] (без кавычек).
Далее генерирую меню "Menu->Generate.." и получаю файл MPR что-то типа:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "&cArray[256]"
Все бы ничего, но изредка конструкция "&cArray[256]" дает сбой, описанный в самом начале.


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Starpom

Сообщений: 71
Дата регистрации: 29.06.2006
dimuhametov
Могу пояснить откуда берется конструкция "&cArray[256]" (кавычки тоже часть конструкции).
В визуальном дизайнере меню добавляю строку и в для PROMPTа (имени пукта меню) прописываю как &cArray[256] (без кавычек).
Далее генерирую меню "Menu->Generate.." и получаю файл MPR что-то типа:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "&cArray[256]"
Все бы ничего, но изредка конструкция "&cArray[256]" дает сбой, описанный в самом начале.
Делай проверку на наличие данных в элементе массива перед тем как его применишь.
Я прогнал твой код в начале и на 2.5, и на 5-10 и на ошибку не вышел. Как Выше писали возможно что где то происходит подмена. Причем использовалось определение массива как локальный, может перевести массив в глобальный?
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Starpom
Делай проверку на наличие данных в элементе массива перед тем как его применишь.
идея хорошая. спасибо
Starpom
Причем использовалось определение массива как локальный, может перевести массив в глобальный?
с PUBLIC массивом ситуация аналогичная


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
Starpom
Делай проверку на наличие данных в элементе массива перед тем как его применишь.
идея хорошая. спасибо

Тогда я не понял - разве в исходном коде перед выполнением строки:
? "&cArray[256]" && &cArray[256] - проблема
с наличием данных в 256-м элементе массива есть проблемы?

И команда
? cArray[256]
не выдает 256?
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
akvvohinc
dimuhametov
Starpom
Делай проверку на наличие данных в элементе массива перед тем как его применишь.
идея хорошая. спасибо

Тогда я не понял - разве в исходном коде перед выполнением строки:
? "&cArray[256]" && &cArray[256] - проблема
с наличием данных в 256-м элементе массива есть проблемы?

И команда
? cArray[256]
не выдает 256?
? "&cArray[256]" выдает &cArray[256]
? cArray[256] выдает 256


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
? "&cArray[256]" выдает &cArray[256]
? cArray[256] выдает 256

А в чем тогда "хорошесть идеи" проверять содержимое элемента массива?
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
dimuhametov
Далее генерирую меню "Menu->Generate.." и получаю файл MPR что-то типа:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "&cArray[256]"

А почему там нельзя просто:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT cArray[256]

Для чего нужна именно макроподстановка?


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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
А почему там нельзя просто:

DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT cArray[256]


Для чего нужна именно макроподстановка?

Видимо, потому, что кавычки принудительно подставляет генератор, и без макро строка
DEFINE BAR 1 OF shortcut PROMPT "cArray[256]"
выдаст не тот результат, на который рассчитывали.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
Могу пояснить откуда берется конструкция "&cArray[256]" (кавычки тоже часть конструкции).
В визуальном дизайнере меню добавляю строку и в для PROMPTа (имени пукта меню) прописываю как &cArray[256] (без кавычек).
Далее генерирую меню "Menu->Generate.." и получаю файл MPR что-то типа:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "&cArray[256]"

А почему бы тогда в дизайнере не написать:
"+cArray[256]+"

что после генерации выдаст:
""+cArray[256]+""
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
akvvohinc
А почему бы тогда в дизайнере не написать:
"+cArray[256]+"
Вроде результат положительный, спасибо, но нужно ждать появления косяка
akvvohinc
что после генерации выдаст:
""+cArray[256]+""
в меню выходит та же строка ""+cArray[256]+""


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
text to lcMenu
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "<<cArray[256]>>"
endtext
execs(lcMenu)
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Ydin
text to lcMenu
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "<<cArray[256]>>"
endtext
execs(lcMenu)
прикольно, спасибо, буду пробывать.


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimag

Сообщений: 464
Откуда: Одинцово
Дата регистрации: 17.12.2002
Так наверное проще:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT Textmerge("<<cArray[256]>>")


------------------
Глупость - это не отсутствие ума, это такой ум.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
akvvohinc
А почему бы тогда в дизайнере не написать:
"+cArray[256]+"
Вроде результат положительный, спасибо, но нужно ждать появления косяка
akvvohinc
что после генерации выдаст:
""+cArray[256]+""
в меню выходит та же строка ""+cArray[256]+""
Не верю!

Покажи сгенерированный MPR.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
Ydin
text to lcMenu
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "<<cArray[256]>>"
endtext
execs(lcMenu)
прикольно, спасибо, буду пробывать.

Опять не понял - если меню можно создавать не с помощью генератора, то нет и озвученной проблемы, так как макрос не будет нужен.

А если с помощью генератора, то он не создаст меню описанным способом.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
dimuhametov
в меню выходит та же строка ""+cArray[256]+""

В первом посте ты привел код, который у тебя в некоторой среде выдает:
? cArray[256] && 256 - Ок
? "&cArray[256]" && &cArray[256] - проблема

Очевидно, что в этот же момент строка:
? ""+cArray[256]+"" && 256 - Ок
проблем не вызовет (или вызывает?!).

А значит, озвученная проблема либо решена, либо решать надо было другую проблему (то есть дело не в макро), либо ты просто где-то ошибся.



Исправлено 1 раз(а). Последнее : akvvohinc, 18.10.19 17:19
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
dimuhametov
Могу пояснить откуда берется конструкция "&cArray[256]" (кавычки тоже часть конструкции).
В визуальном дизайнере меню добавляю строку и в для PROMPTа (имени пукта меню) прописываю как &cArray[256] (без кавычек).
Далее генерирую меню "Menu->Generate.." и получаю файл MPR что-то типа:
DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "&cArray[256]"
Все бы ничего, но изредка конструкция "&cArray[256]" дает сбой, описанный в самом начале.

Генератор меню в FoxPro - это обычный файл PRG, который, если необходимо, можно вполне модифицировать под свои нужды

MODIFY COMMAND (Home()+"genmenu.prg")

Если посмотреть, как именно выполняется эта самая генерация, то там формируется строка вида

DEFINE BAR <<m.itemno>> OF <<m.cPopExpr>> PROMPT "<<m.prompt>>"

Где переменные памяти - это содержимое тех полей, которые ты заполнял при конструировании меню в конструкторе. И здесь кавычки ставятся исходя из предположения, что в качестве PROMPT был указан текст. Что, в общем, логично

Если же речь идет о том, что текст пункта меню должен формироваться динамически из массива, то, в принципе, возможны 2 решения

1. Модифицировать код генератора меню с тем, что если переменная m.prompt начинается с какого-либо спец.символа (той же макроподстановки), то не окружать текст кавычками, а оставить "как есть". Возможно даже предварительно удалив этот спец.символ

В процедуре genmenu.prg это функция FUNCTION defbars

Там интерес представляет строка

m.prompt = SUBSTR(PROMPT, 1,LEN(PROMPT))
\\ PROMPT "<<m.prompt>>"

переменная m.prompt формируется из значения поля PROMPT таблицы-конструктора и записывается в файл MPR с кодом сформированного меню. Вот здесь и надо будет "помудрить"


2. А может, ну его этот генератор? Какие проблемы-то вручную написать PRG для генерации меню? Если очень хочется, можно его переименовать в MPR
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Владимир Максимов
Если же речь идет о том, что текст пункта меню должен формироваться динамически из массива, то, в принципе, возможны 2 решения
Ну почему же только два?
Выше я предлагал третье, не требующее модификации или написания генератора.

Но, судя по ответам ТС, проблема, возможно, вовсе не в макро, если предложенное мною решение тоже не прошло:
dimuhametov
в меню выходит та же строка ""+cArray[256]+""
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
akvvohinc
Владимир Максимов
Если же речь идет о том, что текст пункта меню должен формироваться динамически из массива, то, в принципе, возможны 2 решения
Ну почему же только два?
Выше я предлагал третье, не требующее модификации или написания генератора.

Да. Тоже вариант. Хотя необходимость "придерживать пальцем" как и в первом предложенном мной варианте, лично мне не нравится

akvvohinc
Но, судя по ответам ТС, проблема, возможно, вовсе не в макро, если предложенное мною решение тоже не прошло:
dimuhametov
в меню выходит та же строка ""+cArray[256]+""

Это он так не очевидно подтвердил твой вывод. Я сгенерил меню по этому варианту и получил в итоге

DEFINE BAR 3 OF test PROMPT ""+cArray[256]+""

Т.е. это работает. Хотя и требует повышенной бдительности от разработчика

Лично я в данном случае вообще отказался бы от генератора и писал бы код вручную. Но, видимо, есть свои особенности
Ratings: 0 negative/0 positive
Re: Проблема с массивами
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Владимир Максимов
Это он так не очевидно подтвердил твой вывод. Я сгенерил меню по этому варианту и получил в итоге
DEFINE BAR 3 OF test PROMPT ""+cArray[256]+""

Т.е. это работает.

То, что генератор так сработает, ясно.
Но то, что даже в таком виде меню у ТС всегда работает так, как ему нужно, мне из его ответа не показалось.

Он собирался пробовать что-то еще:
dimuhametov
прикольно, спасибо, буду пробовать.

Владимир Максимов
Лично я в данном случае вообще отказался бы от генератора и писал бы код вручную.

Похоже, проблема не в том, как создается это меню.



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


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

On-line: 37 (Гостей: 37)

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