Hi Massimo
make a hbmk.hbm with below code
../gtwvg.hbc
../hbhpdf.hbc
../hbmisc.hbc
-w3 -es2
-lhbct
(I have added below the functions from wvgutilities.prg. )
Save all the below code in one file ex. main.prg and compile it with
hbmk2 main.prg
THREAD STATIC t_keys_:= { , , , , , , , , , , , , , , , , , , , }
THREAD STATIC t_pic_ := { , , , , , , , , , , , , , , , , , , , }
LOCAL aDlg, nStyle
nStyle := DS_SETFONT + WS_VISIBLE + WS_POPUP + WS_CAPTION +
WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX
aDlg := Wvt_MakeDlgTemplate( -20, -30, 30, 90, {0,0,0,0},"Print
dialog 1"," Dialog !", nStyle )
nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_PUSHBUTTON
aDlg := Wvt_AddDlgItem( aDlg, 25, 2, 1, 8, {-3,0,3,0},
ID_BTN_OK, "BUTTON" , nStyle, "OK" )
Wvt_DialogBox( aDlg, "DyDlga", Wvt_GetWindowHandle() )
***
FUNCTION DyDlga( hDlg, nMsg, wParam )
Switch ( nMsg )
CASE WM_COMMAND
IF wParam == ID_BTN_OK
Wapi_ShellExecute( nil,,"probe.pdf") // 1 solution
* Hb_ThreadStart(HB_THREAD_INHERIT_PUBLIC, { ||
ExecuteActiveX(hb_DirBase()+"probe.pdf") } ) // 2 solution
ENDIF
EXIT
CASE WM_INITDIALOG
WVG_SetFocus(WVG_GetDlgItem(hDlg, ID_BTN_OK))
WVG_InvalidateRect( hDlg )
EXIT
CASE WM_DESTROY
EXIT
END
RETURN 0
*************************
FUNCTION ExecuteActiveX(cPdf)
Local oVrt, oCom
LOCAL oDA
HB_SYMBOL_UNUSED( oCom )
//--------------------------- Dialog
------------------------------- \\
oVrt:= WvgDialog():new( , , { 30,30 }, { 800,600 }, , .t. )
oVrt:closable := .t.
oVrt:create()
hb_gtInfo( HB_GTI_RESIZABLE, .t. )
hb_gtInfo( HB_GTI_WINTITLE, 'Print dialog 2' )
oDA:= oVrt:drawingArea
oDA:resize := {|| ResizeDialog( oVrt, oCom ) }
oCom := WvgActiveXControl():New( oDA, , { 0, 0 },
{ 100,100 }, , .t. )
oCom:CLSID := 'file:\\' + cPdf
oCom:closable := .t.
oCom:create()
oVrt:sendMessage( WM_SIZE, 0, 0 )
oVrt:show()
DO WHILE .t.
IF inkey() == K_ESC ; EXIT ; ENDIF
ENDDO
oVrt:Destroy()
CLEAR TYPEAHEAD
RETURN NIL
***********************************
FUNCTION ResizeDialog( oVrt, oCom )
LOCAL aVrt
aVrt := oVrt:currentSize()
oCom:setPosAndSize( { 0, 0 }, { aVrt[1], aVrt[2] }, .t. )
RETURN 1
*************************************** COMMON PROCEDURES
***************************************
EXIT PROCEDURE CleanHandles()
LOCAL obj
FOR EACH obj IN SetFonts()
WVG_DeleteObject( obj )
obj := NIL
NEXT
FOR EACH obj IN SetIcons()
WVG_DeleteObject( obj )
obj := NIL
NEXT
RETURN
*******************
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVG_DEFAULT
REQUEST HB_GT_WVT
REQUEST HB_GT_WGU
RETURN NIL
/*
* $Id: wvgutilities.prg 17127 2011-12-07 09:16:14Z vouchcac $
*/
/*
* Pritpal Bedi <
bedip...@hotmail.com>
*/
/
*----------------------------------------------------------------------
*/
/
*----------------------------------------------------------------------
*/
//
// WvtSetObjects() array structure
//
#define WVT_OBJ_TYPE 1
#define WVT_OBJ_ID 2
#define WVT_OBJ_ROW 3
#define WVT_OBJ_COL 4
#define WVT_OBJ_ROWTO 5
#define WVT_OBJ_COLTO 6
#define WVT_OBJ_ONDISP 7
#define WVT_OBJ_ONMOUSEOVER 8
#define WVT_OBJ_ONBUTTONDOWN 9
#define WVT_OBJ_ONBUTTONUP 10
#define WVT_OBJ_TOOLTIP 11
#define WVT_OBJ_STATE 12
#define WVT_OBJ_DUMMY 13
#define WVT_OBJ_VRBLS 13
// WVT_OBJ_TYPE Constants
//
#define OBJ_TYPE_BUTTON 1
// WVT_OBJ_STATE
//
#define OBJ_STATE_HIDE 0
#define OBJ_STATE_DISP 1
#define OBJ_STATE_MOUSEOVER 2
#define OBJ_STATE_BUTTONDOWN 3
#define OBJ_STATE_BUTTONUP 4
/
*----------------------------------------------------------------------
*/
//-------------------------------------------------------------------//
// Wvt_Paint() must be a FUNCTION in your application
// as it is called when Window gets WM_PAINT message.
//-------------------------------------------------------------------//
FUNCTION Wvt_Paint()
LOCAL aBlocks := WvtSetBlocks()
aEval( aBlocks, {|e| eval( e ) } )
WvtPaintObjects()
RETURN 0
//-------------------------------------------------------------------//
// Wvt_SetFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_SETFOCUS message
// received by the window.
//-------------------------------------------------------------------//
#if 0
FUNCTION Wvt_SetFocus()
LOCAL nRow := row()
LOCAL nCol := col()
DispOutAt( 1,3, "Focus Gained!", "R/W" )
DevPos( nRow, nCol )
RETURN nil
#endif
//-------------------------------------------------------------------//
// Wvt_KillFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_KILLFOCUS message
// received by the window.
//-------------------------------------------------------------------//
#if 0
FUNCTION Wvt_KillFocus()
LOCAL nRow := row()
LOCAL nCol := col()
DispOutAt( 1,3, "Focus Lost...", "B/W" )
DevPos( nRow, nCol )
RETURN NIL
#endif
//-------------------------------------------------------------------//
//
// Wvt_Mouse() must be present if you want to catch and fire
// mouse call back outside of the inkey() loop.
//
//-------------------------------------------------------------------//
FUNCTION Wvt_Mouse( nKey, nRow, nCol )
LOCAL nLen, aObjects := WvtSetObjects()
LOCAL nObj
STATIC nLastObj := 0
STATIC nLastKey := 0
IF ( nLen := len( aObjects ) ) == 0
RETURN NIL
ENDIF
IF ! SetMouseCheck()
RETURN NIL
ENDIF
IF nKey == -1000001
FOR nObj := 1 TO nLen
DO CASE
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_DISP
eval( aObjects[ nObj, WVT_OBJ_ONDISP ] )
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_MOUSEOVER
eval( aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] )
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_BUTTONDOWN
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONDOWN ] )
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_BUTTONUP
eval( aObjects[ nObj, WVT_OBJ_ONDISP ] )
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_HIDE
ENDCASE
NEXT
RETURN NIL
ENDIF
nObj := ascan( aObjects, {|e_| e_[ WVT_OBJ_ROW ] <= nRow .AND. ;
e_[ WVT_OBJ_ROWTO ] >= nRow .AND. ;
e_[ WVT_OBJ_COL ] <= nCol .AND. ;
e_[ WVT_OBJ_COLTO ] >= nCol } )
IF nObj == 0
IF nLastObj > 0
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_DISP
eval( aObjects[ nLastObj, WVT_OBJ_ONDISP ] )
nLastObj := 0
ENDIF
RETURN NIL
ENDIF
IF nLastObj == nObj .and. nLastKey == nKey
RETURN NIL
ENDIF
nLastObj := nObj
nLastKey := nKey
DO CASE
CASE nKey == K_MOUSEMOVE
IF aObjects[ nLastObj, WVT_OBJ_STATE ] != OBJ_STATE_MOUSEOVER
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_MOUSEOVER
IF aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] )
ENDIF
ENDIF
CASE nKey == K_LBUTTONDOWN
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_BUTTONDOWN
IF aObjects[ nObj, WVT_OBJ_ONBUTTONDOWN ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONDOWN ] )
ENDIF
CASE nKey == K_LBUTTONUP
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_DISP
IF aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] )
ENDIF
ENDCASE
RETURN NIL
//-------------------------------------------------------------------//
// WvtSetBlocks() is a get/set FUNCTION to be used by Wvt_Paint()
//-------------------------------------------------------------------//
FUNCTION WvtSetBlocks( a_ )
LOCAL o
THREAD STATIC t := {}
o := aclone( t )
IF a_ != nil
t := aclone( a_ )
ENDIF
RETURN o
//-------------------------------------------------------------------//
// WvtSetObjects() is a get/set FUNCTION to be used by Wvt_Mouse()
//-------------------------------------------------------------------//
FUNCTION WvtSetObjects( aObject )
LOCAL oObjects
THREAD STATIC aObjects := {}
oObjects := aclone( aObjects )
IF aObject != NIL
IF empty( aObject )
aObjects := {}
ELSE
IF valtype( aObject[ 1 ] ) == "A"
aeval( aObject, {|e_| aadd( aObjects, e_ ) } )
ELSE
aSize( aObject, WVT_OBJ_VRBLS )
DEFAULT aObject[ WVT_OBJ_STATE ] TO OBJ_STATE_DISP
aadd( aObjects, aObject )
ENDIF
ENDIF
ENDIF
RETURN oObjects
//-------------------------------------------------------------------//
FUNCTION SetMouseCheck( lYes )
LOCAL lOYes
STATIC lSYes := .t.
lOYes := lSYes
IF lYes != NIL
lSYes := lYes
ENDIF
RETURN lOYes
//-------------------------------------------------------------------//
FUNCTION WvtWindowExpand( nUnits )
STATIC sUnits := 18
sUnits += nUnits
Wvt_setFont( "Courier New", sUnits )
RETURN .t.
//-------------------------------------------------------------------//
FUNCTION rgb( r,g,b )
RETURN r + ( g * 256 ) + ( b * 256 * 256 )
//-------------------------------------------------------------------//
FUNCTION VouChoice( aChoices )
LOCAL scr, clr, nChoice
DEFAULT aChoices TO
{ "One","Two","Three","Four","Five","Six","Seven" }
scr := SaveScreen( 7,48,13,55 )
clr := SetColor( "N/W*,GR+/B*,,,GR+/B" )
nChoice := aChoice( 7, 48, 13, 55, aChoices )
setColor( clr )
RestScreen( 7, 48, 13, 55, scr )
RETURN nChoice
//-------------------------------------------------------------------//
FUNCTION Hb_Clear()
CLS
RETURN .f.
//----------------------------------------------------------------------//
FUNCTION MyMenuProcedure( nID )
DO CASE
CASE nID == 101
alert( 'Procedure 101' )
CASE nID == 102
alert( 'Procedure 102' )
ENDCASE
RETURN .t.
//----------------------------------------------------------------------//
FUNCTION BuildWvgToolBar( oDA, nActiveX )
LOCAL oTBar
DEFAULT nActiveX TO 0
oTBar := WvgToolBar():new( oDA, , { 0,0 }, { oDA:currentSize()
[ 1 ], 30 }, , .T. )
oTBar:style := WVGTOOLBAR_STYLE_FLAT
oTBar:borderStyle := WVGFRAME_RECT
oTBar:buttonWidth := 40 //28
oTBar:buttonHeight := 26
oTBar:imageWidth := 26
oTBar:imageHeight := 24
oTBar:showToolTips := .t.
// After setting properties, create toolbar.
oTBar:create()
oTBar:addItem( "New" , hb_DirBase() + 'v_new.bmp' )
oTBar:addItem( "Select" , hb_DirBase() + 'v_selct1.bmp' )
oTBar:addItem( "Calendar" , hb_DirBase() + 'v_calend.bmp' )
oTBar:addItem( "Tools" , hb_DirBase() + 'v_lock.bmp' )
oTBar:addItem( "Index" , hb_DirBase() + 'v_index.bmp' )
oTBar:addItem( "Show" , hb_DirBase() + 'v_clclt.bmp' )
oTBar:addItem( "Hide" , hb_DirBase() + 'v_notes1.bmp' )
RETURN oTBar
//----------------------------------------------------------------------//
FUNCTION SetGT( nIndex, pGT )
LOCAL oldGT
STATIC pGT_:= { NIL, NIL, NIL }
oldGT := pGT_[ nIndex ]
IF PCount() == 2
pGT_[ nIndex ] := pGT
ENDIF
RETURN oldGT
/
*----------------------------------------------------------------------
*/
FUNCTION SetFonts( hFont )
LOCAL oldFont
THREAD STATIC t_ahFonts := {}
oldFont := t_ahFonts
IF !empty( hFont )
aadd( t_ahFonts, hFont )
ENDIF
RETURN oldFont
/
*----------------------------------------------------------------------
*/
FUNCTION SetIcons( hIcon )
LOCAL oldIcon
THREAD STATIC t_ahIcons := {}
oldIcon := t_ahIcons
IF !empty( hIcon )
aadd( t_ahIcons, hIcon )
ENDIF
RETURN oldIcon
/
*----------------------------------------------------------------------
*/
FUNCTION Popups( nID, lDestroy )
LOCAL hPop, hPop1
LOCAL nPrompt := MF_ENABLED+MF_STRING
THREAD STATIC hPop_:= { , , , , , , , , }
IF nID == NIL
Wvt_SetPopupMenu()
RETURN NIL
ENDIF
IF lDestroy != NIL
Wvt_DestroyMenu( hPop_[ nID ] )
RETURN NIL
ENDIF
hPop := hPop_[ nID ]
DO CASE
CASE nID == 1 // Data Entry Module
IF hPop == nil
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_F2, "Second Get Screen" )
Wvt_AppendMenu( hPop, nPrompt, K_F3, "Expand Window" )
Wvt_AppendMenu( hPop, nPrompt, K_F4, "Shrink Window" )
Wvt_AppendMenu( hPop, nPrompt, K_F5, "Browse" )
Wvt_AppendMenu( hPop, nPrompt, K_F6, "Minimize" )
Wvt_AppendMenu( hPop, nPrompt, K_F7, "Partial Screen" )
Wvt_AppendMenu( hPop, nPrompt, K_F8, "Lines" )
Wvt_AppendMenu( hPop, nPrompt, K_F9, "Choose Font" )
Wvt_AppendMenu( hPop, nPrompt, K_F10,"Choose Color" )
Wvt_AppendMenu( hPop, MF_SEPARATOR )
Wvt_AppendMenu( hPop, nPrompt, K_F5, "Browse" )
ENDIF
CASE nID == 2 // Browser
IF hPop == NIL
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_DOWN , "Down" )
Wvt_AppendMenu( hPop, nPrompt, K_UP , "Up" )
Wvt_AppendMenu( hPop, nPrompt, K_PGDN , "Page Down" )
Wvt_AppendMenu( hPop, nPrompt, K_PGUP , "Page Up" )
Wvt_AppendMenu( hPop, nPrompt, K_CTRL_PGUP, "Top" )
Wvt_AppendMenu( hPop, nPrompt, K_CTRL_PGDN, "Bottom" )
Wvt_AppendMenu( hPop, MF_SEPARATOR )
hPop1 := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop1, nPrompt, K_RIGHT , "Right" )
Wvt_AppendMenu( hPop1, nPrompt, K_LEFT , "Left" )
Wvt_AppendMenu( hPop1, nPrompt, K_END , "End" )
Wvt_AppendMenu( hPop1, nPrompt, K_HOME , "Home" )
Wvt_AppendMenu( hPop, MF_ENABLED+MF_POPUP, hPop1, "Column
Movement" )
ENDIF
ENDCASE
hPop_[ nID ] := hPop
RETURN Wvt_SetPopupMenu( hPop_[ nID ] )
//-------------------------------------------------------------------//
FUNCTION DispStatusMsg( cMsg )
Wvt_DrawLabel( MaxRow(), 60, cMsg, 6, , 0, rgb(198,198,198),
"Arial", 18, , 900 )
RETURN .t.
//-------------------------------------------------------------------//
FUNCTION ClearStatusMsg()
LOCAL nRow := Row()
LOCAL nCol := Col()
DispOutAt( MaxRow(), 42, space( 37 ), "W/W" )
SetPos( nRow, nCol )
RETURN .t.
//-------------------------------------------------------------------//
FUNCTION WvtPictures( nSlot,cFilePic )
IF nSlot != NIL .AND. nSlot <= 20 .AND. file( cFilePic )
IF t_pic_[ nSlot ] != cFilePic
IF Wvt_LoadPicture( cFilePic, nSlot )
t_pic_[ nSlot ] := cFilePic
ENDIF
ENDIF
ENDIF
RETURN NIL
//-------------------------------------------------------------------//
FUNCTION WvtExePicture( nTop, nLeft, nBottom, nRight, nSlot, aOffset )
IF t_pic_[ nSlot ] != NIL
Wvt_DrawPicture( nTop, nLeft, nBottom, nRight, nSlot, aOffSet )
ENDIF
RETURN NIL
/
*----------------------------------------------------------------------
*/
FUNCTION GetResource( cName )
RETURN hb_dirBase() + cName
/
*----------------------------------------------------------------------
*/
FUNCTION uiDebug( ... )
LOCAL aP := hb_aParams()
LOCAL s := ""
aeval( aP, {|e| s += hb_valTOstr( e ) + " " } )
WAPI_OutputDebugString( s )
RETURN NIL
/
*----------------------------------------------------------------------
*/
FUNCTION MyError( oError )
? oError:description
? oError:operation
? procname( 1 ), procline( 1 )
? procname( 2 ), procline( 2 )
? procname( 3 ), procline( 3 )
? procname( 4 ), procline( 4 )
DO WHILE inkey() != 27; ENDDO
RETURN NIL
I'd be better to attach the files to my post as attachments, but i
dont know how.
Thanks
Zoran