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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

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

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

Ну это надо на код смотреть а вообще у любой клавиши насколько я помню из школы есть два кода в паскале
типо первый и второй: вроде так.
первый отвечает за код печатных символов на клавиатуре а второй за непечатные.
rlevv вне форума Ответить с цитированием
Старый 01.05.2010, 17:22   #3
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию

А можно поподробнее про печатные и непечатные? Я этого нигде не могу найти...
Фиалка001 вне форума Ответить с цитированием
Старый 01.05.2010, 17:26   #4
Фиалка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, 17:33   #5
rlevv
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 15
По умолчанию

все клавиши на клавиатуре несут инфу в 2 байта тоесть 1 регистр (если на ассемблере)
1 байт - код кнопки типо A..Z,a..z,0..9,а..я и тому подобное
пример:
допостим мы хотим получить код символа:
ch:=readkey;
write(ord(ch):2);
если нажать на клавиши A..Z,a..z,0..9,а..я то получим реальный код данной клавиши.
а если нажать клавиши типо f1-f10 то получим 0
write(ord(readkey):2);
а с помощью вот этой штуки уже получим код символов типо f1-f10

Вот готовая прога она показывает коды символов:
Цитата:
program p1;
uses crt;
var st:string[20];
ch:char;
begin
textcolor(yellow);
textbackground(blue);
clrscr;
gotoxy(30,12);
textcolor(red + blink);
write(' Press Enter ');
readln;
window(30,11,50,13);
textcolor(black);
textbackground(lightgray);
ch:=' ';
while ch <> chr(27) do
begin
clrscr;
gotoxy(7,2);
write('"+"');
ch:=readkey;
if ord(ch)=0
then
begin
gotoxy(6,2);
write('1 kod ');
write(ord(ch):2);
delay(1000);delay(50000);
delay(50000);
delay(50000);
gotoxy(6,2);
write('2 kod ');
write(ord(readkey):2);
delay(1000);delay(50000);
delay(50000);
delay(50000);
end
else
begin
gotoxy(7,2);
write(' KOD = ');
write(ord(ch):2);
delay(1000);
delay(50000);
delay(50000);
end
end;
textattr:=lightblue+16*brown;
clrscr;
gotoxy(5,2);
write('konec rabotbI');
delay(50000);
delay(50000);


end.

Последний раз редактировалось rlevv; 01.05.2010 в 17:45.
rlevv вне форума Ответить с цитированием
Старый 01.05.2010, 17:59   #6
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию

Подскажите, пожалуйста, как мне нужно переделать этот кусочек программы, чтобы можно было одновременно и перемещаться по меню, и получать правильный ввод? Я не очень понимаю, как это реализовать...
Фиалка001 вне форума Ответить с цитированием
Старый 01.05.2010, 18:14   #7
rlevv
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 15
По умолчанию

Ну в моем примере ведь как раз разобран твой случай

ch:=readkey; читаем символ
if ord(ch)=0 then если введено A..Z,a..z,0..9,а..я и тд. то невыполнится условие так как в ch будет код символа
begin
write(ord(readkey):2); - 2Й код
end
else
write(ord(ch):2);- 1Й код

Короче: для тех кто в танке
Ставишь просто перед тем как выводить на экран считанный символ проверку что типо ord(ch)<>0 и всЁ все символы типо f1 и другие служебные клавиши просто не вылезут на экран
rlevv вне форума Ответить с цитированием
Старый 01.05.2010, 18:14   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Чтобы грамотно сделать меню, правильно по нему перемещаться и сделать интерактивный диалог с пользователем используй TurboVision!!!
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 01.05.2010, 18:16   #9
rlevv
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Чтобы грамотно сделать меню, правильно по нему перемещаться и сделать интерактивный диалог с пользователем используй TurboVision!!!
Необязательно я и на паскале такие консольные шедевры писал что мама не горюй
rlevv вне форума Ответить с цитированием
Старый 01.05.2010, 18:28   #10
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию

Тем более TurboVision использовать нельзя, всё нажно делать на обычном Паскале
Фиалка001 вне форума Ответить с цитированием
Ответ


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



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