Ach ta klawiatura

0

W jaki sposób można sprawdzić czy dany klawisz został wcisniety ?Interesuja mnie klawisze F11 i F12. Najlepiej zeby procedura spradzajaca, czy ktorys z tych klawiszów został wcisniety. Nie powinna zaklocac pracy innym modulow obslugujacym klawiature (na przyklad crt, ikey itd.)

0

moge sie mylic.
adresiki ASCI tych przyciskow sa 2 czesciowe, czyli: 0 i jeszcze jedna liczba, jaka nie pamietam (dzialaja podobni do kursorow)

(jesli pomylka to sorry)

0

tak, jest takie cos, ale tylko do F10. A chciałbym, żeby procedura do sprawdzania stanu klawiszy F11 i F12, działała zarówno wtedy, gdy mam uruchomiony moduł crt, ikey lub jeszzce jakis inny ...

0
key := port[$60];

key = 57h -> F11
key = 58h -> F12

pełna lista ScanCode:
http://www.ctyme.com/intr/rb-0045.htm#Table6

0

funkcja $10 (mov ah,10h) przerwania $16 (int 16h), ma troszkę wiecej mozliwości niz standardowo uzywana (funkcja 0). Wyłapuje również f11 i f12.

{zamiast readkey}
procedure getkey(var k1,k2:char {byte, obojętnie});
assembler;
asm
  mov ah,10h
  int 16h
  les di,[k1]
  mov byte ptr es:[di],al
  les di,[k2]
  mov byte ptr es:[di],ah
end;

{zamiast keypressed}
function keyhit:boolean;
assembler;
asm
  mov ah,11h
  int 16h
  mov al,true
  jnz @1
  xor al,al
  @1:
end;

Tylko, że przy uzyciu tej procedury i funkcji musisz zrezygnować z readkey i keypressed, co w sumie wyjdzie na dobre, bo to tylko dublowanie funkcji.

// Łoł, szybko zrobił się straszny tłok w tym topiku.

// Co do samej funkcji 10h/11h. Wszelkie kody ascii pokraywają się ze standardową funkcją poza jednym wyjatkiem. Większość klawiszy funkcyjnych ma 0, ale albo klawiatura numeryczna, albo wszelkie strałki,dletety,inserty,pejdżapyi pejdżdałny mają kod 224 (sami sprawdźcie). Sa, skankod, to numer klawisza na klawiaturze, w większości wypadków niezmienny niezależnie od tego czy klawisz był wcisnięty z sziftem, altem, czy kontrolem. Poza tym enter ma 28, esc 1, f1 ma 59 del - 81... (no standard, co wiecej można pisać?)

mozna to przerobic na funkcję:

function getkey:word; 
assembler;
asm
  mov ah,10h
  int 16h
end; {w ax zwracana jest domyslnie wartośc 2bajtowa}

Adam... flabra przede wszystkim pisze się z małej [diabel]

0

Ale beka :-) Ja tu się już od tygodnie męczę z tą obsluga klawiatury, sciagam jakies skomplikowane moduly, lookam do swaga, a tu sie okazuje ze mozna to sprawdzic w zaledwie paru linijkach. Dzieki Marooned.

0

Hmm... A ja mam takie pytanko, dotyczące kodu Flabry (tak to się odmienia?) Co oznaczają te zmienne k1 i k2 w tej funkcji odpowiadającej ReadKey (W ASMie jestem słabszy niż w BASIC'u... W Basicu ostatnio pisałem ze 12 lat temu, a w ASMie w ogóle)?
// Dzięki Marooned, ale przyznasz chyba, że przy absolutnym braku wiedzy na temat ASM nie miałem możliwości tego wydedukować. Tak czy inaczej, dzięki za info - przyda się.

0

Adam:
k1 = ASCII character
k2 = BIOS scan code

http://www.ctyme.com/intr/rb-1771.htm

1 użytkowników online, w tym zalogowanych: 0, gości: 1