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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 22:02   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию Буфер клавиатуры

Доброго всем! Старейший вопрос паскаля, который помоему так и не нашел достойного решения, по крайней мере для меня. Хотельсь бы его найти сейчас. Так вот, нужно узнать все (ну как все, ес-сно не больше 16) нажатые клавиши. Я решил читать напрямую буфер:

Код:
Program TestBuff;
Uses CRT;
var
  KB : array [0..15] of word absolute $0000:$041E;
  i : byte;
begin
  while ReadKey<>#27 do
  begin
    for i:=0 to 15 do 
      writeln(KB[i]);
    GotoXY(1,2);
  end;
end.
Нус, весь буфер считан, но, есть но - опредилить какие из клавиш нажаты на данный момент не получается. Нужно как то отфильтровать, есть идеи?

PS Если я пошел не тем путем и\или вы уже нашли решение, был бы рад на него посмотреть
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 07.12.2010, 22:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне что-то кажется, что или я Вас не понимаю, или Вы не понимаете, как организована работа с клавиатурой в MS DOS...

1) что такое - нажаты на данный момент?!
Что Вы хотите получить в результате работы программы?

2) для анализа, что происходит в буфере клавиатуры крайне полезна программка KNKBDI (с) Nikita E.Korzun
вытаскивает всё что можно и даже больше
я выкладывал её на форуме. тут.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.12.2010, 22:40   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Цитата:
1) что такое - нажаты на данный момент?!
Что Вы хотите получить в результате работы программы?
Например, я нажал одновременно на "a" и "b" клавиши, и пока я их удерживаю они являються - нажатыми на данный момент. Результат работы программы - вывод нажатых на данный момент клавиш, тоесть "a" и "b". Я отпускаю клавишу "a", но продолждаю удерживать клавишу "b", тоесть на данный момент нажата только клавиша "b", результат "b". И так далее, так понятнее?

Цитата:
или Вы не понимаете, как организована работа с клавиатурой в MS DOS...
Эмм...юзверЪ тыкает клавишу, в буфере она сохраняется, он тыцкает следующую клавишу она опять сохраняется, и так до 16 клавиш, потом буфер начинает переписываться сначала, при этом не обнуляя остальных элементов. Или я не прав?

Есть идея сделать отдельный поток и там обрабатывать KeyPressed, но сделать поток в TP я затрудняюсь...

PS
Я наверное не правильно поставил задачу в первом посте, мне нужно сделать что то типа сыбития, которое вызывало бы определенную функцию при нажатии клавиши...
В планах порабощение вселенной...

Последний раз редактировалось Stilet; 08.12.2010 в 13:26.
zumm вне форума Ответить с цитированием
Старый 08.12.2010, 16:54   #4
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Эх, все приходится делать самому. Решил все чтением с $60 порта. Вот код, может кому поможет:

Код:
var 
  LastCode,Code,i: byte;
  Key: array[0..127] of boolean;
begin
  LastCode:=$80;
  while LastCode<>$2e do
  begin
    Code:=Port[$60];
    if Code<>LastCode then
    begin
      if Code<$80 then
        Key[ Code]:=true
      else
        Key[Code-128]:=false;
      ClrScr;
      Writeln('-------');
      for i:=1 to 127 do
        if Key[i] then
          Writeln(i);
      Writeln('-------');
      GotoXY(1,1);
      LastCode:=Code;
    end;
  end;
end.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кольцевой буфер KTOIA Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 01.11.2009 18:17
буфер обмена olimpus Microsoft Office Excel 2 19.09.2009 08:52
принадлежит ли число, введённое с клавиатуры отрезку (а;в). Границы отрезка вводятся с клавиатуры Maria, Russia Помощь студентам 3 17.02.2009 22:01
Буфер Черничный Общие вопросы Delphi 5 10.09.2008 09:35