Teclas atalho

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Teclas atalho

Mensagem por asimoes »

Ressucitando este tópico resolvi o problema do SET KEY com uma janela DIALOG assim:
Usando o artifício do SET TIMER.

Código: Selecionar todos

FUNCTION ViewImage(cImagem, nTime, nPosI, nPosF, lCenter)
LOCAL   oDlg, nWidth, nHeight
PRIVATE nJanelaAplicacao
   // *.jpg;*.png;*.psd;*.tif
   
   nJanelaAplicacao:=hwg_FindWindow(,HB_gtInfo(HB_GTI_WINTITLE))
      
   HB_Default(@nTime,1)
   
   HB_Default(@nPosI,0)
   
   HB_Default(@nPosF,0)
   
   HB_Default(@lCenter,.F.)
   
   IF !hwg_Fi_init()
      RETURN Nil
   ENDIF
   
   nHandleFile:=hwg_Fi_load( cImagem )
   
   nWidth:=hwg_Fi_getwidth( nHandleFile )
   
   nHeight:=hwg_Fi_getheight( nHandleFile )
   
   oBmp      := HBitmap():AddFile(cImagem)

   INIT DIALOG oDlg                 ;
        TITLE ""                    ;
        AT    nPosI,nPosF           ;
        SIZE   nWidth,nHeight       ;
        STYLE WS_POPUP + WS_VISIBLE + WS_DLGFRAME + IF(lCenter, DS_CENTER,  DS_ABSALIGN)
        
   @ 0,0 IMAGE oSayMain SHOW cImagem OF oDlg SIZE nWidth, nHeight 

   SET TIMER oTimer OF oDlg VALUE nTime  ACTION { || VerTecla(oDlg) }

   oDlg:center()
   
   oDlg:Activate()

   hwg_Fi_unload( nHandleFile )

   RestauraTela() 
   
RETURN .T.

FUNCTION VerTecla(oDlg)
   oDlg:oTimer:End()
   nKey:=InkeyGui()
   If nKey = VK_ESCAPE 
      hwg_EndDialog( GetModalHandle() )
   ElseIf nKey = VK_F1
      hwg_MsgInfo("F1")
   ElseIf nKey = VK_F2
      hwg_MsgInfo("F2")
   ElseIf nKey = VK_F10
      hwg_MsgInfo("F10")
   Endif
   SET TIMER oTimer OF oDlg VALUE 1  ACTION { || VerTecla(oDlg) }
RETURN Nil

FUNCTION RestauraTela()
   hwg_SetForegroundWindow( nJanelaAplicacao )
   SendMessage(nJanelaAplicacao,WM_SYSCOMMAND,SC_RESTORE,0) //Tem que restaurar a janela primeiro!      
RETURN Nil

#pragma BEGINDUMP

#include <windows.h>

#include "hbapi.h"

HB_FUNC( INKEYGUI )  
{                                                                      
    MSG Msg; 
    BOOL lNoLoop=FALSE; 
    UINT dwTimer, nRet=0, uTimeout=10;   

    if( HB_ISNUM(1) ) uTimeout = hb_parni(1); 

    if( uTimeout==0 ) uTimeout = 0x0FFFFFFF; 

    if( uTimeout>0 ) uTimeout = uTimeout * 1000; 

    dwTimer = SetTimer( NULL, 0, uTimeout, NULL); 

    while( GetMessage(&Msg, NULL, 0, 0) ) 
    { 

       switch( Msg.message ) 
       { 
          case WM_KEYDOWN    : 
          case WM_SYSKEYDOWN : { nRet    = Msg.wParam; lNoLoop = TRUE; break; } 
          case WM_TIMER      : { lNoLoop = Msg.wParam == dwTimer;      break; } 
       } 
  
       if( lNoLoop ) 
       { 
          KillTimer( NULL, dwTimer ); 
          hb_retni( nRet ); 
          return ; 
       } 
       else  
       { 
          TranslateMessage( &Msg );  // Translates virtual key codes 
          DispatchMessage( &Msg );   // Dispatches message to window 
       }  
    } 
} 

HB_FUNC( SENDMESSAGESTRING )
{
   hb_retnl( ( LONG ) SendMessage( ( HWND ) hb_parnl( 1 ), ( UINT ) hb_parni( 2 ), ( WPARAM ) hb_parnl( 3 ), ( LPARAM ) ( LPSTR ) hb_parc( 4 ) ) );
}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder