Newsgroup: it.comp.lang.vo-clipper
Titolo: hotkey

'giorno a tutti.
piccolo problema:
fin ora ho utilizzato senza alcun problema i tasti funzione da f1 a f9
semplicemente
col registerhotkey e con il metodo dispatch a suo tempo suggeritomi
if oevent:message== wm_hotkey .and. oevent:param = 102 (o quello che era)
 .... codice vario
endif
oggi mi è balenata l'idea di usare il tasto f12..... ma non viene
assolutamente intercettato.
ho provato ad usare anche wm_keydown al posto di wm_hotkey ma nulla.
dov'è il trucco?
stefano .. the.fisher
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 assolutamente intercettato.
Io intercetto in questa maniera:
METHOD Dispatch(oEvent) CLASS StandardSDIWindow
 IF oEvent:Message == WM_KeyUp .and. oEvent:WParam == VK_F12
Nel Vin32Sdk trovi gli altri pulsanti, basta cercare Virtual-Key Codes
Ciao
Massimo Friargiu

 Nel Vin32Sdk trovi gli altri pulsanti, basta cercare Virtual-Key Codes
già visti
sembra che i tasti da f10 a f12 siano tabù sul mio pc.
mi manca il clipper: set key -41 to .... ed il gioco era fatto
mi sa, che sposto il tasto da f12 ad alt f9 e risolvo.
grazie cmq
ciao
stefano





 nel dispatch
allora nel metodo activate ho questo:
      RegisterHotKey(SELF:Handle(),1002,0,keyf9)
      RegisterHotKey(SELF:Handle(),1003,mod_alt,keyf9) // ex key12
nel dispatch
ho questo:
 
    DO CASE
        CASE oEvent:message == WM_hotkey
        DO CASE
 
            CASE oEvent:wParam == 1002
            	IF SELF:varid $ "CCO CCL1 CV1 CCL2 CCL3 CV3 AFAV LOC PROCU"
                    owin:=sceglicli{SELF}
            		owin:show()
               ENDIF
             CASE oevent:wparam == 1003
             IF SELF:varid $ "CCO CCL1 CV1 CCL2 CCL3 CV3 AFAV LOC PROCU"
             	    IF Empty(numerocli)
                    owin1:=newcli{SELF:Owner ,,ocserver,.t.}
                    ELSE
                    owin1:=newcli{SELF:Owner,,ocserver,.f.}
                    ENDIF
            		owin1:show()
            		ocserver:=clienti{}
               ENDIF
        ENDCASE
    ENDCASE
    RETURN SUPER:Dispatch(oEvent)
cosě i tasti F10,F11, F12 anche se registrati non li intercetta.
con l'altro sistema che mi era stato suggerito, cioč
IF oEvent:Message == WM_KeyUp .and. oEvent:WParam == VK_F12
senza il registerhotckey() non mi intercetta alcun tasto.
cmq ho risolto usando alt-F9 invece dell'F12 , ma mi piacerebbe capire da
cosa dipende, visto che pare sia
l'unico al mondo a cui non funziona.
ciao
Stefano


 nel dispatch
METHOD Dispatch(oEvent) CLASS StandardSDIWindow
 IF oEvent:Message == WM_KeyUp .and. oEvent:WParam == KEYESCAPE
   // Ho intercettato la pressione del pulsante ESC
    oTB := TextBox{SELF, "Attenzione !", "Vuoi veramente uscire dal 
programma ?"}
  oTB:Type := BOXICONQUESTIONMARK + BUTTONYESNO
  IF (oTB:Show() = BOXREPLYYES)
   SELF:Destroy()
   Quit
   ENDIF
  ENDIF
RETURN SUPER:Dispatch(oEvent)
Guarda l'esempio completo con il tasto Escape, ho provato anche con il tasto 
F12 come ti ho scritto prima e funziona correttamente.
Ciao
Massimo Friargiu 

Guarda l'esempio che to scritto e non intercettare nient'altro.
Ciao
Massimo Friargiu 

allora ho fatto questa prova, come dici tu: ho tolto tutto ed ho messo solo
questo.
METHOD Dispatch(oEvent) CLASS WPRATI (una semplice datawindow, con dei
tabcontrol)
 
 IF oEvent:Message == WM_KeyUp .and. oEvent:WParam == KEYESCAPE
         textbox{SELF,"ESc premuto"}:show()
      ELSEIF oEvent:Message == WM_KeyUp .and. oEvent:WParam == KEYF12
      	 textbox{SELF,"F12premuto"}:show()
      ENDIF
 
 
    RETURN SUPER:Dispatch(oEvent)
non mi intercetta nulla, neanche l' esc.
ciao


 tabcontrol)
purtroppo non funziona nei datawindow perchč quelli sono composti da tre 
windows incollato l'uno sopra l'altro e non č la DataWindow che riceve questi 
messaggi.
Normalmente gestisco la cosa cosě che uso soltanto controlli "intelligenti" 
che chiamano poi un metodo del datawindow:
class EnhancedSLE INHERIT SingleLineEdit
protect _aSetKey        AS ARRAY
 
method KeyUp( oEvent ) class EnhancedSLE
local nPos         as dword
local nKeyCode     as dword
super:KeyUp( oEvent )
nKeyCode    := oEvent:KeyCode
if nKeyCode != 0 .and. ! IsControlKeyPressed() .and. ! IsAltKeyPressed()
   do case
   case ( nPos := AScan( _aSetKey, {|aKey| aKey[1] == nKeyCode } ) ) > 0
        Eval( _aSetKey[nPos,2], self )
        return 1L
   case IsAccess( self:Owner, #SETKEY ) .and. ( nPos := AScan(;        
self:Owner:SetKey, {|aKey| aKey[1] == nKeyCode } ) ) > 0
        Eval( self:Owner:SetKey[nPos,2], self )
        return 1L 
   endcase
endif
return nil
Saluti
Wolfgang

In alternativa a quello che ti ha suggerito Wolfgang, potresti intercetarti 
nel dispatch di una classe derivata dalla sle ( che ti crei tu ) i pulsanti 
come ti ho fatto vedere in quell'esempio.
METHOD Dispatch(oE) CLASS LeftSle
   DO CASE
   CASE oE:wParam == VK_ESCAPE .AND. oE:Message == WM_GETDLGCODE
     Send( SELF:Owner, #EndWindow )   // Calls owners endwindow-meth
  ENDCASE
 RETURN SUPER:dispatch(oE)
Ciao
Massimo Friargiu 

.... pur sospettando che il problema derivasse dalla struttura della mia dw,
pensavo di essere l'unico sfigato sulla terra.... meglio cosě.
ho provato sia il metodo di wolfang, che il tuo e vanno entrambi. Vi
ringrazio per la pazienza e l'interessamento.
perň, ho optato per il metodo che usavo io, rinunciando all'f12 sostituito
da un altf9 perchč mi si aprivano altre problematiche... e non ho tempo per
stravolgere tante cose. Ho comunque messo da parte i vs consigli per la
prossima occasione.
Vi ringrazio di nuovo entrambi.
ciao
Stefano
