Newsgroup: it.comp.lang.pascal
Titolo: Come funziona kbxxxx

Ciao a tutti i magnati della programmazione...
mi piacerebbe sapere come si utilizza questa funzione che a quanto pare
permette di utilizzare tasti "particolari", ovvero non char, tipo le
freccette, Esc, i vari F ecc...
Grazie un sacco per l'ascolto (e possibilmente per l'aiuto)
C Ya !
N.B.: TP 6.0


Non ho mai sentito di una funzione kbxxxx, 
però ti allego qualcosa di ciò
che uso io a casa:
Unit 
Basic;
Interface
Var
       
LastCharIn,LastControlFlags  : 
Integer;
       
ControlFlags      : Word Absolute 
0000:$0417;
       
ControlFlags2     : Word Absolute 0000:$0496;
Const 
EA_LEFT   =-75;  EA_RIGHT   =-77;  
EA_UP    =-72;
  EA_DOWN   =-80;  
EA_PGUP    =-73;  EA_PGDN   =-81;
  
EA_HOME   =-71;  EA_END     =-79;  
EA_INS    =-82;
  EA_DEL    =-83;  
EA_F1     =-59;  EA_F2     
=-60;
  EA_F3     =-61;  
EA_F4     =-62;  EA_F5     
=-63;
  EA_F6     =-64;  
EA_F7     =-65;  EA_F8     
=-66;
  EA_F9    =-67;  
EA_F10     =-68;
  EA_SFTF1  =-84;  
EA_SFTF2   =-85;  EA_SFTF3  =-86;
  EA_SFTF4  
=-87;  EA_SFTF5   =-88;  EA_SFTF6  =-89;
  
EA_SFTF7  =-90;  EA_SFTF8   =-91;  EA_SFTF9  
=-92;
  EA_SFTF10 =-93;
  EA_CTLF1  =-94;  
EA_CTLF2   =-95;  EA_CTLF3  =-96;
  EA_CTLF4  
=-97;  EA_CTLF5   =-98;  EA_CTLF6  =-99;
  
EA_CTLF7  =-100;  EA_CTLF8   =-101;  EA_CTLF9  
=-102;
  EA_CTLF10 =-103;
  EA_ALTF1  =-104;  
EA_ALTF2   =-105;  EA_ALTF3  =-106;
  EA_ALTF4  
=-107;  EA_ALTF5   =-108;  EA_ALTF6  =-109;
  
EA_ALTF7  =-110;  EA_ALTF8   =-111;  EA_ALTF9  
=-112;
  EA_ALTF10 =-113;
  EA_CTLPRNT=-114;
  
EA_CTLLEFT=-115;  EA_CTLRIGHT=-116;
  EA_CTLEND =-117;  
EA_CTLHOME =-119;
  EA_CTLPGUP=-132;  EA_CTLPGDN 
=-118;
  EA_CTLBRK =+3;
  EA_TAB    
=+9;          EA_BKSP   
=+8;   EA_ENTER  =+13;
  EA_ESC    
=+27;  EA_SPACE  =32;
  EA_A    =+65;  
EA_A_    =95;
  EA_Y    =Ord('Y');  
EA_N    =Ord('N');
  EA_RIGHTSHIFT=-1001;
  
EA_LEFTSHIFT =-1002;
  EA_SHIFT     
=-1003;
  EA_LCONTROL  =-1011;
  EA_RCONTROL  
=-1012;
  EA_CONTROL   =-1013;
  
EA_LALT      =-1021;
  
EA_ALTGR     =-1022;
  
EA_ALT       =-1023;
  
EA_SCROLLLOCK=-1033;
  EA_NUMLOCK   =-1034;
  
EA_CAPSLOCK  =-1035;
  EA_INSERT    
=-1036;
  EA_PCJR      =-1037;
  
EA_HOLD      =-1038;
  
XA_RIGHTSHIFT=1;
  XA_LEFTSHIFT=2;
  XA_CONTROL=4; 
XA_RCONTROL=4;
  XA_ALT=8; XA_ALTGR=8;
  
XA_SCROLLLOCK=16;
  XA_NUMLOCK=32;
  XA_CAPSLOCK=64;
  
XA_INSERT=128;
  XA_256=256;
  XA_512=512;
  
XA_PCJR=1024;
  XA_HOLD=2048;
  
XA_SCROLLLOCKPRESSED=4096;
  XA_NUMLOCKPRESSED=8192;
  
XA_CAPSLOCKPRESSED=16384;
  
XA_INSERTPRESSED=32768;
Implementation
Function 
ControlKeys:Boolean;
   Begin
    
LastControlFlags:=(ControlFlags and 65295);
    
ControlKeys:=Boolean(LastControlFlags);
   End;
Function 
Sky:Integer;
   Var tmp:Integer;
   
Begin
      
LastCharIn:=0;
      If KeyPressed 
then
      Begin
tmp:=Ord(ReadKey);
If tmp=0 
then LastCharIn:=-Ord(ReadKey) else 
LastCharIn:=tmp;
      
End;
      Sky:=LastCharIn;
   
End;
---------
usali così:
if 
ControlKeys
    
then
             
if (ControlFlags or 
XA_RIGHTSHIFT)<>0
                
then WriteLN('stai premendo il shift 
destro...');
             
if (ControlFlags = 
XA_RIGHTSHIFT)
                
then WriteLN('stai premendo SOLO il shift 
destro...');
oppure
             
if (LastControlFlags or 
XA_RIGHTSHIFT)<>0
                
then WriteLN('l'ultima volta è stato premuto (anche) il
shift 
destro...');
-------------------------------------------------
In 
pratica:
I codici che intendi tu sono i cosiddetti codici ASCII estesi, 
ovvero alla
pressione dei tasti F1, F2, PAGSU, ARROW, viene inviato un 
carattere '#0'
seguito da un altro codice che indica il carattere.
La 
funzione sky (ScanKeY) ti ritorna un integer, in cui i caratteri 
speciali
sono negativi per essere distinti dagli altri, quindi è come 
ottenere
x:=Ord(ReadKey);
Per i controlkeys la situazione è 
diversa: essi sono indicati dai bit
memorizzati nelle locazioni di memoria 
0000:$417 e 0000:$496, che ho
associato per comodità alle 
variabili
       
ControlFlags      e       
ControlFlags2,
che ti danno informazioni sui tasti indicati nelle 
costanti sopra (XA_xxx
etc).
spero di esserti stato d'aiuto.
P.S.: 
Ho tagliato e incollato - spero che funzioni bene e che non abbia
dimenticato 
nulla dal codice :-)
Ciao.
Darius. (
www.infotronica.it/darius/
)