for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Re: Как сделать меню в FoxPRO DOS?
Ydin

Сообщений: 5855
Откуда: Киев
Дата: 08.01.18 14:15:16ОтветитьЦитировать
Simple777
Ydin
spinz - это медстрах? Или я не прав.

В Скрижали, штоле?
Логическим можно ответить? .T. или .F.
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 14:17:13ОтветитьЦитировать
Ydin
мне туда вернуться уже не светит, а чувствую - это будущее...

Назад, в будущее!.. :bi:
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 14:18:38ОтветитьЦитировать
Ydin
Simple777
Ydin
spinz - это медстрах? Или я не прав.

В Скрижали, штоле?
Логическим можно ответить? .T. или .F.

Тут больше подошло бы .NULL. , но таки да.
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата: 08.01.18 14:22:07ОтветитьЦитировать
Simple777
Хорошим этот способ не назовешь, но для практики или лабы покатит.
Ну вот смотри, обернул и все равно не выходит из процедуры.
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 14:27:48ОтветитьЦитировать
Если используется команда PROMT, то ON ESCAPE работает иначе. Надо в процедуру добавить CASE N=0.
Если будет нажата клавиша ESCAPE, то N будет равно 0.
Вообще PROMPT тоже не очень хорошая команда, но в FPD 1.1 видимо, другого и не было.
Ratings: 0 negative/1 positive

Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата: 08.01.18 15:14:09ОтветитьЦитировать
А как считать с клавиатуры не цифры а буквы?

Если так считывает цифры:
  
  Roklad=0  
  @ 2,10 TO 4,50 DOUBLE  
  @ 3,11 SAY "Поиск людей по окладу"   
  @ 4,10 TO 10,50 DOUBLE  
  @ 5,11 SAY "Введите оклад:" get Roklad   
  Read

То так не считывает буквы, а просто пропускает данные строчки:

  
  Roklad=""  
  @ 2,10 TO 4,50 DOUBLE  
  @ 3,11 SAY "Поиск людей по окладу"   
  @ 4,10 TO 10,50 DOUBLE  
  @ 5,11 SAY "Введите оклад:" get Roklad   
  Read



Исправлено: TheGodMode, 08.01.18 15:14
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 15:21:46ОтветитьЦитировать
У команды @ X,Y GET есть еще опции PICTURE.

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

@ X,Y GET myvar PICTURE '9999'
READ

Если надо вводить и буквы и цифры, то:

@ X,Y GET myvar PICTURE 'XXXX'
READ

Есть и другие функции в опции PICTURE
Ratings: 0 negative/1 positive

Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 11319
Откуда: Н.Новгород
Дата: 08.01.18 15:51:43ОтветитьЦитировать
Кстати, про печать. Если в FPD 1 есть перехват клавиш (ON KEY [LABEL]), то можно сделать примерно так (дать возможность по горячей клавише напечатать этот файл):

...  
  ON KEY DO MyPrint WITH parFILE  
  MODI FILE (parFILE)  
  ON KEY  
  ...  
    
  PROC MyPrint  
  PAPAM parFILE  
  x = INKEY()  
  IF NOT x=код горячей клавиши, на которую назначена печать  
     RETURN  
  ENDIF  
  ...печать файла parFILE  
  RETURN
Ratings: 0 negative/1 positive

Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата: 08.01.18 16:54:17ОтветитьЦитировать
Simple777
Если надо вводить и буквы и цифры, то:

@ X,Y GET myvar PICTURE 'XXXX'
READ

Ну вот я хочу сделать поиск фамилий по первой букве, пытаюсь сделать так но ничего не выходит



Исправлено: TheGodMode, 08.01.18 16:58
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 11319
Откуда: Н.Новгород
Дата: 08.01.18 17:09:18ОтветитьЦитировать
DO While !eof()  && это зачем? Раньше чем LOCATE не надо проверять!  
    					LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)    
    					IF FOUND()		&& Найдено     
    						k=k+1    
    						DO Vivod    
    						k=k+1    
    						@ROW+k,1 SAY replicate('-',115)    
    					ENDIF    
        
    					if !eof()    
    						skip    
    					endif       
    				enddo
замени DO WHILE на SCAN FOR
  
    					SCAN FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)    
    						k=k+1    
    						DO Vivod    
    						k=k+1    
    						@ROW+k,1 SAY replicate('-',115)    
    				endSCAN

а перед этим SCAN предварительно проверь наличие записей, чтобы зря шапку в файл не выводить
LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)    
  IF NOT FOUND()	&& Не Найдено     
    * тут чтото сообщить на экране, что нет с такими буквами фамилий  
     RETURN  
  ENDIF



Исправлено: of63, 08.01.18 17:22
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 17:19:47ОтветитьЦитировать
TheGodMode
LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)

Насчет функции UPPER. Наверняка она не работает для кириллицы - в версии FPD 1.1 не было поддержки национальных кодовых страниц.

Поэтому следует для преобразования использовать функцию CHRTRAN(), где в качестве второго аргумента будет строка символов из всех маленьких букв кириллицы, а в качестве третьего аргумента - все большие буквы. Типа так:

rfamil1=CHRTRAN(rfamil,'абвгд...','АБВГД...')

rfamil2=CHRTRAN(famil,'абвгд...','АБВГД...')

И я бы выполнял поиск так (чтобы не заморачиваться, как там работает "==" и какая установка активна у SET EXAC)

Locate for SUBSTR(rfamil1,1,1)=SUBSTR(rfamil2,1,1)



Исправлено: Simple777, 08.01.18 17:21
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 17:20:52ОтветитьЦитировать
of63
замени DO WHILE на SCAN FOR

Я вот не уверен, что в FPD 1.1 была конструкция SCAN FOR
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 11319
Откуда: Н.Новгород
Дата: 08.01.18 17:25:12ОтветитьЦитировать
LOCATE то работает, а SCAN - не один ли ...код?

Ну, если нет, то он там опть что-то со SKIP пишет... не проникся парой LOCATE - CONTINUE ...

Хелп надо бы на этот FPD 1...

Точно про CHRTRAN(rfamil,'абвгд...','АБВГД...') подметил! Записать ее в виде подпрограммы RuUPPER и пользовать вместо UPPER.



Исправлено: of63, 08.01.18 17:30
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 17:31:09ОтветитьЦитировать
Да, надо использовать не SKIP, а CONTINUE (после успешного LOCATE)
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 17:33:28ОтветитьЦитировать
of63
Точно про CHRTRAN(rfamil,'абвгд...','АБВГД...') подметил! Записать ее в виде подпрограммы RuUPPER и пользовать вместо UPPER.

Не поверишь, но такая функция в индексном выражении позволяет использовать MACHINE как COLLATE (Надеюсь, ИК не прибьет за такое смелое заявление )
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 11319
Откуда: Н.Новгород
Дата: 08.01.18 17:39:09ОтветитьЦитировать
Непонятно, как FPD 1 видит русские символы ASC()>127? Они для него как буквы? Или как не буквы?
Почему фокс не ругается, что какие-то символы непонятные. Что вернет от них ISALPHA() если такая ф-ия есть... Хотя какая фоксу разница, что за символы в строках (данных)...
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 19366
Дата: 08.01.18 17:42:45ОтветитьЦитировать
of63
Непонятно, как FPD 1 видит русские символы ASC()>127? Они для него как буквы? Или как не буквы?
Почему фокс не ругается, что какие-то символы непонятные. Что вернет от них ISALPHA() если такая ф-ия есть... Хотя какая фоксу разница, что за символы в строках (данных)...

На FPD 1.1 не работал вааще-та. Но думаю, что нормально он видит русские буквы. Символы берутся из дополнительной кодовой страницы MS-DOS. А вот преобразовывать вторую половину таблицы FPD 1.1 точно не может.



Исправлено: Simple777, 08.01.18 17:43
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
Ytuzov

Сообщений: 247
Откуда: Нижний Новгород
Дата: 08.01.18 17:45:36ОтветитьЦитировать
of63
Хелп надо бы на этот FPD 1...
Для 1.02 drive.google.com
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
akvvohinc

Сообщений: 2783
Откуда: Москва
Дата: 08.01.18 18:00:03ОтветитьЦитировать
Когда не было UPPER() для русских букв, то обычно пользовались SYS(15), а не CHRTRAN().
Так удобнее - один раз определяешь глобальную переменную со всеми символами и пользуешься.
То есть, фактически задается только 2 параметра - что перекодировать и таблица перекодировки, а не 3, как для CHRTRAN().
Ratings: 0 negative/0 positive

Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 11319
Откуда: Н.Новгород
Дата: 08.01.18 18:14:10ОтветитьЦитировать
Ytuzov
of63
Хелп надо бы на этот FPD 1...
Для 1.02 drive.google.com
О! Спасибо.

2Simple. SCAN там c FOR-ом
Ratings: 0 negative/0 positive



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

On-line: 51 Chemberzhy Божья_коровка BOBAN  and Guests: 48


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