Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2010, 17:15   #1
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
Вопрос Коды клавиш - буквы и остальные символы, Паскаль

Я хочу реализовать в программе на языке Паскаль ввод данных в режиме диалога с пользователем, т.е. он может сам вводить свои данные и видеть результат ввода. Перемещение между кнопками - через курсорные клавиши (вверх и вниз). Ввод данных и перемещение я успешно сделала. Проблема в том, что клавиши типа Delete, Insert, F1-F10 тоже выводятся на экран. Я пробовала заблокировать их через коды клавиш. Например, стрелка вправо выводила на экран латинскую М. При блокировке она не стала этого делать, но обычная латинская М тоже перестала работать! Пожалуйста, подскажите, как мне сохранить полный и правильный ввод с текстовой и цифровой клавиатуры и игнорировать остальные клавиши (стрелки, Delete, Insert и т.д.)?
Фиалка001 вне форума Ответить с цитированием
Старый 01.05.2010, 20:38   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Посмотрите здесь: http://atomas.ru/tp/13/13_1.html
И вот программка для определения кода клавиш: 11_code.rar Может поможет.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 01.05.2010, 20:42   #3
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию

Я уже перепробовала несколько вариантов, страничку ту изучила... Но всё равно не получается. Может быть, знаете, куда именно и что именно нужно вставить в этой процедуре?..

Код:
    Procedure Shag2Ab;
      Var
        X1,Y1:integer;
        exitkey:boolean;
        key:char;
      Begin{Shag2Ab}
        ...
        fam:=''; im:=''; ot:=''; pasp:='';
        poz:=1;
        SetTextJustify(1,0);
        SetLineStyle(5,0,3);
        X1:=X1v+130+140;
        Obvodka(X1,Y1v,4,poz);
        exitkey:=false;
        Repeat
          If keypressed
          Then
            Begin{keypressed}
              key:=readkey;
              SetFillStyle(0,3);
              Bar(155,GetMaxY-15,GetMaxX-155,GetMaxY-2);
              Case key of
                {Esc:}
                #027:Begin
                       poz:=0;
                       exitkey:=true
                     end;
                {Стрелка вниз:}
                #080:Begin
                       Obvodka(X1,Y1v,3,poz);
                       If poz=4
                       Then
                         poz:=1
                       Else
                         inc(poz);
                       Obvodka(X1,Y1v,4,poz);
                     End;
                {Стрелка вверх:}
                #072:Begin
                       Obvodka(X1,Y1v,3,poz);
                       If poz=1
                       Then
                         poz:=4
                       Else
                         dec(poz);
                       Obvodka(X1,Y1v,4,poz);
                     End;
                {Сами данные}
                #032..#175,#224..#241:   case poz of
                                           1: Begin
                                                fam:=fam+key;
                                                StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                                                OutTextXY(X1v+130+200,Y1v+20,fam)
                                              End;
                                           2: Begin
                                                im:=im+key;
                                                StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                                                OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),im)
                                              End;
                                           3: Begin
                                                ot:=ot+key;
                                                StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                                                OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),ot)
                                              End;
                                           4: Begin
                                                pasp:=pasp+key;
                                                StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                                                OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),pasp)
                                              End
                                         End;{case}
                {Backspace}
                #008:   Case poz of
                          1: Begin
                               delete(fam,length(fam),1);
                               StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                               OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),fam)
                             End;
                          2: Begin
                               delete(im,length(im),1);
                               StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                               OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),im)
                             End;
                          3: Begin
                               delete(ot,length(ot),1);
                               StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                               OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),ot)
                             End;
                          4: Begin
                               delete(pasp,length(pasp),1);
                               StrKn(X1v+130+140,Y1v+60*(poz-1),15);
                               OutTextXY(X1v+130+200,Y1v+20+60*(poz-1),pasp)
                             End;
                        End;{case}
                {Enter}
                #013: If not((fam='')or(im='')or(ot='')or(pasp=''))
                      Then
                        exitkey:=true
                      Else
                        OutTextXY(GetMaxX div 2,GetMaxY,'Заполните пустые поля!')
              End{Case}
            End;{keypressed}
        Until exitkey
      End;{Shag2Ab}
Фиалка001 вне форума Ответить с цитированием
Старый 01.05.2010, 21:01   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Делайте проверку вводимых символов в операторе Case. У Вас в коде идёт
Код:
If keypressed Then
Если клавиша нажимается, то выполняем следующие действия и там у Вас далее идёт оператор
Код:
Case Key Of
и при нажатии клавиши сверяется её код. Попробуйте там же написать если клавиша равна допустим BackSpace (её код 8) (попробуйте записать как #08) то не выводить её. Я в Паскале мало работал я больше по Делфи. Поэтому точно не знаю как в Паскале ограничить ввод. В Делфи я написал бы Key:=#0;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Коды клавиш - буквы и дополнительные символы Фиалка001 Паскаль, Turbo Pascal, PascalABC.NET 13 02.05.2010 13:23
коды клавиш на ТС alex(21) Общие вопросы C/C++ 1 13.11.2009 10:23
коды клавиш-? Evgenii Общие вопросы Delphi 8 28.10.2009 22:00
Коды клавиш valerij Microsoft Office Excel 0 20.08.2008 07:49
Коды клавиш KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 09.08.2007 22:25