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
