:: Visual Foxpro, Foxpro for DOS
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Последний штрих.

Поскольку речь шла о том, что надо проверять переменную myvar на максимально допустимое значение, то небольшой добавчик к функции от vk65

function myPic
parameters myvar, n1, n2, n3, n4
note Проверка на максимально допустимое значение числа в переменной myvar
if abs(myvar)>10**(iif(myvar>=0,n3,n3-1))
ss=repl('9',n3)
return ss
endi
note [sm128]
ss = ltrim(str(myvar, n1, n2))
n1 = at([.], ss) - 1
ss = trim(chrtran(ss, [0], [ ]))
n2 = len(ss) - at([.], ss)
ss = left(padl(replicate([9], n1) + [.] + replicate([9], max(n2, n4)), n3, [9]), n3 - 1) + [9]
myvar = round(myvar, iif(at([.], ss) # 0, len(ss) - at([.], ss), 0))
return ss
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Тов Симпле находити отходы... Молодец
(Мне не нпавится состояние индиткатора любви... или чего=тгш там-о... Лучше, м.б., если он (индикатор) накодится в состоянии 0, обычнгое его состоянии, то... пусть он будет такой, как будто его и не было и нет...)
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Сейчас встраивал функцию в приложение, и выяснился не очень приятный нюанс. Оказывается, в таком виде функция не позволяет передавать в качестве переменной элемент массива. А это довольно неудобно, и надо везде вводить временные переменные вместо использования элементов массива. А можно ли как-то изменить функцию так, чтобы можно было передавать не только обычные переменные, но и элементы массива?

Как я понимаю, проблема в том, что при вызове функции не допускается в качестве переменной использовать элемент массива. То есть вот так вызывать функцию нельзя:

@ row, col get myvar(N) picture myPic(@myvar(N), 11, 6, 9, 2)

И вообще, если присмотреться, то не совсем ясен смысл параметра k1 (в данном примере k1=11). Вопчем-то, k1 должен быть всегда равен параметру k3 (в данном примере k3=9)

Этот параметр k1, конечно, я и обозначил, но вот сейчас уже не вижу в нем смысла. В любом случае в шаблон PICTURE нельзя будет поместить число, большее чем k3**10. Поэтому параметр k1 лишен смысла вроде как.



Исправлено 3 раз(а). Последнее : Simple777, 03.05.14 19:53
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Simple777
Как я понимаю, проблема в том, что при вызове функции не допускается в качестве переменной использовать элемент массива. То есть вот так вызывать функцию нельзя:
Да, элемент массива по ссылке передать нельзя. Но можно передать весь массив и индекс нужного элемента:
dimension myarr(3)
myarr = 1
?myarr(2)
=myfunc(@myarr, 2)
?myarr(2)
function myfunc
parameters parr, pind
parr(pind) = 5

Simple777
И вообще, если присмотреться, то не совсем ясен смысл параметра k1 (в данном примере k1=11). Вопчем-то, k1 должен быть всегда равен параметру k3 (в данном примере k3=9)
Его можно убрать:
ss = ltrim(str(myvar, 40, n2))
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Все работает!..

Выяснился один занятный нюанс, правда. Если вызывать функцию для GET вот так:

@ row, col get myvar picture myPic(@myvar, 11, 6, 9, 2)

то переменная myvar округляется и отображается в GET корректно, а вот если использовать вызов для SAY, то округленное значение переменной myvar не выводится, то есть переменная выводится без учёта округлений. Но побороть это оказалось очень просто. Надо сделать вызов функции 2 раза подряд. В этом случае при повторном выполнении SAY переменная myvar уже отображается с учётом округления. [sm128]
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Simple777
а вот если использовать вызов для SAY, то округленное значение переменной myvar не выводится, то есть переменная выводится без учёта округлений.
Значение SAY вычисляется раньше, чем срабатывает функция в Picture. Я в ряде случаев вместо SAY myVar использовал GET myVar WHEN .F.
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, типичная "ошибка" при использовании OUT параметров, а в сиподобных языках ещё и инкремента/декремента.
Школьная программа учит нас тому что сложение чисел коммутативно ("от перемены мест слагаемых сумма не меняется"), однако...

LOCAL lnValue
lnValue = 1
? m.lnValue + evil(@lnValue)
lnValue = 1
? evil(@lnValue) + m.lnValue
FUNCTION evil
LPARAMETERS tnInput
tnInput = m.tnInput + 1
RETURN 10


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
vk65
Simple777
а вот если использовать вызов для SAY, то округленное значение переменной myvar не выводится, то есть переменная выводится без учёта округлений.
Значение SAY вычисляется раньше, чем срабатывает функция в Picture. Я в ряде случаев вместо SAY myVar использовал GET myVar WHEN .F.

Так ведь GET потом надо будет типа деактивировать командой CLEAR GETS? Или не надо? Будет ли "подвешен" такой GET myVar WHEN .F. ?
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Не надо. Если после выдачи READ все GET недоступны, READ завершится.
myvar = 123
@ 2,2 get myvar when .f.
read
?myvar
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
То бишь сделать после таких GET контрольный READ?

Прям как в реале... [sm128]
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Вроде бы ничего не упустил.

А что ты голову себе морочишь с переменным шаблоном.
Разве шаблон "с запасом" наподобие pict '99999999999.999999' в данном случае не спасет отца русской демократии? [sm128]
А само поле уже сделает нужное обрезание. [attachment 18774 smile149.gif]


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




Исправлено 3 раз(а). Последнее : Crispy, 11.05.14 17:50
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Дык а где взять этот запас? :al: Нету запасу, и даже супротив того, имеется недоимка. Кагбы кафтан скорее тесноват, нежели мешковат. Вот в том то и штука, что места совсем нету для такого шаблона с запасом. У меня ж DOS консольный режим - места мало на существующем видеокадре.
И насчет GET WHEN .F.
Я не пробовал такой трюк, но так понимаю, что такой GET выведет переменную в шаблоне не тем цветом, каким делает SAY, и получается, что еще надо менять цвет перед выводом GET WHEN .F.
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Simple777
И насчет GET WHEN .F.
Я не пробовал такой трюк, но так понимаю, что такой GET выведет переменную в шаблоне не тем цветом, каким делает SAY, и получается, что еще надо менять цвет перед выводом GET WHEN .F.
У SAY за цвет отвечает первая пара, у GET - вторая. Например, для вывода синим по белому:
@ row, col say myvar color b/w
@ row, col get myvar color ,b/w
Еще можешь открыть для себя понятие цветовых схем.
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Ну, про цветовые схемы знаю. Когда-то даже "баловался". В принципе,я выработал некий свой "стандарт" для диалоговых элементов, и от этого не отхожу. Кстати, никогда не пользуюсь буквами для задания цвета - только цифрами. Так уж сложилось изначально. [sm128]
Ratings: 0 negative/0 positive
Re: шаблон PICTURE переменной разрядности для @ coor1,coor2 GET myvar и READ (FPD)
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
[sm128]


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




Исправлено 1 раз(а). Последнее : Crispy, 12.05.14 08:30
Ratings: 0 negative/0 positive


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

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

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