From c2c08ef213fc171fec96b82205f22c4bfd585935 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Sat, 29 May 2010 00:39:20 +0000 Subject: [PATCH] 2010-05-28 17:27 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + contrib/gtwvg/tests/demowvg.hbp + Project definition. + contrib/gtwvg/tests/wvgactivex.prg + contrib/gtwvg/tests/wvgcuigdialog.prg + contrib/gtwvg/tests/wvgdyndialogs.prg + contrib/gtwvg/tests/wvgmodal.prg + contrib/gtwvg/tests/wvgqt.prg + contrib/gtwvg/tests/wvgtbrowser.prg + contrib/gtwvg/tests/wvgutilities.prg + contrib/gtwvg/tests/wvgwvtclasses.prg + contrib/gtwvg/tests/wvgxbp.prg + Code organized in logical units. * contrib/gtwvg/tests/demowvg.prg - Code moved to smaller modular sources as logical units. This demo was written few years back and then at that point of time no standradized make system was aavailable which led me to club everything in one source. Now because we have an excellent hbMK2 in place so this move has been possible. It is the first in series of reforms pertaining to GTWVG. More are scheduled to be followed. --- harbour/ChangeLog | 26 + harbour/contrib/gtwvg/tests/demowvg.hbp | 33 + harbour/contrib/gtwvg/tests/demowvg.prg | 3785 +---------------- harbour/contrib/gtwvg/tests/wvgactivex.prg | 664 +++ harbour/contrib/gtwvg/tests/wvgcuigdialog.prg | 136 + harbour/contrib/gtwvg/tests/wvgdyndialogs.prg | 371 ++ harbour/contrib/gtwvg/tests/wvgmodal.prg | 356 ++ harbour/contrib/gtwvg/tests/wvgqt.prg | 58 + harbour/contrib/gtwvg/tests/wvgtbrowser.prg | 536 +++ harbour/contrib/gtwvg/tests/wvgutilities.prg | 503 +++ harbour/contrib/gtwvg/tests/wvgwvtclasses.prg | 438 ++ harbour/contrib/gtwvg/tests/wvgxbp.prg | 431 ++ 12 files changed, 3618 insertions(+), 3719 deletions(-) create mode 100644 harbour/contrib/gtwvg/tests/demowvg.hbp create mode 100644 harbour/contrib/gtwvg/tests/wvgactivex.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgcuigdialog.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgdyndialogs.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgmodal.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgqt.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgtbrowser.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgutilities.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgwvtclasses.prg create mode 100644 harbour/contrib/gtwvg/tests/wvgxbp.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f8d4b536bc..1bc077d80d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,32 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-05-28 17:27 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + + contrib/gtwvg/tests/demowvg.hbp + + Project definition. + + + contrib/gtwvg/tests/wvgactivex.prg + + contrib/gtwvg/tests/wvgcuigdialog.prg + + contrib/gtwvg/tests/wvgdyndialogs.prg + + contrib/gtwvg/tests/wvgmodal.prg + + contrib/gtwvg/tests/wvgqt.prg + + contrib/gtwvg/tests/wvgtbrowser.prg + + contrib/gtwvg/tests/wvgutilities.prg + + contrib/gtwvg/tests/wvgwvtclasses.prg + + contrib/gtwvg/tests/wvgxbp.prg + + Code organized in logical units. + + * contrib/gtwvg/tests/demowvg.prg + - Code moved to smaller modular sources as logical units. + + This demo was written few years back and then at that point of time + no standradized make system was aavailable which led me to club + everything in one source. Now because we have an excellent hbMK2 + in place so this move has been possible. + + It is the first in series of reforms pertaining to GTWVG. + More are scheduled to be followed. + 2010-05-28 18:51 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbmisc/calldll.prg ! Fixed to use Windows system .dll calling convention diff --git a/harbour/contrib/gtwvg/tests/demowvg.hbp b/harbour/contrib/gtwvg/tests/demowvg.hbp new file mode 100644 index 0000000000..c5a692e7b6 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/demowvg.hbp @@ -0,0 +1,33 @@ +-3rd=hbide_version=1.0 +-3rd=hbide_type=Executable +-3rd=hbide_title=Demo>WVG +-3rd=hbide_location=C:\harbour\contrib\gtwvg\tests\ +-3rd=hbide_workingfolder=C:\harbour\contrib\gtwvg\tests +-3rd=hbide_destinationfolder= +-3rd=hbide_output=demowvg +-3rd=hbide_launchparams= +-3rd=hbide_launchprogram= +-3rd=hbide_backupfolder= +-3rd=hbide_xhb=NO +-3rd=hbide_xpp=NO +-3rd=hbide_clp=NO + +-inc +-trace +-info +-mt +-w3 +-es2 +-gtwvg + +demowvg.prg +wvgwvtclasses.prg +wvgtbrowser.prg +wvgutilities.prg +wvgdyndialogs.prg +wvgmodal.prg +wvgcuigdialog.prg +wvgxbp.prg +wvgactivex.prg +wvgqt.prg + diff --git a/harbour/contrib/gtwvg/tests/demowvg.prg b/harbour/contrib/gtwvg/tests/demowvg.prg index 697ba0e1dc..971357b561 100644 --- a/harbour/contrib/gtwvg/tests/demowvg.prg +++ b/harbour/contrib/gtwvg/tests/demowvg.prg @@ -32,67 +32,22 @@ #include "hbgtwvg.ch" #include "wvgparts.ch" +/*----------------------------------------------------------------------*/ + REQUEST DbfCdx REQUEST DbfNtx //-------------------------------------------------------------------// -// -// 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 +#define IMAGE_VOUCH "vouch1.bmp" +#define IMAGE_BROWSE "v_browse.ico" +#define IMAGE_VR "vr_1.ico" +#define IMAGE_NOTES "v_notes.ico" +#define IMAGE_TOOLS "v_tools.ico" +#define IMAGE_HELP "v_notes.ico" -// 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 - -//-------------------------------------------------------------------// - -#define IMAGE_VOUCH "vouch1.bmp" -#define IMAGE_BROWSE "v_browse.ico" -#define IMAGE_VR "vr_1.ico" -#define IMAGE_NOTES "v_notes.ico" -#define IMAGE_TOOLS "v_tools.ico" -#define IMAGE_HELP "v_notes.ico" - -//-------------------------------------------------------------------// -// -// Candidate for inkey.ch -// -#define K_SBLINEUP 1051 -#define K_SBLINEDOWN 1052 -#define K_SBPAGEUP 1053 -#define K_SBPAGEDOWN 1054 - -#define K_SBLINELEFT 1055 -#define K_SBLINERIGHT 1056 -#define K_SBPAGELEFT 1057 -#define K_SBPAGERIGHT 1058 - -#define K_SBTHUMBTRACKVERT 1059 -#define K_SBTHUMBTRACKHORZ 1060 - //-------------------------------------------------------------------// #ifndef __SQL__ @@ -101,71 +56,55 @@ ANNOUNCE Hb_NoStartUpWindow //-------------------------------------------------------------------// -#define CRLF chr( 13 )+chr( 10 ) - -//-------------------------------------------------------------------// - MEMVAR cCdxExp, First, Last, City //-------------------------------------------------------------------// thread static t_wvtScreen := {} -thread static t_pic_:= { , , , , , , , , , , , , , , , , , , , } -thread static t_keys_:= { , , , , , , , , , , , , , , , , , , , } - -thread static t_ahFonts := {} -thread static t_aSlides := {} -thread static t_hIcon, t_hImage #ifdef __XCC__ static s_paint_:= { { "", {} } } #endif -static s_pGT_:= { NIL,NIL,NIL } /*----------------------------------------------------------------------*/ -#ifdef __QT__ -#define QT_PTROF( oObj ) ( oObj:pPtr ) -INIT PROCEDURE Qt_Start() - qt_qapplication() - RETURN -EXIT PROCEDURE Qt_End() - qt_qapplication_exec() - RETURN -#endif +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 + //-------------------------------------------------------------------// -EXIT PROCEDURE KillGTs() - - s_pGT_[ 1 ] := NIL - s_pGT_[ 2 ] := NIL - s_pGT_[ 3 ] := NIL - - RETURN -//----------------------------------------------------------------------// PROCEDURE Main() - - LOCAL aLastPaint, clr, scr - LOCAL dDate := ctod( "" ) - LOCAL cName := Pad( "Pritpal Bedi", 35 ) - LOCAL cAdd1 := Pad( "60, New Professor Colony", 35 ) - LOCAL cAdd2 := Pad( "Ludhiana, INDIA", 35 ) - LOCAL cAdd3 := Pad( "http://www.vouchcac.com", 35 ) - LOCAL nSlry := 20000 - LOCAL aBlocks := {} - LOCAL nColGet := 8 - LOCAL GetList := {} - LOCAL nTop := 4 - LOCAL nLft := 4 - LOCAL nBtm := 20 - LOCAL nRgt := 75 - LOCAL nMaxRows:= MaxRow() - LOCAL nBtnRow := nMaxRows - 1 - LOCAL cLabel := "(x)Harbour simulated GUI." - LOCAL aObjects:= WvtSetObjects( {} ) - LOCAL hPopup - LOCAL oMenu - + LOCAL aLastPaint, clr, scr, pGT + LOCAL hPopup, oMenu + LOCAL dDate := ctod( "" ) + LOCAL cName := Pad( "Pritpal Bedi", 35 ) + LOCAL cAdd1 := Pad( "60, New Professor Colony", 35 ) + LOCAL cAdd2 := Pad( "Ludhiana, INDIA", 35 ) + LOCAL cAdd3 := Pad( "http://www.vouchcac.com", 35 ) + LOCAL nSlry := 20000 + LOCAL aBlocks := {} + LOCAL nColGet := 8 + LOCAL GetList := {} + LOCAL nTop := 4 + LOCAL nLft := 4 + LOCAL nBtm := 20 + LOCAL nRgt := 75 + LOCAL nMaxRows := MaxRow() + LOCAL nBtnRow := nMaxRows - 1 + LOCAL cLabel := "(x)Harbour simulated GUI." + LOCAL aObjects := WvtSetObjects( {} ) + SET DATE BRITISH SET( _SET_EVENTMASK, INKEY_ALL ) @@ -186,7 +125,7 @@ PROCEDURE Main() hPopup := Wvt_SetPopupMenu() oMenu := CreateMainMenu() - s_pGT_[ 1 ] := hb_gtSelect() + pGT := SetGT( 1, hb_gtSelect() ) // Force mouse pointer right below the xHarbour label // @@ -310,16 +249,19 @@ PROCEDURE Main() Wvt_SetPopupMenu( hPopup ) Popups( 1, .t. ) - s_pGT_[ 1 ] := NIL + SetGT( 1, pGT ) RETURN //-------------------------------------------------------------------// + Function HB_GTSYS() REQUEST HB_GT_WVG_DEFAULT REQUEST HB_GT_WVT REQUEST HB_GT_WGU Return NIL + //------------------------------------------------------------------// + PROCEDURE WvtConsoleGets( nMode ) DEFAULT nMode TO 0 @@ -333,7 +275,9 @@ PROCEDURE WvtConsoleGets( nMode ) ENDIF RETURN + //----------------------------------------------------------------------// + PROCEDURE WvtNextGetsConsole() LOCAL dDate := ctod( "" ) LOCAL cName := Space( 35 ) @@ -378,9 +322,10 @@ PROCEDURE WvtNextGets() ENDIF RETURN + //----------------------------------------------------------------------// -PROCEDURE WvtNextGets_X() +PROCEDURE WvtNextGets_X() LOCAL aLastPaint, clr LOCAL dDate := ctod( "" ) LOCAL cName := Space( 35 ) @@ -457,738 +402,9 @@ PROCEDURE WvtNextGets_X() Wvt_RestScreen( wvtScr ) SetPos( nRow, nCol ) RETURN + //-------------------------------------------------------------------// -FUNCTION WvtSetKeys( lSet ) - if lSet - t_keys_[ 2 ] := SetKey( K_F2, {|| WvtNextGets() } ) - t_keys_[ 3 ] := SetKey( K_F3, {|| WvtWindowExpand( 1 ) } ) - t_keys_[ 4 ] := SetKey( K_F4, {|| WvtWindowExpand( -1 ) } ) - t_keys_[ 5 ] := SetKey( K_F5, {|| WvtMyBrowse() } ) - t_keys_[ 6 ] := SetKey( K_F6, {|| Wvt_Minimize() } ) - t_keys_[ 7 ] := SetKey( K_F7, {|| WvtPartialScreen() } ) - t_keys_[ 8 ] := SetKey( K_F8, {|| WvtLines() } ) - t_keys_[ 9 ] := SetKey( K_F9, {|| Wvt_ChooseFont() } ) - t_keys_[ 10] := SetKey( K_F10,{|| Wvt_ChooseColor() } ) - else - SetKey( K_F2, t_keys_[ 2 ] ) - SetKey( K_F3, t_keys_[ 3 ] ) - SetKey( K_F4, t_keys_[ 4 ] ) - SetKey( K_F5, t_keys_[ 5 ] ) - SetKey( K_F6, t_keys_[ 6 ] ) - SetKey( K_F7, t_keys_[ 7 ] ) - SetKey( K_F8, t_keys_[ 8 ] ) - SetKey( K_F9, t_keys_[ 9 ] ) - SetKey( K_F10, t_keys_[ 10] ) - endif - - RETURN Nil -//-------------------------------------------------------------------// -// 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. -//-------------------------------------------------------------------// -STATIC 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 WvtMyBrowse() - - IF hb_mtvm() - Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():New( , , { -1,-2 }, { 34,69 }, , .T. ), ; - oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS,; - oCrt:icon := "dia_excl.ico",; - oCrt:create(),; - Wvt_SetGui( .t. ),; - WvtMyBrowse_X( oCrt ),; - oCrt:destroy(); - } ) - - ELSE - WvtMyBrowse_X() - ENDIF - - Return NIL -//----------------------------------------------------------------------// -STATIC FUNCTION BrwBuildMenu( oCrt ) - Local oMenu, oSMenu - - oMenu := WvgMenuBar():new( oCrt, , .t. ):create() - - oSMenu := WvgMenu():new( oMenu ):create() - oSMenu:addItem( { '~First' , {|| alert( 'First' ) } } ) - oSMenu:addItem( { '~Second', {|| alert( 'Second' ) } } ) - oSMenu:addItem() - oSMenu:addItem( { '~Third' , {|| alert( 'Third' ) } } ) - oMenu:addItem( { oSMenu, '~Hello' } ) - - oSMenu := WvgMenu():new( oMenu ):create() - oSMenu:addItem( { '~First' , {|| alert( 'First' ) } } ) - oSMenu:addItem( '-' ) - oSMenu:addItem( { '~Second', {|| alert( 'Second' ) } } ) - oSMenu:addItem( { '~Third' , {|| alert( 'Third' ) } } ) - oMenu:addItem( { oSMenu, '~MyFriends' } ) - - oSMenu := WvgMenu():new( oMenu ):create() - oSMenu:title := "~Procedural" - oSMenu:addItem( { "Procedure ~1", } ) - oSMenu:addItem( { "Procedure ~2", } ) - oSMenu:itemSelected := {|mp1| MyMenuProcedure( 100+mp1 ) } - oSMenu:checkItem( 2 ) - - oMenu:addItem( { oSMenu, NIL } ) - - Return oMenu -//----------------------------------------------------------------------// -Static Function MyMenuProcedure( nID ) - do case - case nID == 101 - alert( 'Procedure 101' ) - case nID == 102 - alert( 'Procedure 102' ) - endcase - Return .t. -//----------------------------------------------------------------------// - -FUNCTION WvtMyBrowse_X( oCrt ) - LOCAL nKey, bBlock, oBrowse , aLastPaint, i, aLastPaint1 - LOCAL lEnd := .f. - LOCAL aBlocks := {} - LOCAL info_ - LOCAL nTop := 4 - LOCAL nLeft := 3 - LOCAL nBottom := maxrow() - 2 - LOCAL nRight := maxcol() - 3 - LOCAL nCursor := setCursor( 0 ) - LOCAL nRow := row() - LOCAL nCol := col() - LOCAL cColor := SetColor( "N/W*,N/GR*,,,N/W*" ) - LOCAL aObjects:= WvtSetObjects( {} ) - LOCAL hPopup := Wvt_SetPopupMenu() - LOCAL cFileIndex, cFileDbf, cRDD, nIndex, oTBar - LOCAL cScr - - STATIC nStyle := 0 - THREAD STATIC nFactor := 200 - - IF oCrt == NIL - cScr := SaveScreen( 0,0,maxrow(),maxcol() ) - ENDIF - - BrwBuildMenu( oCrt ) - oTBar := ActiveXBuildToolBar( oCrt ) - - s_pGT_[ 2 ] := hb_gtSelect() - - cRDD := "DBFCDX" - cFileDbf := hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" - cFileIndex := "test.z01" - - USE ( cFileDbf ) NEW SHARED VIA ( cRDD ) - if NetErr() - return nil - endif - if fLock() - INDEX ON Test->FIRST TAG "001" TO ( cFileIndex ) - INDEX ON Test->LAST TAG "002" TO ( cFileIndex ) - INDEX ON Test->CITY TAG "003" TO ( cFileIndex ) - dbUnlock() - endif - SET INDEX TO - SET INDEX TO ( cFileIndex ) - SET ORDER TO 1 - DbGoTo( 50 ) - - info_:= DbStruct() - - Popups( 2 ) - - oBrowse := TBrowseWVG():New( nTop + 3, nLeft + 2, nBottom - 1, nRight - 2 ) - - oBrowse:ColSep := " " - oBrowse:HeadSep := "__" - oBrowse:GoTopBlock := { || dbGoTop() } - oBrowse:GoBottomBlock := { || dbGoBottom() } - oBrowse:SkipBlock := { | nSkip | dbSkipBlock( nSkip,oBrowse ) } - - for i := 1 to len( info_ ) - bBlock := VouBlockField( i ) - oBrowse:AddColumn( TBColumnNew( info_[ i,1 ], bBlock ) ) - next - - oBrowse:configure() - - if nStyle > 5 - nStyle := 0 - endif - - Wvt_SetPen( nStyle, 0, rgb( 210,1210,210 ) ) - - nStyle++ - - //hb_gtInfo( HB_GTI_ICONFILE, "dia_excl.ico" ) - hb_gtInfo( HB_GTI_WINTITLE, "WVT Gui TBrowse()" ) - - aAdd( aBlocks, {|| Wvt_DrawBoxRaised( oBrowse:nTop-3, oBrowse:nLeft-2, oBrowse:nBottom+1, oBrowse:nRight+2 ) } ) - aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } ) - aAdd( aBlocks, {|| Wvt_DrawGridHorz( oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } ) - aAdd( aBlocks, {|| Wvt_DrawGridVert( oBrowse:nTop, oBrowse:nBottom, oBrowse:aColumnsSep, len( oBrowse:aColumnsSep ) ) } ) - - aLastPaint := WvtSetBlocks( aBlocks ) - - DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) - DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight-oBrowse:nLeft+1 ), "W+/W" ) - DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) - - oTBar:buttonClick := {|oBtn| IF( oBtn:caption=='Show',__keyboard( chr( K_DOWN ) ),nil ) } - - While !lEnd - oBrowse:ForceStable() - - nKey := InKey( 0, INKEY_ALL ) - - do case - case nKey == K_F12 - nFactor-- - hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor ) - - case nKey == K_F11 - nFactor++ - hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor ) - - case nKey == K_F6 - hb_gtInfo( HB_GTI_RESIZABLE, .f. ) - case nKey == K_F7 - hb_gtInfo( HB_GTI_RESIZABLE, .t. ) - - case BrwHandleKey( oBrowse, nKey, @lEnd ) - - case nKey == HB_K_RESIZE - oBrowse:nBottom := maxrow() - 3 - oBrowse:nRight := maxcol() - 5 - - DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) - DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" ) - DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) - oBrowse:configure() - - case nKey == K_F2 - nIndex := IndexOrd() - nIndex++ - if nIndex > 3 - nIndex := 1 - endif - Set Order To ( nIndex ) - oBrowse:RefreshAll() - - case nKey == K_F3 - aLastPaint1 := WvtSetBlocks( {} ) - DoModalWindow() - WvtSetBlocks( aLastPaint1 ) - - case nKey == K_F4 - hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) - - endcase - end - - Wvt_SetPen( 0 ) - WvtSetBlocks( aLastPaint ) - WvtSetObjects( aObjects ) - - DevPos( nRow, nCol ) - SetColor( cColor ) - SetCursor( nCursor ) - - DBCloseArea() - IF oCrt == NIL - RestScreen( 0, 0, maxrow(), maxcol(), cScr ) - ENDIF - Wvt_setPopupMenu( hPopup ) - s_pGT_[ 2 ] := NIL - - RETURN nil -//-------------------------------------------------------------------// -STATIC FUNCTION DbSkipBlock( n ) - - LOCAL nSkipped := 0 - - if n == 0 - DBSkip( 0 ) - - elseif n > 0 - do while nSkipped != n .and. TBNext() - nSkipped++ - enddo - else - do while nSkipped != n .and. TBPrev() - nSkipped-- - enddo - endif - - RETURN nSkipped -//-------------------------------------------------------------------// -STATIC FUNCTION TBNext() - - LOCAL nSaveRecNum := recno() - LOCAL lMoved := .T. - - if Eof() - lMoved := .F. - else - DBSkip( 1 ) - if Eof() - lMoved := .F. - DBGoTo( nSaveRecNum ) - endif - endif - - RETURN lMoved -//-------------------------------------------------------------------// -STATIC FUNCTION TBPrev() - LOCAL nSaveRecNum := Recno() - LOCAL lMoved := .T. - - DBSkip( -1 ) - - if Bof() - DBGoTo( nSaveRecNum ) - lMoved := .F. - endif - - RETURN lMoved -//-------------------------------------------------------------------// -STATIC FUNCTION VouBlockField( i ) - - RETURN {|| fieldget( i ) } -//-------------------------------------------------------------------// -STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd ) - LOCAL lRet := .t. - - do case - case nKey == K_ESC - lEnd := .t. - - case nKey == K_ENTER - lEnd := .t. - - case nKey == K_DOWN - oBrowse:Down() - - case nKey == K_UP - oBrowse:Up() - - case nKey == K_LEFT - oBrowse:Left() - - case nKey == K_RIGHT - oBrowse:Right() - - case nKey == K_PGDN - oBrowse:pageDown() - - case nKey == K_PGUP - oBrowse:pageUp() - - case nKey == K_CTRL_PGUP - oBrowse:goTop() - - case nKey == K_CTRL_PGDN - oBrowse:goBottom() - - case nKey == K_HOME - oBrowse:home() - - case nKey == K_END - oBrowse:end() - - case nKey == K_CTRL_LEFT - oBrowse:panLeft() - - case nKey == K_CTRL_RIGHT - oBrowse:panRight() - - case nKey == K_CTRL_HOME - oBrowse:panHome() - - case nKey == K_CTRL_END - oBrowse:panEnd() - - case nKey == K_MWBACKWARD - oBrowse:down() - - case nKey == K_MWFORWARD - oBrowse:up() - - otherwise - lRet := .f. - - endcase - - RETURN lRet -//-------------------------------------------------------------------// -STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey ) - LOCAL lRet := .t., lRefAll := .f. - - HB_SYMBOL_UNUSED( cPaintID ) - - do case - case nKey == K_DOWN - oBrowse:Down() - - case nKey == K_UP - oBrowse:Up() - - case nKey == K_LEFT - oBrowse:Left() - - case nKey == K_RIGHT - oBrowse:Right() - - case nKey == K_PGDN - oBrowse:pageDown() - lRefAll := .t. - - case nKey == K_PGUP - oBrowse:pageUp() - lRefAll := .t. - - case nKey == K_CTRL_PGUP - oBrowse:goTop() - lRefAll := .t. - - case nKey == K_CTRL_PGDN - oBrowse:goBottom() - lRefAll := .t. - - case nKey == K_HOME - oBrowse:home() - - case nKey == K_END - oBrowse:end() - - case nKey == K_CTRL_LEFT - oBrowse:panLeft() - - case nKey == K_CTRL_RIGHT - oBrowse:panRight() - - case nKey == K_CTRL_HOME - oBrowse:panHome() - - case nKey == K_CTRL_END - oBrowse:panEnd() - - case nKey == K_MWBACKWARD - oBrowse:down() - - case nKey == K_MWFORWARD - oBrowse:up() - - case nKey == K_SBTHUMBTRACKVERT - OrdKeyGoTo( oWvtBrw:oVBar:GetPos() ) - lRefAll := .t. - - case nKey == K_SBTHUMBTRACKHORZ - oBrowse:ColPos := oWvtBrw:oHBar:GetPos() - - case nKey == K_SBLINEUP - oBrowse:up() - - case nKey == K_SBLINEDOWN - oBrowse:down() - - case nKey == K_SBPAGEUP - oBrowse:PageUp() - - case nKey == K_SBPAGEDOWN - oBrowse:PageDown() - - case nKey == K_SBLINELEFT - oBrowse:Left() - - case nKey == K_SBLINERIGHT - oBrowse:Right() - - case nKey == K_SBPAGELEFT - oBrowse:Left() - - case nKey == K_SBPAGERIGHT - oBrowse:right() - - otherwise - lRet := .f. - - endcase - - if lRet - if lRefAll - oBrowse:RefreshAll() - endif - oBrowse:ForceStable() - - oWvtBrw:oVBar:SetPos( OrdKeyCount(),OrdKeyNo() ) - oWvtBrw:oHBar:SetPos( oBrowse:ColCount, oBrowse:ColPos ) - endif - - RETURN lRet -//-------------------------------------------------------------------// -STATIC FUNCTION CfgMyBrowse( aFields, cUseAlias, aTLBR, cDesc, oParent, cColorSpec, nID ) - LOCAL info_, oWvtBrw, oBrowse, i, bBlock - LOCAL aPopup := {} - - aadd( aPopup, { "Down" , {|| oBrowse:Down() , oBrowse:ForceStable() } } ) - aadd( aPopup, { "Up" , {|| oBrowse:Up() , oBrowse:ForceStable() } } ) - aadd( aPopup, { "Page Down", {|| oBrowse:PageDown(), oBrowse:ForceStable() } } ) - aadd( aPopup, { "Page Up" , {|| oBrowse:PageUp() , oBrowse:ForceStable() } } ) - aadd( aPopup, { "Top" , {|| oBrowse:GoTop() , oBrowse:ForceStable() } } ) - aadd( aPopup, { "Bottom" , {|| oBrowse:GoBottom(), oBrowse:ForceStable() } } ) - - Select( cUseAlias ) - info_:= DbStruct() - - //oBrowse := TBrowseNew( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] ) - oBrowse := TBrowseWVG():New( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] ) - - oBrowse:ColSep := " " - oBrowse:HeadSep := "__" - oBrowse:ColorSpec := cColorSpec - oBrowse:GoTopBlock := { || dbGoTop() } - oBrowse:GoBottomBlock := { || dbGoBottom() } - oBrowse:SkipBlock := { | nSkip | dbSkipBlock( nSkip,oBrowse ) } - - for i := 1 to len( aFields ) - bBlock := VouBlockField( aFields[ i ] ) - oBrowse:AddColumn( TBColumnNew( info_[ aFields[ i ],1 ], bBlock ) ) - next - - oBrowse:configure() - - oWvtBrw := WvtBrowse():New( oParent,nID ) - - oWvtBrw:nTop := aTLBR[ 1 ] - oWvtBrw:nLeft := aTLBR[ 2 ] - oWvtBrw:nBottom := aTLBR[ 3 ] - oWvtBrw:nRight := aTLBR[ 4 ] - oWvtBrw:cAlias := cUseAlias - oWvtBrw:oBrw := oBrowse - oWvtBrw:cDesc := cDesc - oWvtBrw:nPointer := WVT_IDC_HAND - oWvtBrw:cColorHilite := "W+/B*" - oWvtBrw:Tooltip := cDesc - oWvtBrw:aPopup := aPopup - - oWvtBrw:bHandleEvent := {|oWvtBrw,cPaintID,oBrowse,nKey| BrwOnEvent( oWvtBrw,cPaintID,oBrowse,nKey ) } - - RETURN oWvtBrw -//-------------------------------------------------------------------// FUNCTION WvtPartialScreen() LOCAL scr := SaveScreen( 7,20,15,60 ) LOCAL wvtScr := Wvt_SaveScreen( 0, 0, MaxRow(), MaxCol() ) @@ -1229,7 +445,9 @@ FUNCTION WvtPartialScreen() Wvt_SetPopupMenu( hPopup ) RETURN NIL + //-------------------------------------------------------------------// + function WvtLines() LOCAL scr := SaveScreen( 0,0,maxrow(),maxcol() ) LOCAL clr := SetColor( "N/W" ) @@ -1287,122 +505,20 @@ function WvtLines() RestScreen( 0,0,maxrow(),maxcol(), scr ) - RETURN nil + RETURN NIL + //-------------------------------------------------------------------// -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 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 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 CreateMainMenu() LOCAL oMenu LOCAL g_oMenuBar := wvtMenu():new():create() oMenu := WvtMenu():new():create() oMenu:Caption:= "Wvt*Classes" - oMenu:AddItem( "Dialog One . New Window . Threaded", {|| MyDialogOne( 1 ) } ) - oMenu:AddItem( "Dialog One . Main Window . Primary Thread", {|| MyDialogOne( 2 ) } ) + oMenu:AddItem( "Dialog One . New Window . Threaded", {|| DialogWvgClassesOne( 1 ) } ) + oMenu:AddItem( "Dialog One . Main Window . Primary Thread", {|| DialogWvgClassesOne( 2 ) } ) oMenu:AddItem( "-" ) - oMenu:AddItem( "Dialog Two" , {|| MyDialogTwo() } ) + oMenu:AddItem( "Dialog Two" , {|| DialogWvgClassesTwo() } ) oMenu:AddItem( "-" ) oMenu:AddItem( "Exit" , {|| __keyboard( K_ESC ) } ) g_oMenuBar:addItem( "",oMenu ) @@ -1442,8 +558,8 @@ FUNCTION CreateMainMenu() oMenu := wvtMenu():new():create() oMenu:Caption:= "Modeless Dialogs" - oMenu:AddItem( "Dynamic Dialog . Modeless" , {|| DynDialog_2( 1 ) } ) - oMenu:AddItem( "Dynamic Dialog . Modal " , {|| DynDialog_2( 2 ) } ) + oMenu:AddItem( "Dynamic Dialog . Modeless" , {|| DynWinDialog( 1 ) } ) + oMenu:AddItem( "Dynamic Dialog . Modal " , {|| DynWinDialog( 2 ) } ) oMenu:AddItem( "-") oMenu:AddItem( "Slide Show . Modeless" , {|| DlgSlideShow() } ) g_oMenuBar:addItem( "",oMenu) @@ -1472,7 +588,9 @@ FUNCTION CreateMainMenu() #endif RETURN g_oMenuBar + //-------------------------------------------------------------------// + STATIC FUNCTION ActivateMenu( oMenu ) LOCAL nMenu := Wvt_GetLastMenuEvent() LOCAL aMenuItem @@ -1489,853 +607,10 @@ STATIC FUNCTION ActivateMenu( oMenu ) ENDIF RETURN NIL -//-------------------------------------------------------------------// -STATIC FUNCTION MyDialogOne( nMode ) - Local bBlock - - if hb_mtvm() - if nMode == 2 - MyDialogOne_X() - else - bBlock := { |oCrt| ; - oCrt := WvgCrt():New( , , { -1,-1 }, { 54,184 }, , .f. ), ; - oCrt:fontName := 'Courier',; - oCrt:fontHeight := 13 ,; - oCrt:fontWidth := 0 ,; - oCrt:Create() ,; - MyDialogOne_X( oCrt ) ,; - oCrt:destroy() ; - } - hb_threadStart( bBlock ) - endif - else - MyDialogOne_X() - endif - RETURN Nil -//----------------------------------------------------------------------// -STATIC FUNCTION MyDialogOne_X( oCrt ) - LOCAL aObjects:= WvtSetBlocks( {} ) - Local nWinRows, nWinCols, cWinTitle, cFont, nHeight - Local oDlg, oBar, cUseAlias - Local oText, oTBar, aImg_, oImg, oLine, oBox, oBtn, oBtn2 - Local oBBox, oCon, oGet, oBBox2, oBnr, oTBx - Local oBRsd, cTxt, oRct, nGetCol, nSayCol, bBlock, bBlock1 - Local oWvtBrw, oWvtBrw1, lOpen, lOpen1, cUseAlias1, oGetArea, oGet1 - LOCAL hPopup, nGetRow, aGets_, lChkMouse - LOCAL g_oMenuBar, oPBar2,oPBar3, oMenu - - HB_SYMBOL_UNUSED( oCrt ) - - WvtSetKeys( .f. ) - lChkMouse := SetMouseCheck( .f. ) - - hPopup := Wvt_SetPopupMenu() - Popups() - - cTxt := "GtWvt is capable of designing virtually any preceivable control " - cTxt := cTxt + "Windows offers." - cTxt := cTxt + CRLF + CRLF - cTxt := cTxt + "This text is placed in a WvtTextBox() control with " - cTxt := cTxt + "font and alignment adjustments!" - cTxt := cTxt + CRLF + CRLF - cTxt := cTxt + "Enjoy - Pritpal Bedi, INDIA" - - aImg_:={} - aadd( aImg_, hb_DirBase() + "v_lock.bmp" ) - aadd( aImg_, hb_DirBase() + "v_new.bmp" ) - aadd( aImg_, hb_DirBase() + "v_clclt.bmp" ) - aadd( aImg_, hb_DirBase() + "v_calend.bmp" ) - aadd( aImg_, hb_DirBase() + "v_index.bmp" ) - aadd( aImg_, hb_DirBase() + "v_notes1.bmp" ) - aadd( aImg_, hb_DirBase() + "v_selct1.bmp" ) - ? '.' - Wvt_ShowWindow( 1 ) - nWinRows := 55 - nWinCols := 185 - cWinTitle := "WvtGui Dialog One" - cFont := "Courier New" - nHeight := 13 - - oDlg := WvtDialog():New( nWinRows, nWinCols, cWinTitle, cFont, nHeight ) - oDlg:nTooltipWidth := 300 - oDlg:nTooltipTextColor := RGB( 255,0,0 ) - - oBar := WvtStatusBar():New( oDlg,201 ) - oBar:SetPanels( { 50,100 } ) - oBar:SetText( 1, "Tab.SH_Tab.Left_Click - Select a Browse" ) - oBar:SetText( 2, "GtWvt is Fantastic", "w+/W" ) - oBar:SetText( 3, "WOW" ) - oBar:nPointer := WVT_IDC_HAND - oBar:Tooltip := "GtWvt Statusbar with 3 panels" - oDlg:AddObject( oBar ) - - oBox := WvtStatic():New( oDlg,110,4,oDlg:MaxCol()-40,7,oDlg:MaxCol()-2 ) - oBox:nStatic := WVT_STATIC_BOXRECESSED - oDlg:AddObject( oBox ) - - oText := WvtLabel():New( oDlg, 101, 4, oDlg:MaxCol()-40, 7,oDlg:MaxCol()-2 ) - oText:Text := "(x)Harbour" - oText:nFontHeight := 36 - oText:nAlignHorz := 2 - oText:nAlignVert := 2 - oText:nFontWeight := 700 - oText:nTextColor := RGB( 100, 255, 12 ) - oText:nBackColor := RGB( 0, 0, 255 ) - oText:nTextColorHoverOn := RGB( 255, 255, 0 ) - oText:nBackColorHoverOn := RGB( 255, 100, 12 ) - oText:lItalic := .t. - oText:ToolTip := "Software that GROWS with you" - oText:bOnSelect := {|| .t. } - oDlg:AddObject( oText ) - - oImg := WvtImage():New( oDlg,102,20,oDlg:MaxCol()-40,37,oDlg:MaxCol()-2 ) - oImg:cImage := aImg_[ 5 ] - oImg:Tooltip := "WvtImage():New()" - oDlg:AddObject( oImg ) - - oTBar := WvtToolbar():New( oDlg,103, 0,0,2 ) - oTBar:lFloating := .f. - oTBar:Tooltip := "Toolbar" - oTBar:AddButton( aImg_[ 1 ], {|| oImg:SetImage( aImg_[ 1 ] ) } , "Lock" ) - oTBar:AddButton( aImg_[ 2 ], {|| oImg:SetImage( aImg_[ 2 ] ), oText:SetText( "(x)Harbour" ) } , "New" ) - oTBar:AddButton( aImg_[ 3 ], {|| oImg:SetImage( aImg_[ 3 ] ) } , "Calculator" ) - oTBar:AddButton() - oTBar:AddButton( aImg_[ 5 ], {|| oImg:SetImage( aImg_[ 5 ] ) } , "Restore" ) - oTBar:AddButton( aImg_[ 4 ], {|| oImg:SetImage( aImg_[ 4 ] ), oText:SetText( "Vouch" ) } , "Calendar" ) - oTBar:AddButton( aImg_[ 6 ], {|| oImg:SetImage( aImg_[ 6 ] ) } , "Notes" ) - oTBar:AddButton( aImg_[ 7 ], {|| oImg:SetImage( aImg_[ 7 ] ) } , "Press to Send Browse on Top" ) - oTBar:AddButton() - oDlg:AddObject( oTBar ) - - oLine := WvtStatic():New( oDlg, 105, 39, 0, 39, oDlg:MaxCol() ) - oLine:nStatic := WVT_STATIC_LINE - oDlg:AddObject( oLine ) - - oBBox := WvtStatic():New( oDlg,125,4,127,37,139 ) - oBBox:nStatic := WVT_STATIC_BOXGROUP - oDlg:AddObject( oBBox ) - - oBtn := WvtPushButton():New(oDlg, 124, 6, 129, 7, 137 ) - oBtn:cCaption := "Print" - oBtn:bOnLeftUp := {|| Wvt_Keyboard( 379 ) } - oBtn:Tooltip := "Open Printing Dialog for the Browser in Focus" - oDlg:AddObject( oBtn ) - - oBtn2 := WvtPushButton():New( oDlg, 124, 9, 129, 12, 137 ) - oBtn2:cFileImage := aImg_[ 3 ] - oBtn2:block := {|| ExeProgressBar( oPBar2, oPBar3 ) } - oBtn2:Tooltip := "Execute Progress Bar" - oDlg:AddObject( oBtn2 ) - - oPBar2 := WvtProgressBar():New( oDlg, , 14, 129, 25, 137 ) - oPBar2:nBarColor := RGB( 240,240,0 ) - oPBar2:cBackColor := "W/N*" - oPBar2:lVertical := .t. - oPBar2:nDirection := 0 - oPBar2:cImage := "vouch1.bmp" - oDlg:AddObject( oPBar2 ) - - oPBar3 := WvtProgressBar():New( oDlg, , 26, 129, 36, 137 ) - oPBar3:nBarColor := RGB( 240,240,0 ) - oPBar3:cBackColor := "W/N*" - oPBar3:lVertical := .t. - oPBar3:nDirection := 1 - oPBar3:cImage := "vouch1.bmp" - oDlg:AddObject( oPBar3 ) - - oBBox2 := WvtStatic():New( oDlg, , 9, oDlg:MaxCol()-40, 18, oDlg:Maxcol()-2 ) - oBBox2:nStatic := WVT_STATIC_BOXGROUP - oDlg:AddObject( oBBox2 ) - - oCon := WvtConsole():New( oDlg ) - oDlg:AddObject( oCon ) - - nGetCol := 158 - bBlock := {|| oCon:Say( 12, 148, "Name" ,"N/W" ),; - oCon:Say( 14, 148, "Date" ,"N/W" ),; - oCon:Say( 16, 148, "Amount","N/W" ) } - - oGet := WvtGets():New( oDlg, 210, 9, oDlg:Maxcol()-40, 18, oDlg:Maxcol()-2 ) - oGet:AddGets( 12, nGetCol, "GTWvt ", "@! ","W+/B*,N/W*" ) - oGet:AddGets( 14, nGetCol, date() ) - oGet:AddGets( 16, nGetCol, 2122.57, "@Z 99999999.99","w+/R,GR+/B" ) - oGet:Tooltip := "WvtGets():New() - ReadModal() like Clipper" - oGet:cDesc := "Normal Get Box" - oGet:bOnCreate := bBlock - oDlg:AddObject( oGet ) - - oBnr := WvtBanner():New( oDlg, 101, 0, 127, 1, oDlg:MaxCol()-2 ) - oBnr:nTimeDelay := 0.25 - oBnr:cText := "the compiler that EXTENDS with you" - oBnr:nFontHeight := 24 - oBnr:nFontWeight := 0 - oBnr:nDirection := 0 - oBnr:nAlignVert := 2 - oBnr:nTextColor := RGB( 253,251,170 ) - oBnr:nBackColor := RGB( 128,227,142 ) - oBnr:nTextColorHoverOn := RGB( 255,255, 0 ) - oBnr:nBackColorHoverOn := RGB( 255,100, 12 ) - oBnr:Tooltip := "WvtBanner():New()" - oDlg:AddObject( oBnr ) - - oBRsd := WvtStatic():New( oDlg, , 41,127,52,oDlg:MaxCol()-2 ) - oBRsd:nStatic := WVT_STATIC_BOXGROUPRAISED - oDlg:AddObject( oBRsd ) - - oRct := WvtStatic():New( oDlg, , 41,127,52,oDlg:MaxCol()-2 ) - oRct:nStatic := WVT_STATIC_SHADEDRECT - oRct:aRGBb := { 0xffff, 0x0000, 0x0000, 0x0000 } - oRct:aRGBe := { 0x0000, 0xffff, 0xffff, 0x0000 } - oDlg:AddObject( oRct ) - - oTBx := WvtTextBox():New( oDlg, , 42,129,51,oDlg:MaxCol()-4 ) - oTBx:cText := cTxt - oTBx:Tooltip := "WvtTextBox():New()" - oTBx:nFontHeight := 16 - oTBx:lItalic := .t. - oTBx:lUnderline := .t. - oTBx:nAlignHorz := 2 - oTBx:nTextColor := RGB( 255,255,255 ) - oTBx:nTextColorHoverOn := RGB( 0,0,255 ) - oTBx:aPopup := {} - aadd( oTBx:aPopup, { "Getsome" , {|| .t. } } ) - aadd( oTBx:aPopup, { "Getsome2", {|| .t. } } ) - oDlg:AddObject( oTBx ) - - oGetArea := WvtStatic():New( oDlg, , 4, 2, 37, 62 ) - oGetArea:nStatic := WVT_STATIC_BOXRAISED - oDlg:AddObject( oGetArea ) - - nGetCol := 20 - nSayCol := 7 - nGetRow := 7 - bBlock1 := {|| oCon:Say( nGetRow+00, nSayCol, "First Name" ,"N/W" ),; - oCon:Say( nGetRow+02, nSayCol, "Last Name " ,"N/W" ),; - oCon:Say( nGetRow+04, nSayCol, "Street" ,"N/W" ),; - oCon:Say( nGetRow+06, nSayCol, "City" ,"W+/W"),; - oCon:Say( nGetRow+08, nSayCol, "State" ,"N/W" ),; - oCon:Say( nGetRow+10, nSayCol, "Zip" ,"B+/W"),; - oCon:Say( nGetRow+12, nSayCol, "Date Hired" ,"B+/W"),; - oCon:Say( nGetRow+14, nSayCol, "Married" ,"B+/W"),; - oCon:Say( nGetRow+16, nSayCol, "Age" ,"B+/W"),; - oCon:Say( nGetRow+18, nSayCol, "Salary" ,"B+/W"),; - oCon:Say( nGetRow+20, nSayCol, "Notes", ,"B+/W") ; - } - - aGets_:= { pad("Pritpal",20 ), pad( "Bedi",20 ), pad( "60, New Professor Colony",30 ), ; - pad( "Ludhiana, INDIA",30 ),; - "PB", pad( "141004",10 ), ctod( "22/06/04" ), .t., 48, 17000, ; - pad( "Wvtgui is a classical example of (x)Harbour capabilities...",65 ) } - - oGet1 := WvtGets():New( oDlg, , 4, 2, 37, 62 ) - oGet1:AddGets( nGetRow+00, nGetCol, aGets_[ 1 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+02, nGetCol, aGets_[ 2 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+04, nGetCol, aGets_[ 3 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+06, nGetCol, aGets_[ 4 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+08, nGetCol, aGets_[ 5 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+10, nGetCol, aGets_[ 6 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+12, nGetCol, aGets_[ 7 ], "@ " , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+14, nGetCol, aGets_[ 8 ], "@Y" , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+16, nGetCol, aGets_[ 9 ], "@Z 99" , "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+18, nGetCol, aGets_[ 10], "@Z 999999", "N/W*,N/GR*" ) - oGet1:AddGets( nGetRow+20, nGetCol, aGets_[ 11], "@S35" , "N/W*,N/GR*" ) - oGet1:cDesc := "test.dbf Fields" - oGet1:Tooltip := "Double Click to Activate ReadModal()" - oGet1:bOnCreate := bBlock1 - oDlg:AddObject( oGet1 ) - - g_oMenuBar := WvtMenu():new():create() - oMenu := WvtMenu():new():create() - oMenu:Caption := "Other Dialogs" - oMenu:AddItem( "Dialog Two", {|| MyDialogTwo() } ) - oMenu:AddItem( "-" ) - oMenu:AddItem( "Exit", {|| Wvt_Keyboard( K_ESC ) } ) - g_oMenuBar:addItem( "",oMenu ) - - oDlg:oMenu := g_oMenuBar - - lOpen := .f. - cUseAlias := "TEST" - USE ( hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" ) NEW ALIAS ( cUseAlias ) SHARED - if !NetErr() - lOpen := .t. - oWvtBrw := CfgMyBrowse( { 1,7,9,10,8 }, cUseAlias, { 6,67,36,120 }, "test.dbf - 1,7,9,10,8", oDlg, "N/W*,N/GR*",1001 ) - oDlg:AddObject( oWvtBrw ) - endif - - lOpen1 := .f. - cUseAlias1 := "TEST1" - USE ( hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" ) NEW ALIAS ( cUseAlias1 ) SHARED - if !NetErr() - lOpen1 := .t. - oWvtBrw1 := CfgMyBrowse( { 1,2,3,4,5,6 }, cUseAlias1, { 43,4,51,120 }, "test.dbf - 1,2,3,4,5,6",oDlg, "N/BG*,N/W*",1002 ) - oDlg:AddObject( oWvtBrw1 ) - endif - - Setkey( K_F12, {|| hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, 200 ) } ) - - oDlg:Create() - oDlg:Execute() - oDlg:Destroy() - - if lOpen - Select( cUseAlias ) - USE - endif - if lOpen1 - Select( cUseAlias1 ) - USE - endif - - WvtSetBlocks( aObjects ) - WvtSetKeys( .t. ) - Wvt_SetPopupMenu( hPopup ) - SetMouseCheck( lChkMouse ) - - RETURN Nil - + //-------------------------------------------------------------------// -STATIC FUNCTION MyDialogTwo() - LOCAL aObjects := WvtSetBlocks( {} ) - LOCAL oDlg := WvtDialog():New( 30,90,"My Dialog Two" ) - LOCAL g_oMenuBar, oMenu, oPBar - LOCAL oPBar1, oPBar2, oPBar3, oPBar4 - - g_oMenuBar := WvtMenu():new():create() - oMenu := wvtMenu():new():create() - oMenu:Caption := "Miscellaneous" - oMenu:AddItem( "Progressbar", {|| ExeProgBar( oPBar,oPBar1,oPBar2,oPBar3, oPBar4 ) } ) - oMenu:AddItem( "-" ) - oMenu:AddItem( "Exit", {|| Wvt_Keyboard( K_ESC ) } ) - g_oMenuBar:addItem( "",oMenu ) - - oDlg:oMenu := g_oMenuBar - - oPBar := WvtProgressBar():New( oDlg, , 3, 10, 5, 80 ) - oPBar:nBarColor := RGB( 0,240,240 ) - oPBar:cBackColor := "W/N*" - oPBar:nDirection := 1 - oPBar:cImage := "vouch1.bmp" - oDlg:AddObject( oPBar ) - - oPBar1 := WvtProgressBar():New( oDlg, , 7, 10, 8, 80 ) - oPBar1:nBarColor := RGB( 11,255,196 ) - oPBar1:cBackColor := "W/N*" - oPBar1:nDirection := 0 - oDlg:AddObject( oPBar1 ) - - oPBar2 := WvtProgressBar():New( oDlg, , 11, 10, 28, 19 ) - oPBar2:nBarColor := RGB( 240,240,0 ) - oPBar2:cBackColor := "W/N*" - oPBar2:lVertical := .t. - oPBar2:nDirection := 0 - oPBar2:cImage := "v_notes.ico" - oDlg:AddObject( oPBar2 ) - - oPBar3 := WvtProgressBar():New( oDlg, , 11, 77, 28, 80 ) - oPBar3:nBarColor := RGB( 0,0,255 ) - oPBar3:cBackColor := "W/N*" - oPBar3:lVertical := .t. - oPBar3:nDirection := 1 - oDlg:AddObject( oPBar3 ) - - oPBar4 := WvtProgressBar():New( oDlg, , 22, 22, 28, 74 ) - oPBar4:nBarColor := RGB( 255,255,0 ) - oPBar4:cBackColor := "W/N*" - oPBar4:lVertical := .t. - oPBar4:nDirection := 0 - oDlg:AddObject( oPBar4 ) - - oDlg:Create() - oDlg:Execute() - oDlg:Destroy() - - WvtSetBlocks( aObjects ) - RETURN Nil - -//-------------------------------------------------------------------// - -STATIC FUNCTION ExeProgBar( oPBar,oPBar1,oPBar2,oPBar3,oPBar4 ) - LOCAL i - - oPBar:Activate() - oPBar1:Activate() - oPBar2:Activate() - oPBar3:Activate() - oPBar4:Activate() - for i := 1 to 100 - oPBar:Display( i, 100 ) - oPBar1:Display( i, 100 ) - oPBar2:Display( i, 100 ) - oPBar3:Display( i, 100 ) - oPBar4:Display( i, 100 ) - inkey( 0.3 ) - next - inkey( 0 ) - oPBar:DeActivate() - oPBar1:DeActivate() - oPBar2:DeActivate() - oPBar3:DeActivate() - oPBar4:DeActivate() - - RETURN nil -//-------------------------------------------------------------------// - -STATIC FUNCTION ExeProgressBar( oPBar, oPBar3 ) - LOCAL i - - oPBar:Activate() - oPBar3:Activate() - for i := 1 to 100 - oPBar:Display( i, 100 ) - oPBar3:Display( i, 100 ) - inkey( 0.3 ) - next - oPBar:DeActivate() - oPBar3:DeActivate() - - RETURN NIL - -//-------------------------------------------------------------------// - -#define ID_BTN_OK 1 -#define ID_MLE 10 -#define ID_CHK_SATIS 11 -#define ID_EDT_TIME 51 -#define ID_LST_LIST 13 -#define ID_CMB_COMBO 31 -#define ID_RDO_XH 21 -#define ID_RDO_CLIP 22 -#define ID_RDO_XBASE 23 -#define ID_EDT_TEXT 14 -#define ID_EDT_NUMB 15 -#define ID_STA_TEXT 71 -#define ID_STA_IMAGE 72 -#define ID_ICO_VOUCH 81 - -#define ID_GRP_COMP 113 - -#define ID_MNU_FILE 201 -#define ID_MNU_CONTROL 202 - -//-------------------------------------------------------------------// - -Function DynDialog_2( nInfo ) - Local hDlg, aDlg, nStyle, cDlgIcon, cDlgProc, lOnTop, hMenu -// Local bDlgProc -// Local nTimerTicks - - nStyle := DS_SETFONT + WS_VISIBLE + WS_POPUP + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX - - aDlg := Wvt_MakeDlgTemplate( 1, 4, 21, 60, {0,0,0,0}, ; - "Dialog First [ " + ltrim( str( nInfo,10,0 ) ) + " ] "+; - iif( nInfo%2==0, "Modeless", "Modal" )," Dialog !", nStyle ) - - // Multi line edit control - // - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOVSCROLL + ES_MULTILINE + ; - ES_WANTRETURN + WS_BORDER + WS_VSCROLL - aDlg := Wvt_AddDlgItem( aDlg, 1, 2, 15, 35, {}, ID_MLE , "EDIT" , nStyle, /* cText, nHelpId, nExStyle */ ) - - // Two Horz and Vert Lines - // - nStyle := WS_CHILD + WS_VISIBLE + SS_ETCHEDVERT - aDlg := Wvt_AddDlgItem( aDlg, 1, 39, 16, 1, {}, 111 , "STATIC" , nStyle ) - nStyle := WS_CHILD + WS_VISIBLE + SS_ETCHEDHORZ - aDlg := Wvt_AddDlgItem( aDlg, 17, 2, 1, 56, {}, 112 , "STATIC" , nStyle ) - - // Icon - nStyle := WS_CHILD + WS_VISIBLE + SS_ICON //+ SS_CENTERIMAGE - aDlg := Wvt_AddDlgItem( aDlg, 18, 2, 2, 6, {}, ID_ICO_VOUCH , "STATIC" , nStyle, "" ) -/* - // Bitmap - nStyle := WS_CHILD + WS_VISIBLE + SS_BITMAP + SS_REALSIZEIMAGE - aDlg := Wvt_AddDlgItem( aDlg, 18, 41, 2,8, {-3,0,3}, ID_STA_IMAGE, "STATIC" , nStyle, "" ) -*/ - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_AUTOCHECKBOX - aDlg := Wvt_AddDlgItem( aDlg, 18, 15, 1, 10, {}, ID_CHK_SATIS , "BUTTON" , nStyle, "Satisfied?" ) - - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_RIGHT + ES_READONLY - aDlg := Wvt_AddDlgItem( aDlg, 18, 30, 1, 7, {3}, ID_EDT_TIME , "EDIT" , nStyle, "" ) - - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + LBS_NOTIFY + WS_VSCROLL + WS_BORDER - aDlg := Wvt_AddDlgItem( aDlg, 1, 41, 4, 17, {}, ID_LST_LIST , "LISTBOX", nStyle, "ListBox" ) - - nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT - aDlg := Wvt_AddDlgItem( aDlg, 4, 41, 1, 17, {3,0,0,0}, -1 , "STATIC" , nStyle, "Degree" ) - nStyle := WS_VISIBLE + WS_TABSTOP + CBS_DROPDOWNLIST + WS_BORDER + WS_VSCROLL - aDlg := Wvt_AddDlgItem( aDlg, 5, 41, 6, 17, {}, ID_CMB_COMBO , "COMBOBOX" , nStyle, "Combo" ) - - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_GROUPBOX - aDlg := Wvt_AddDlgItem( aDlg, 7, 41, 4, 17, {0,0,4,0},ID_GRP_COMP, "BUTTON" , nStyle, "Compiler" ) - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_AUTORADIOBUTTON - aDlg := Wvt_AddDlgItem( aDlg, 8, 43, 1, 14, {}, ID_RDO_XH , "BUTTON" , nStyle, "(x)Harbour" ) - aDlg := Wvt_AddDlgItem( aDlg, 9, 43, 1, 14, {}, ID_RDO_CLIP , "BUTTON" , nStyle, "Clipper" ) - aDlg := Wvt_AddDlgItem( aDlg,10, 43, 1, 14, {}, ID_RDO_XBASE , "BUTTON" , nStyle, "Xbase++" ) - - nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT - aDlg := Wvt_AddDlgItem( aDlg, 12, 41, 1, 17, {3,0,0,0}, ID_STA_TEXT, "STATIC" , nStyle, "Scrollable Text" ) - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOHSCROLL + WS_BORDER - aDlg := Wvt_AddDlgItem( aDlg, 13, 41, 1, 17, {}, ID_EDT_TEXT , "EDIT" , nStyle, "This is Text Field" ) - - nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT - aDlg := Wvt_AddDlgItem( aDlg, 14, 41, 1, 17, {3,0,0,0}, -1, "STATIC" , nStyle, "Right Justified Numerics" ) - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOHSCROLL + ES_NUMBER + ES_RIGHT + WS_BORDER - aDlg := Wvt_AddDlgItem( aDlg, 15, 41, 1, 17, {}, ID_EDT_NUMB , "EDIT" , nStyle, "1234567" ) - - nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_PUSHBUTTON - aDlg := Wvt_AddDlgItem( aDlg, 18, 50, 1, 8, {-3,0,3,0}, ID_BTN_OK, "BUTTON" , nStyle, "OK" ) - - hMenu := Wvt_CreateMenu() - Wvt_AppendMenu( hMenu, MF_STRING + MF_ENABLED, ID_MNU_FILE , "File" ) - Wvt_AppendMenu( hMenu, MF_STRING + MF_ENABLED, ID_MNU_CONTROL, "Controls" ) - - lOnTop := .f. - cDlgProc := "DynDlgProc_2" -// bDlgProc := {|a,b,c,d| DYNDLGPROC_2(a,b,c,d) } - cDlgIcon := "v_notes.ico" -// nTimerTicks := 1000 // 1 second - - if nInfo == 2 - // Modal Dialog - // - //hDlg := Wvt_DialogBox( aDlg, bDlgProc, Wvt_GetWindowHandle() ) - hDlg := Wvt_DialogBox( aDlg, cDlgProc, Wvt_GetWindowHandle() ) - else - // Modeless Dialog - // - hDlg := Wvt_CreateDialog( aDlg, lOnTop, cDlgProc, cDlgIcon, /*nTimerTicks*/, hMenu ) - - // Using Function name. - //hDlg := Wvt_CreateDialog( aDlg, lOnTop, cDlgProc, cDlgIcon, nTimerTicks, hMenu, lModal ) - endif - - Return hDlg - -//-------------------------------------------------------------------// - -Function DynDlgProc_2( hDlg, nMsg, wParam, lParam ) - Local lClicked, cPrompt, nIndex, hFont - - Switch ( nMsg ) - - case WM_TIMER - WVG_SetDlgItemText( hDlg, ID_EDT_TIME, Time() ) - exit - - case WM_COMMAND - do case - - case wParam == ID_CHK_SATIS - lClicked := ( WVG_IsDlgButtonChecked( hDlg,ID_CHK_SATIS ) == 1 ) - WVG_MessageBox( hDlg, iif( lClicked, "Satisfied", "UnSatisfied" ), "CheckBoxStatus" ) - - case wParam == ID_RDO_XH - WVG_MessageBox( hDlg, "(x)Harbour", "Compiler" ) - - case wParam == ID_RDO_CLIP - WVG_MessageBox( hDlg, "Clipper", "Compiler" ) - - case wParam == ID_RDO_XBASE - WVG_MessageBox( hDlg, "Xbase++", "Compiler" ) - - case wParam == ID_MNU_FILE - WVG_MessageBox( hDlg, "Execute Menu Action!", "File" ) - - case wParam == ID_MNU_CONTROL - WVG_MessageBox( hDlg, "Controls are from Windows!", "Controls" ) - - case WVG_LOWORD( wParam ) == ID_LST_LIST - if WVG_HIWORD( wParam ) == LBN_SELCHANGE - nIndex := WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_LST_LIST ), LB_GETCURSEL, 0, 0 ) - cPrompt := space( 20 ) - WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_LST_LIST ), LB_GETTEXT, nIndex, @cPrompt ) - WVG_MessageBox( hDlg, cPrompt, "ListBox" ) - endif - - case WVG_LOWORD( wParam ) == ID_CMB_COMBO - if WVG_HIWORD( wParam ) == CBN_SELCHANGE - nIndex := WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_CMB_COMBO ), CB_GETCURSEL, 0, 0 ) - cPrompt := space( 20 ) - WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_CMB_COMBO ), CB_GETLBTEXT, nIndex, @cPrompt ) - WVG_MessageBox( hDlg, cPrompt, "Combo Box" ) - endif - - endcase - exit - - case WM_CTLCOLOREDIT - if ( WVG_GetDlgItem( hDlg,ID_MLE ) == lParam ) - WVG_SetTextColor( wParam, RGB( 0,0,255 ) ) - WVG_SetBkColor( wParam, RGB( 255,255,200 ) ) - return 1 - elseif ( WVG_GetDlgItem( hDlg,ID_EDT_TEXT ) == lParam ) - WVG_SetTextColor( wParam, RGB( 255,255,255 ) ) - WVG_SetBkColor( wParam, RGB( 10,200,45 ) ) - Return 1 - endif - - exit - - case WM_CTLCOLORSTATIC - if ( WVG_GetDlgItem( hDlg,ID_STA_TEXT ) == lParam ) - WVG_SetTextColor( wParam, RGB( 255,255,255 ) ) - Return 1 - endif - exit - - case WM_INITDIALOG - WVG_SetTimer( hDlg, 5001, 1000 ) // 1 sec - - if empty( t_ahFonts ) - if ( hFont := Wvt_CreateFont( "Times New Roman", 18 ) ) != 0 - aadd( t_ahFonts, hFont ) - endif - endif - - if len( t_ahFonts ) > 0 - WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_MLE ), WM_SETFONT, t_ahFonts[ 1 ], 0 ) - endif - - if t_hIcon == nil - t_hIcon := WVG_LoadIcon( "vr_1.ico" ) - endif - if t_hIcon != nil .or. t_hIcon != 0 - WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_ICO_VOUCH ), STM_SETIMAGE, IMAGE_ICON, t_hIcon ) - endif - - /* - if t_hImage == nil - t_hImage := WVG_LoadImage( "vouch1.bmp", 2 ) - endif - if t_hImage != nil .and. t_hImage != 0 - WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_STA_IMAGE ), STM_SETIMAGE, IMAGE_BITMAP, t_hImage ) - endif - */ - WVG_SetDlgItemText( hDlg, ID_MLE , GetEditText() ) - WVG_CheckDlgButton( hDlg, ID_CHK_SATIS, .t. ) - - WVG_CheckRadioButton( hDlg, ID_RDO_XH, ID_RDO_XBASE, ID_RDO_XH ) - - Wvt_LBAddString( hDlg, ID_LST_LIST, "(x)Harbour" ) - Wvt_LBAddString( hDlg, ID_LST_LIST, "Gtwvt" ) - Wvt_LBAddString( hDlg, ID_LST_LIST, "Wvtgui" ) - Wvt_LBAddString( hDlg, ID_LST_LIST, "Modeless" ) - Wvt_LBAddString( hDlg, ID_LST_LIST, "Dialogs" ) - Wvt_LBAddString( hDlg, ID_LST_LIST, "WVT" ) - - Wvt_LBSetCurSel( hDlg, ID_LST_LIST, 1 ) - - Wvt_CBAddString( hDlg, ID_CMB_COMBO, "First" ) - Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Second" ) - Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Third" ) - Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Fourth" ) - Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Fifth" ) - - Wvt_CBSetCurSel( hDlg, ID_CMB_COMBO, 1 ) - - WVG_InvalidateRect( hDlg ) - - exit - - case WM_DESTROY - // Do whatevert you want to do with cText - // Each box will retrieve its own text. - // - /* cText := */ WVG_GetDlgItemText( hDlg, ID_MLE ) - exit - - end - - Return 0 - -//-------------------------------------------------------------------// - -static function GetEditText() - Local cText := "" - - cText += "Welcome in the Wonderful World of (x)Harbour!" - cText += CRLF + CRLF - cText += "When Peter Rees first published GTWVT, a Windows " - cText += "Terminal Driver, on 22 Dec 2003, everybody took it " - cText += "lightly, except for me, as I was aware that what " - cText += "wonderful contribution to (x)Harbour he has made, " - cText += "what immense possibilities he has opened for (x)Harbour " - cText += "developers, what limitations he has cleared for Clipper " - cText += "savvy user base." - cText += CRLF + CRLF - cText += "With a little effort I could extend GTWVT " - cText += "to give it a GUI look. I also tried to give it " - cText += "an event driven functionality, and up came Wvt*Classes." - cText += CRLF + CRLF - cText += "And yet another feather is added in the cap of GTWVT " - cText += "as it is now capable of firing modeless dialogs like the one " - cText += "you are viewing. These dialogs can be constructed dynamically ( Courtesy hbwhat32 ) " - cText += "at run time or can be one of resources. At present 20 such dialogs " - cText += "can be active at any given time. Also note that dialogs created " - cText += "dynamically respect Top, Left, Rows, Cols coordinates, which is an " - cText += "undisputed productivity boost!" - cText += CRLF + CRLF - cText += "Enjoy!" + CRLF - cText += "Pritpal Bedi, INDIA" - - Return cText - -//-------------------------------------------------------------------// - -EXIT PROCEDURE CleanHandles() - LOCAL i - - for i := 1 to len( t_ahFonts ) - WVG_DeleteObject( t_ahFonts[ i ] ) - next - - if t_hIcon != nil - WVG_DeleteObject( t_hIcon ) - endif - - if t_hImage != nil - WVG_DeleteObject( t_hImage ) - endif - - Return - -//-------------------------------------------------------------------// - -FUNCTION DlgSlideShow() - LOCAL hDlg, aDlg, nStyle - - t_aSlides := { "vouch1.bmp", "v_notes.ico", "2000.gif", "v_lock.bmp", "v_help.ico" } - - nStyle := DS_SETFONT + WS_VISIBLE + WS_POPUP + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX - - aDlg := Wvt_MakeDlgTemplate( 0, 0, 20, 40, {}, "Slide Show", nStyle ) - - hDlg := Wvt_CreateDialog( aDlg, .f., "DlgSlideShowProc", "vr_1.ico", 5000 ) - - Return hDlg - -//-------------------------------------------------------------------// - -FUNCTION DlgSlideShowProc( hDlg, nMsg, wParam, lParam ) - - THREAD STATIC nSlide := 1 - - HB_SYMBOL_UNUSED( wParam ) - HB_SYMBOL_UNUSED( lParam ) - - Switch nMsg - - case WM_INITDIALOG - DrawSlide( hDlg, nSlide ) - exit - - case WM_PAINT - DrawSlide( hDlg, nSlide ) - exit - - case WM_TIMER - nSlide++ - if nSlide > len( t_aSlides ) - nSlide := 1 - endif - DrawSlide( hDlg, nSlide ) - - exit - - end - - Return 0 -//-------------------------------------------------------------------// -FUNCTION DrawSlide( hDlg, nSlide ) - LOCAL hDC, aRect - - hDC := WVG_GetDC( hDlg ) - aRect := WVG_GetClientRect( hDlg ) - - Win_Rectangle( hDC, aRect[ 1 ]+10, aRect[ 2 ]+10, aRect[ 3 ]-10, aRect[ 4 ]-10 ) - WVG_DrawImage( hDC, aRect[ 1 ]+10, aRect[ 2 ]+10, aRect[ 3 ] - aRect[ 1 ] -20, ; - aRect[ 4 ] - aRect[ 2 ] - 20, t_aSlides[ nSlide ] ) - - WVG_ReleaseDC( hDlg,hDC ) - - Return nil -//----------------------------------------------------------------------// -Static Function MyFunction( nMode ) - - #define MUSIC_WAITON {800, 1600} - - do case - case nMode == 1 - tone( MUSIC_WAITON[1], 1 ) - tone( MUSIC_WAITON[2], 1 ) - - case nMode == 2 - tone( MUSIC_WAITON[2], 1 ) - tone( MUSIC_WAITON[1], 1 ) - - case nMode == 3 - WVG_MessageBox( , "Button clicked!" ) - - case nMode == 101 // Charge - Eval( {|| tone(523,2),tone(698,2),tone(880,2),tone(1046,4),tone(880,2),tone(1046,8) } ) - - case nMode == 102 // NannyBoo - AEval( {{196,2},{196,2},{164,2},{220,2},{196,4},{164,4}}, {|a| tone(a[1],a[2]) } ) - - case nMode == 103 // BADKEY - tone( 480,0.25 ) - tone( 240,0.25 ) - - endcase - - Return nil -//----------------------------------------------------------------------// -Static Function DoModalWindow() - Local oCrt, nSel - - /* This part can be clubbed in a separate prg for different dialogs - * OR can be loaded from a data dictionary. - */ - oCrt := WvgCrt():New( , , { 4,8 }, { 12,49 }, , .T. ) - - oCrt:lModal := .t. - oCrt:resizable := .f. - oCrt:closable := .f. - oCrt:title := 'Information! [R:4 C:8]' - - oCrt:rbUp := {|| DispOutAt( maxrow(), 0, padc( 'rbUp', maxcol()+1 ),'W+/R*' ) } - oCrt:lbUp := {|| DispOutAt( maxrow(), 0, padc( 'lbUp', maxcol()+1 ),'W+/B*' ) } - oCrt:leave := {|| DispOutAt( maxrow(), 0, padc( 'Leaving', maxcol()+1 ), 'W+/RB' ) } - oCrt:enter := {|| DispOutAt( maxrow(), 0, padc( 'Entering', maxcol()+1 ), 'W+/B' ) } - - oCrt:Create() - oCrt:show() - - s_pGT_[ 3 ] := hb_gtSelect() - - // Here goes the Clipper Code - // - SetColor( 'N/W' ) - CLS - do while .t. - nSel := alert( 'I am in modal window !;< Try: MMove LBUp RBUp >;Click Parent Window', { 'OK' } ) - - if nSel == 0 .or. nSel == 1 - exit - - endif - enddo - - // Cleanup - // - s_pGT_[ 3 ] := NIL - oCrt:Destroy() - - Return nil -//----------------------------------------------------------------------// -FUNCTION GoogleMap() +STATIC FUNCTION GoogleMap() Local mfrom1, mto1, mfrom2, mto2, mfrom3, mto3, mweb Local nCursor := setcursor() LOCAL getlist := {} @@ -2373,1934 +648,6 @@ FUNCTION GoogleMap() Hb_ThreadStart( {|| ExecuteActiveX( 1, mweb ) } ) ENDDO - RETURN nil -//----------------------------------------------------------------------// -// The function has to be called via hb_threadStart( {|| ExecuteActiveX( nActiveX ) } ) -// -Function ExecuteActiveX( nActiveX, xParam ) - Local oCrt, oTBar, oSBar, oStatic, oCom, oXbp, oTree, oItem1, oItem2 - LOCAL oListBox, oStatic2, oDA - LOCAL oPanel, oPanel1, oPanel2 -// LOCAL cVarA := "Test A", cVarB := "Test B" -// LOCAL aState := {"not selected", "selected", "undefined"} - LOCAL aParts := {} -// LOCAL oCheck, oRadio, oMLE, cText - - HB_SYMBOL_UNUSED( xParam ) - HB_SYMBOL_UNUSED( oCom ) - - //--------------------------- Dialog -------------------------------\\ - #if 1 - oCrt := WvgDialog():new( , , { 30,30 }, { 800,600 }, , .t. ) - oCrt:closable := .t. - oCrt:create() - #else - oCrt := WvgCrt():new( , , { 5,5 }, { 30,60 }, , .t. ) - oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS - oCrt:closable := .t. - oCrt:create() - SetCursor( .f. ) - #endif - - oDA := oCrt:drawingArea - - //--------------------------- Menu --------------------------------\\ - ActiveXBuildMenu( oCrt, @oStatic, @oStatic2 ) - - //--------------------------- ToolBar -----------------------------\\ - oTBar := ActiveXBuildToolBar( oDA, nActiveX ) - - //--------------------------- StatusBar ---------------------------\\ - oSBar := WvgStatusBar():new( oDA ):create( , , , , , .t. ) - oSBar:panelClick := {|oPanel| WVG_MessageBox( , oPanel:caption ) } - oPanel := oSBar:getItem( 1 ) - oPanel:caption := 'My Root Panel' - oPanel1 := oSBar:addItem() - oPanel1:caption := 'Ready' - oPanel2 := oSBar:addItem() - oPanel2:caption := 'Click on any part!' - - //--------------------------- Static ------------------------------\\ - oStatic := WvgStatic():new( oDA ) - oStatic:type := WVGSTATIC_TYPE_TEXT - oStatic:options := WVGSTATIC_TEXT_CENTER - oStatic:caption := chr(13)+'Implemented Xbase++ Parts' - oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - oStatic:setColorBG( RGB( 198,198,198 ) ) - -#if 0 // panel - //--------------------------- Static + Radio + Checkbox ----------\\ - oStatic2:= WvgStatic():New( oCrt, , { 150, 150 }, { 500,310 }, , .f. ) - //oStatic2:type := WVGSTATIC_TYPE_RAISEDBOX //BGNDFRAME - oStatic2:exStyle += WS_EX_WINDOWEDGE - //oStatic2:options := WVGSTATIC_FRAMETHICK - oStatic2:create() - //oStatic2:setColorBG( RGB( 198,198,198 ) ) - - oXbp := WvgPushButton():new( oStatic2 ) - oXbp:caption := "Hide" - oXbp:create( , , { 430,275 }, { 60,25 } ) - oXbp:activate := {|| oStatic2:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } - - oRadio := WvgRadioButton():new( oStatic2,, { 10,10 }, { 100,15 } ) - oRadio:caption := "Com 1" - oRadio:selection := .T. - oRadio:selected := {|m1,m2,obj| m1:=m1, m2:=m2, WVG_MessageBox( , obj:caption + IF( obj:selection, '< S >', '< N >' ) ) } - oRadio:create() - - oRadio := WvgRadioButton():new( oStatic2,, { 10,35 }, { 100,15 } ) - oRadio:caption := "Com 2" - oRadio:create() - - oCheck := WvgCheckBox():New( oStatic2, , { 10,70 }, { 100,15 }, , .t. ) - oCheck:caption := 'Checkbox A' - oCheck:create() - oCheck:selected := {|m1,m2,o| m1:=m1,m2:=m2, WVG_MessageBox( , IF( o:getData(), 'I am selected','I am not selected' ) ) } - - // Create first 3State button, passing the position to :create() - oXbp := Wvg3State():new( oStatic2 ) - oXbp:caption := "3 State A" - oXbp:create( , , { 10,100 }, { 100,15 } ) - // Determine current state using mp1 - oXbp:selected := {| m1,m2,oBtn | m2:=m2, oBtn:=oBtn, oPanel1:caption := "3State A ["+aState[ m1+1 ]+"]" } - - // Create second 3State Button, passing the position to :new() - oXbp := Wvg3State():new( oStatic2, , { 10,125 }, { 100,15 } ) - oXbp:caption := "3 State B" - oXbp:create( oStatic2 ) - // Determine current state using :getData() - oXbp:selected := {| m1,m2,oBtn | m1:=m1,m2:=m2, WVG_MessageBox( , "3State B", aState[ oBtn:getData()+1 ] ) } - - // Create first SLE, specify position using :create() - // On :typeOut set the focus to the second SLE - oXbp := WvgSLE():new( oStatic2 ) - oXbp:autoTab := .T. - oXbp:bufferLength := 20 - // Data code block containing assignment to LOCAL variable - oXbp:dataLink := {|x| IIf( x == NIL, cVarA, cVarA := x ) } - oXbp:create( , , { 10,170 }, { 150,20 } ) - oXbp:setData() - // Assign the value of the edit buffer to a LOCAL variable when the input focus is lost - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarA =" + cVarA } - - // Create second SLE, specify position using :new() - oXbp := WvgSLE():new( oStatic2, , { 10,200 }, { 150,20 } ) - oXbp:tabStop := .T. - oXbp:bufferLength := 15 - oXbp:dataLink := {|x| IIf( x == NIL, cVarB, cVarB := x ) } - oXbp:create( ) - oXbp:setData() - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarB =" + cVarB } - - // Read file into LOCAL variable - cText := MemoRead( 'hbmk_b32.bat' ) - // Create MLE, specify position using :create() and - // assign data code block accessing LOCAL variable - oMLE := WvgMLE():new( oStatic2 ) - oMLE:wordWrap := .F. - oMLE:border := .t. - oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) } - oMLE:create( oStatic2, , { 180,10 }, { 310,250 } ) - // Copy text from LOCAL variable into edit buffer via :dataLink - oMLE:setData() -#endif - - //--------------------------- ListBox -----------------------------\\ - oListBox := WvgListBox():new() - oListBox:create( oStatic, , { 5, 55 }, { 107, 380 } ) - - oListBox:setColorFG( RGB( 218,61,34 ) ) - - aadd( aParts, 'XbpDialog' ) - aadd( aParts, 'XbpMenuBar' ) - aadd( aParts, 'XbpToolBar' ) - aadd( aParts, 'XbpStatusBar' ) - aadd( aParts, 'XbpStatic' ) - aadd( aParts, 'XbpTreeView' ) - aadd( aParts, 'XbpActiveX' ) - aadd( aParts, 'XbpListBox' ) - aadd( aParts, 'XbpPushButton' ) - aadd( aParts, 'XbpCheckBox' ) - aadd( aParts, 'XbpRadioButton') - aadd( aParts, 'Xbp3State' ) - aadd( aParts, 'XbpSLE' ) - aadd( aParts, 'XbpMLE' ) - aadd( aParts, 'DataRef' ) - - aeval( aParts, {|e| oListBox:addItem( e ) } ) - oListBox:itemSelected := {|| WVG_MessageBox( , oListBox:getCurItem() ) } - oListBox:setData( 3 ) - - //--------------------------- PushButton --------------------------\\ - oXbp := WvgPushButton():new( oStatic ) - oXbp:caption := "Hide" - oXbp:create( , , { 20,440 }, {80,30} ) - oXbp:activate:= {|| oStatic:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } - - //--------------------------- TreeView ---------------------------\\ - oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; - { 160, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - oTree:hasLines := .T. - oTree:hasButtons := .T. - oTree:alwaysShowSelection := .T. - oTree:create() - oTree:setColorBG( RGB( 120,15,240 ) ) - oTree:setColorFG( RGB( 15,240,120 ) ) - oTree:itemSelected := {|oItem| IF( oItem <> NIL, WVG_MessageBox( , oItem:caption ), NIL ) } - - oItem1 := oTree:rootItem:addItem( "First level A" ) - - oTree:rootItem:addItem( "First level B" ) - - oItem2 := oItem1:addItem( "Second level A" ) - oItem1:addItem( "Second level B" ) - - oItem2:addItem( "Third level A" ) - oItem2:addItem( "Third level B" ) - oItem2:addItem( "Third level C" ) - - #if 0 - oItem1:expand( .t. ) - #else - oTree:showExpanded( .t., 2 ) - #endif - - oTree:setData( oItem2 ) - - //--------------------------- Misc Config ------------------------\\ - oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; - IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; - IF( oBtn:caption == 'Tools', oStatic2:show():toFront(), nil ),; - IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ),; - oPanel2:caption := "Button [ " + oBtn:caption + " ] clicked!" } - oDA:resize := {|| ResizeDialog( oCrt, oTBar, oSBar, oStatic, oCom, oTree ) } - - #if 1 - //--------------------------- Active-X ---------------------------\\ - oCom := BuildActiveXControl( nActiveX, oDA ) - - if hb_isObject( oCom ) - oCrt:sendMessage( WM_SIZE, 0, 0 ) - oCrt:show() - ExeActiveX( nActiveX, oCom, xParam ) - ENDIF - #else - oCrt:show() - DO WHILE .t. - IF inkey() == K_ESC - EXIT - ENDIF - ENDDO - #endif - - oCrt:Destroy() - Return nil -//----------------------------------------------------------------------// -STATIC FUNCTION ResizeDialog( oCrt, oTBar, oSBar, oStatic, oCom, oTree ) - LOCAL aCrt, aTBar, aSBar - LOCAL nH, nT -// LOCAL aStatic, aCom, aTree - - aCrt := oCrt:currentSize() - aTBar := oTBar:currentSize() - aSBar := oSBar:currentSize() -// aStatic := oStatic:currentSize() -// aTree := oTree:currentSize() -// aCom := oCom:currentSize() - - nT := aTBar[2] - nH := aCrt[2]-aTBar[2]-aSBar[2] - - IF oStatic:isVisible - oStatic:setPosAndSize( { 0, nT+3 }, { 120, nH-4 }, .t. ) - oCom:setPosAndSize( { 120, nT }, { aCrt[1]-120-150, nH }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - ELSE - oCom:setPosAndSize( { 0, nT }, { aCrt[1]-150, nH }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - ENDIF - - RETURN 1 -//----------------------------------------------------------------------// -Static Function ActiveXBuildMenu( oCrt, oStatic, oStatic2 ) - Local oMenuBar, oSubMenu - - oMenuBar := WvgMenuBar():new( oCrt ):create() - - // Define submenu in procedural style. - // The numeric index of the selected menu item - // is passed to the Callback code block -> mp1 - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Procedural" - oSubMenu:addItem( { "Play Charge ~1", } ) - oSubMenu:addItem( { "Play Nannyboo ~2", } ) - oSubMenu:itemSelected := {|mp1| MyFunction( 100+mp1 ) } - oMenuBar:addItem( { oSubMenu, NIL } ) - - // Define submenu in the functional style: - // A menu item executes a code block that - // calls a function - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Functional" - oSubMenu:addItem( { "Play Opening ~1", {|| MyFunction( 1 ) } } ) - oSubMenu:addItem( { "Play Closing ~2", {|| MyFunction( 2 ) } } ) - oSubMenu:addItem() - oSubMenu:addItem( { "~MessageBox" , {|| MyFunction( 3 ) } } ) - oMenuBar:addItem( { oSubMenu, NIL } ) - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "F~eatures" - oSubMenu:addItem( { "~Hide or Show Left Panel" , {|| IF( oStatic:isVisible, ; - oStatic:hide(), oStatic:show() ), oCrt:sendMessage( WM_SIZE,0,0 ) } } ) - oSubMenu:addItem( { "~Show My Panel" , {|| oStatic2:show() } } ) - oMenuBar:addItem( { oSubMenu, NIL } ) - - Return nil -//----------------------------------------------------------------------// -STATIC FUNCTION ActiveXBuildToolBar( 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 -//----------------------------------------------------------------------// -STATIC FUNCTION BuildActiveXControl( nActiveX, oDA ) - LOCAL oCom - - DEFAULT nActiveX TO 2 - - oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - - do case - case nActiveX == 1 - hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'http://www.harbour.vouch.info'+' ]' ) - oCom:CLSID := 'Shell.Explorer.2' - oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) - oCom:mapEvent( 105, {|| WAPI_OutputDebugString( ' E X P L O R E R - 105' ) } ) - - case nActiveX == 11 - hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'MSHTML Demo'+' ]' ) - oCom:CLSID := "MSHTML:" + "

Stream Test

This HTML content is being loaded from a stream." - oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) - - case nActiveX == 2 - #define evClick 1 - #define evDblClk 2 - #define evBtnDown 3 - #define evMouseMove 4 - #define evBtnUp 5 - - hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' ) - oCom:CLSID := 'AnalogClockControl.AnalogClock' - oCom:Id := 5 - - oCom:mapEvent( evDblClk, {|| oCom:Value := seconds()/86400 ,; - oCom:BackColor := RGB( 0,140,210 ),; - oCom:Refresh() ,; - oCom:ShowSecondsHand := .t. ,; - oCom:Hands3D := .t. ,; - oCom:Refresh() ,; - oCom:showAboutBox() ; - } ) - - oCom:mapEvent( evBtnUp, {|nBtn| if( nBtn == 2, oCom:oParent:sendMessage( WM_CLOSE,0,0 ), NIL ) } ) - - case nActiveX == 3 - hb_gtInfo( HB_GTI_WINTITLE, 'file://' + hb_DirBase() + 'myharu.pdf' ) - oCom:CLSID := 'file://' + hb_DirBase() + 'myharu.pdf' - oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) - - case nActiveX == 4 - hb_gtInfo( HB_GTI_WINTITLE, 'RM Chart [ Attributes Next Charts ]' ) - oCom:CLSID := 'RMChart.RMChartX' - - // RMChart does not have event interface. - // Trying to set it generates GPF. - // Please download RMChart.ocx from http://www.rmchart.com/ . It is free in everysense. - - case nActiveX == 5 - hb_gtInfo( HB_GTI_WINTITLE, 'Image Viewer' ) - oCom:CLSID := 'SCRIBBLE.ScribbleCtrl.1' - - endcase - - oCom:create() - - RETURN oCom -//----------------------------------------------------------------------// -Static Function ExeActiveX( nActiveX, oCom, xParam ) - Local nKey, sData - - static nTurn := 0 - - // After :CREATE() Messages - // - if nActiveX == 1 - oCom:AddressBar := .t. - hb_gtInfo( HB_GTI_WINTITLE, IIF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) ) - oCom:Navigate( IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) ) - - elseif nActiveX == 4 - ConfigureRMChart( oCom ) - oCom:Draw( .t. ) - oCom:Draw2Clipboard() - - elseif nActiveX == 5 - oCom:loadMultiPage( hb_DirBase() + 'myharu.pdf', 2 ) - oCom:addGradientBorder( 10, RGB( 12,20,233 ), RGB( 100,255,20 ), 0 ) - oCom:drawText( 10,10,'Vouch' ) - //oCom:emboss( 3,0 ) - oCom:copy2ClipBoard() - oCom:view := 11 - oCom:setBackGroundColor( rgb( 225,225,225 ) ) - //oCom:rotate90() - - endif - - do while .t. - nKey := inkey() - - IF nActiveX == 2 - oCom:Value := seconds()/86400 - ENDIF - - if nKey == K_F12 - if nActiveX == 1 - oCom:Navigate( 'www.vouch.info' ) - - elseif nActiveX == 11 - //oCom:document( 0 ):InnerHTML := "

Stream Test

This HTML content in a document." - - elseif nActiveX == 4 - oCom:RMCBackColor := 23456142 - oCom:RMCStyle := 2 - oCom:RMCUserWatermark := 'Vouch' - - oCom:Region(1):SetProperties( 5.0,5.0,-5.0,-5.0 ) - - oCom:Draw( .t. ) - endif - - elseif nKey == K_F11 - if nActiveX == 4 - nTurn++ - if nTurn > 6 - nTurn := 1 - endif - sData := NIL - sData := '' - - do case - case nTurn == 1 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] ' + 'Stacked Bars' ) - //SetMode( 30,100 ) - - sData += "00003600|00004450|000051|000061|000073|00008-6972|00009412|00011Tahoma|100011|10" - sData += "0035|1000410|10005-5|10006-5|1000911|100101|100111|100181|100200|1002150000|1002" - sData += "211|100238|100331|100341|100356|100378|100411|100468|100484|100494|10051-6972|10" - sData += "052-16777216|10053-1828|100541|100558|10056-16777216|10057-16777216|10060-167772" - sData += "16|10061-16777216|1006315|10064-32|100652|10066-16776961|10180this is the footer" - sData += "|10181Example of stacked bars|10182Apples*Pears*Cherries*Strawberries|10183 $|10" - sData += "184This is an optional axis text, sized 9 points and bold\9b|10187Label Nr. 1*La" - sData += "bel Nr. 2*Label Nr. 3*Label Nr. 4*Label Nr. 5*Label Nr. 6|10196This is an option" - sData += "al label axis text|110011|110023|110033|110045|110055|11006-1|1100923|110131|110" - sData += "14-1|110171|11019-16777077|1102111|110221|110236|1105310000*10000*16000*12000*20" - sData += "000*10000|120011|120023|120033|120045|120055|12006-1|1200927|120131|12014-1|1201" - sData += "71|12019-16751616|1202111|120221|120236|120535000*7000*4000*15000*10000*10000|13" - sData += "0011|130023|130033|130045|130055|13006-1|1300982|130131|13014-1|130171|13019-838" - sData += "8608|1302111|130221|130236|1305310000*3000*12000*10000*5000*20000|140011|140023|" - sData += "140033|140045|140055|14006-1|1400925|140131|14014-1|140171|14019-4684277|1402111" - sData += "|140221|140236|140535000*9000*12000*6000*10000*5000" - - case nTurn == 2 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Floating Bars' ) - //SetMode( 20,90 ) - - sData += "00003550|00004300|000051|000073|00008-2894893|00009412|00011Tahoma|100011|100035" - sData += "|100045|10005-5|10006-5|1000911|100101|100111|100131|100181|100201|1002113|10022" - sData += "13|100238|100331|100341|100356|100378|100411|100468|100482|10052-16777216|10053-" - sData += "1120086|100544|100555|10056-16777216|10057-16777216|10060-16777216|10061-1677721" - sData += "6|1006316|10064-5383962|100652|10066-16777011|10181Birth of a Killer App|10182Sc" - sData += "hedule*Reality|10187Design*Development*Testing*Bug Fixing*Documentation*Marketin" - sData += "g|1020104/01*04/02*04/03*04/04*04/05*04/06*04/07*04/08*04/09*04/10*04/11*04/12*0" - sData += "5/01|110011|110026|110044|110101|110131|11019-6751336|1102111|110221|1102312|110" - sData += "531*3*4*6*6*4*7*4*9*3*10*3|120011|120026|120044|120101|120132|12019-47872|120211" - sData += "1|120221|1202312|120531*.5*1.5*10.5*12*1*12*1*12.5*.5*2*11" - - case nTurn == 3 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Four Regions' ) - //SetMode( 40,120 ) - - sData += "00003700|00004500|000054|000061|000071|00008-984833|00009412|00011Tahoma|100011|" - sData += "100032|100042|10005348|10006248|1000910|100101|100111|100181|100200|10021100|100" - sData += "2211|100238|100331|100341|100355|100378|100481|100491|10051-984833|10052-1677721" - sData += "6|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-16777216|10061-" - sData += "16777216|10187Label 1*Label 2*Label 3*Label 4*Label 5|110011|110021|110031|11004" - sData += "6|110056|11006-1|110091|110131|11014-1|110171|1102111|110221|110235|1105330*40*7" - sData += "0*60*20|200011|20003352|200042|20005-2|20006248|2000910|200101|200111|200181|200" - sData += "200|20021100|2002211|200238|200331|200341|200355|200378|200484|200491|20051-9848" - sData += "33|20052-16777216|20053-657956|200544|200555|20056-16777216|20057-16777216|20060" - sData += "-16777216|20061-16777216|20187Label 1*Label 2*Label 3*Label 4*Label 5|210011|210" - sData += "023|210033|210045|210055|21006-1|210091|210101|210131|21014-1|210171|2102111|210" - sData += "221|210235|2105320*10*15*25*30|220011|220023|220033|220045|220055|22006-1|220091" - sData += "|220101|220131|22014-1|220171|2202111|220221|220235|2205325*30*10*20*15|230011|2" - sData += "30023|230033|230045|230055|23006-1|230091|230101|230131|23014-1|230171|2302111|2" - sData += "30221|230235|2305310*20*40*20*30|240011|240023|240033|240045|240055|24006-1|2400" - sData += "91|240101|240131|24014-1|240171|2402111|240221|240235|2405340*30*20*30*20|300011" - sData += "|300032|30004252|30005348|30006-2|3000910|300101|300181|300481|300491|30051-9848" - sData += "33|30052-16777216|30053-657956|310011|3100251|310031|3100454|310054|310071|31009" - sData += "1|310121|310151|310161|310171|310182|310211|310221|310235|3105330*50*20*40*60|40" - sData += "0011|40003352|40004252|40005-2|40006-2|4000910|400101|400111|400131|400181|40020" - sData += "100|40021250|4002211|400238|400281|400292|400300|400310|400322|400331|400341|400" - sData += "3510|400378|400482|400492|40051-984833|40052-16777216|40053-984833|400541|400558" - sData += "|40056-16776961|40057-16777216|400592|40060-16777216|40061-16777216|40183$ |4018" - sData += "5 %|410011|410021|410031|410043|410053|41006-1|4100950|410131|41014-1|410171|410" - sData += "19-10496|4102111|410221|4102310|41053240*230*220*180*170*160*145*130*125*115|420" - sData += "011|4200221|420035|4200422|420052|420061|420071|4200963|420111|420121|420131|420" - sData += "171|42019-16744448|4202115|420221|4202310|420261|420538.1*6.2*4.3*2.2*1.2*3.1*5." - sData += "2*11.4*7.3*4.2" - - case nTurn == 4 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'10 Biggest Companies' ) - //SetMode( 25,90 ) - - sData += "00003670|00004450|000051|000061|000071|00008-10185235|00009412|00011Tahoma|10001" - sData += "1|100035|1000410|10005-5|10006-5|1000912|100101|100111|100131|100181|10020100000" - sData += "|10021250000|1002211|100239|100281|100292|100300|100310|100322|100331|100341|100" - sData += "3510|100378|100482|100492|10051-32944|10052-1296|10053-983041|100541|100558|1005" - sData += "6-1828|10057-16777216|100592|10060-1828|10061-16777216|10180data source: F.A.Z|1" - sData += "0181The world's 10 biggest industrial companies 2003|10183$ |10184Total turnover" - sData += " in Mill. Dollar|10185 %|10186Net operating margin|10187Exxon Mobil*Royal Dutch " - sData += "/ Shell*BP*General Motors*Daimler Chrysler*Ford Motor*Toyota Motor*General Elect" - sData += "ric*TOTAL*Chevron Texaco|110011|110021|110031|110043|110053|11006-1|1100950|1101" - sData += "31|11014-1|110171|11019-10496|1102111|110221|1102310|11053242365*235598*232571*1" - sData += "85524*170457*164196*149321*132797*130067*119703|120011|1200221|120035|1200422|12" - sData += "0052|120061|120071|1200970|120111|120121|120131|1201421|120171|12019-16744448|12" - sData += "02115|120221|1202310|120261|120538.9*4.1*4.4*2.1*.3*.3*5.9*11.3*6.7*6" - - case nTurn == 5 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Grouped Bars' ) - //SetMode( 25,80 ) - - sData += "00003600|00004450|000051|000061|000075|00008-2|00009412|00010paper.jpg|00011Taho" - sData += "ma|100011|100035|100045|10005-5|10006-5|1000910|100101|100111|100181|100200|1002" - sData += "1100|1002211|100238|100331|100341|100355|100378|100468|100484|10053-2|100541|100" - sData += "558|100631|100651|10182First quarter*Second quarter*Third quarter*Fourth quarter" - sData += "|101872000*2001*2002*2003*2004|110011|110022|110044|110131|1102111|110221|110235" - sData += "|1105330*20*40*60*10|120011|120022|120044|120131|1202111|120221|120235|1205330*2" - sData += "0*50*70*60|130011|130022|130044|130131|1302111|130221|130235|1305340*10*30*20*80" - sData += "|140011|140022|140044|140131|1402111|140221|140235|1405370*50*80*40*30" - - case nTurn == 6 - hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Flow Chart' ) - //SetMode( 30,50 ) - - sData += "00003305|00004400|000051|00008-984833|00009412|00011Tahoma|100011|100035|100045|" - sData += "10005-5|10006-5|10180\7C|010011|010051|010072|010081|0101050|0101125|01012100|01" - sData += "01325|01014-5952982|01015-5952982|01016255|010191|0102010|01026Start|01030-256|0" - sData += "10012|010054|0100721|01014-16776961|010222|01024100*100|0102550*75|01026|010272|" - sData += "010293|010013|010051|010071|010081|0101050|0101175|01012100|0101325|01014-669788" - sData += "2|01015-6697882|01016255|010191|0102010|01026i = 1|01030-16777216|010014|010054|" - sData += "0100721|01014-16776961|010222|01024100*100|01025100*150|01026|010272|010293|0100" - sData += "15|010051|010073|010081|0101050|01011150|01012100|0101350|01014-65536|01015-6553" - sData += "6|01016255|010191|0102010|01026i = 39?|01030-256|010016|010054|0100721|01014-167" - sData += "76961|010222|01024100*100|01025200*225|01026|010272|010293|010017|010051|010071|" - sData += "010081|0101050|01011225|01012100|0101325|01014-6697882|01015-6697882|01016255|01" - sData += "0191|0102010|01026i = i + 1|01030-16777216|010018|010054|0100721|01014-16776961" - sData += "|010222|01024100*100|01025250*275|01026|010272|010293|010019|010051|010073|01008" - sData += "1|0101050|01011275|01012100|0101350|01014-65536|01015-65536|01016255|010191|0102" - sData += "010|01026i <= 100|01030-256|0100110|010054|0100721|01014-16776961|010222|0102410" - sData += "0*100|01025325*350|01026|010272|010293|0100111|010051|010072|010081|0101050|0101" - sData += "1350|01012100|0101325|01014-5952982|01015-5952982|01016255|010191|0102010|01026S" - sData += "top|01030-256|0100113|010054|0100721|01014-16776961|010222|01024150*200|01025175" - sData += "*175|01026|010272|010293|0100114|010051|010081|01010145|01011157|0101250|01014-1" - sData += "6776961|01015-5383962|01016255|010191|0102010|01026yes|01030-16777216|0100115|01" - sData += "0051|010071|010081|01010200|01011162|01012100|0101325|01014-6697882|01015-669788" - sData += "2|01016255|010191|0102010|01026i = 69|01030-16777216|0100116|010054|0100721|0101" - sData += "4-16776961|010224|0102450*10*10*100|01025300*300*125*125|01026|010272|010293|010" - sData += "0117|010054|0100721|01014-16776961|010223|01024250*250*100|01025162*125*125|0102" - sData += "6|010272|010293|0100118|010051|010081|01010100|01011200|0101250|0101325|01014-16" - sData += "776961|01016255|010191|0102010|01026no|01030-16777216|0100119|010051|010081|0101" - sData += "010|01011280|0101240|01014-16776961|01016255|010191|0102010|01026yes|01030-16777" - sData += "216|0100120|010051|010081|01010100|01011322|0101250|01014-16776961|01016255|0101" - sData += "91|0102010|01026no|01030-16777216|0100120|010051|010079|01010180|01011280|010121" - sData += "20|01013100|01015-39322|010191|010209|01026RMChart is not a flowchart tool. This" - sData += " is just an example for the use of CustomObjects!|01030-256" - - endcase - - oCom:Reset() - oCom:RMCFile := sData - oCom:Draw( .t. ) - endif - - endif - - if nKey == K_ESC - exit - endif - enddo - - Return nil -//----------------------------------------------------------------------// -Function ConfigureRMChart( RMChart ) - - #define RMC_CTRLSTYLEFLAT 0 - #define RMC_PIE_GRADIENT 52 - #define RMC_FULL 1 - #define RMC_EXPLODE_NONE 0 - #define RMC_VLABEL_ABSOLUTE 6 - #define RMC_HATCHBRUSH_OFF 0 - - /* The code pulled from freewin sources */ - WITH OBJECT RMChart - :Font := "Tahoma" - :RMCStyle := RMC_CTRLSTYLEFLAT - - :AddRegion() - WITH OBJECT :Region( 1 ) - :Footer = "http://vouch.info" - - :AddCaption() - WITH OBJECT :Caption() - :Titel := "GTWVG Active-X Demo" - :FontSize := 10 - :Bold := .T. - END - - :AddGridlessSeries() - - WITH OBJECT :GridLessSeries - :SeriesStyle := RMC_PIE_GRADIENT - :Alignment := RMC_FULL - :Explodemode := RMC_EXPLODE_NONE - :Lucent := .F. - :ValueLabelOn := RMC_VLABEL_ABSOLUTE - :HatchMode := RMC_HATCHBRUSH_OFF - :StartAngle := 0 - :DataString := "10*5*20*25" - END - END - END - - Return nil -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// -// -// A Pure Xbase++ Implementation -// -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// -#if 0 -FUNCTION demoxbp() - Local oCrt, oTBar, oSBar, oStatic, oCom, oXbp, oTree, oItem1, oItem2 - LOCAL oListBox, oCheck, oRadio, oStatic2, oMLE, oAddr - LOCAL oPanel, oPanel1, oPanel2, cText, cNavigate, oDA - LOCAL cVarA := "Test A", cVarB := "Test B" - LOCAL aState := {"not selected", "selected", "undefined"} - LOCAL aParts := {} - - //--------------------------- Dialog -------------------------------\\ - oCrt := WvgDialog():new( , , { 30,30 }, { 900,600 }, , .t. ) - oCrt:closable := .t. - oCrt:icon := "vr_1.ico" - oCrt:create() - - oCrt:setFontCompoundName( '12.Courier italic' ) - - oDA := oCrt:drawingArea - - //--------------------------- Menu --------------------------------\\ - ActiveXBuildMenuXbp( oCrt, @oStatic, @oStatic2 ) - - //--------------------------- ToolBar -----------------------------\\ - oTBar := ActiveXBuildToolBarXbp( oDA ) - - //--------------------------- StatusBar ---------------------------\\ - #if 0 - oSBar := WvgStatusBar():new( oCrt ):create( , , , , , .t. ) - oSBar:panelClick := {|oPanel| WVG_MessageBox( , oPanel:caption ) } - oPanel := oSBar:getItem( 1 ) - oPanel:caption := 'My Root Panel' - oPanel1 := oSBar:addItem() - oPanel1:caption := 'Ready' - oPanel2 := oSBar:addItem() - oPanel2:caption := 'Click on any part!' - #endif - //--------------------------- Static ------------------------------\\ -#if 0 - oStatic := WvgStatic():new( oDA ) - oStatic:type := WVGSTATIC_TYPE_TEXT - oStatic:options := WVGSTATIC_TEXT_CENTER - oStatic:caption := chr(13)+'Implemented Xbase++ Parts' - #if 0 - oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - #else - oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-4 }, , .t. ) - #endif - oStatic:setColorBG( RGB( 200,200,200 ) ) - - //--------------------------- Static + Radio + Checkbox ----------\\ - oStatic2:= WvgStatic():New( oDA, , { 150, 150 }, { 500,310 }, , .f. ) - //oStatic2:type := WVGSTATIC_TYPE_RAISEDBOX //BGNDFRAME - oStatic2:exStyle += WS_EX_WINDOWEDGE - //oStatic2:options := WVGSTATIC_FRAMETHICK - oStatic2:create() - oStatic2:setColorBG( RGB( 175,175,175 ) ) - - oXbp := WvgPushButton():new( oStatic2 ) - oXbp:caption := "Hide" - oXbp:caption := "Hide" - oXbp:create( , , { 430,275 }, { 60,25 } ) - oXbp:activate := {|| oStatic2:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } - - oRadio := WvgRadioButton():new( oStatic2,, { 10,10 }, { 100,15 } ) - oRadio:caption := "Com 1" - oRadio:selection := .T. - oRadio:selected := {|m1,m2,obj| m1:=m1, m2:=m2, WVG_MessageBox( , obj:caption + IF( obj:selection, '< S >', '< N >' ) ) } - oRadio:create() - - oRadio := WvgRadioButton():new( oStatic2,, { 10,35 }, { 100,15 } ) - oRadio:caption := "Com 2" - oRadio:create() - - oCheck := WvgCheckBox():New( oStatic2, , { 10,70 }, { 100,15 }, , .t. ) - oCheck:caption := 'Checkbox A' - oCheck:create() - oCheck:selected := {|m1,m2,o| m1:=m1,m2:=m2, WVG_MessageBox( , IF( o:getData(), 'I am selected','I am not selected' ) ) } - - // Create first 3State button, passing the position to :create() - oXbp := Wvg3State():new() - oXbp:caption := "3 State A" - oXbp:create( oStatic2, , { 10,100 }, { 100,15 } ) - // Determine current state using mp1 - oXbp:selected := {| m1,m2,oBtn | m2:=m2, oBtn:=oBtn, oPanel1:caption := "3State A ["+aState[ m1+1 ]+"]" } - - // Create second 3State Button, passing the position to :new() - oXbp := Wvg3State():new( oStatic2, , { 10,125 }, { 100,15 } ) - oXbp:caption := "3 State B" - oXbp:create( oStatic2 ) - // Determine current state using :getData() - oXbp:selected := {| m1,m2,oBtn | m1:=m1,m2:=m2, WVG_MessageBox( , "3State B", aState[ oBtn:getData()+1 ] ) } - - // Create first SLE, specify position using :create() - // On :typeOut set the focus to the second SLE - oXbp := WvgSLE():new() - oXbp:autoTab := .T. - oXbp:bufferLength := 20 - // Data code block containing assignment to LOCAL variable - oXbp:dataLink := {|x| IIf( x == NIL, cVarA, cVarA := x ) } - oXbp:create( oStatic2, , { 10,170 }, { 150,20 } ) - oXbp:setData() - // Assign the value of the edit buffer to a LOCAL variable when the input focus is lost - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarA =" + cVarA } - - // Create second SLE, specify position using :new() - oXbp := WvgSLE():new( , , { 10,200 }, { 150,20 } ) - oXbp:tabStop := .T. - oXbp:bufferLength := 15 - oXbp:dataLink := {|x| IIf( x == NIL, cVarB, cVarB := x ) } - oXbp:create( oStatic2 ) - oXbp:setData() - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarB =" + cVarB } - - // Read file into LOCAL variable - cText := MemoRead( 'hbmk_b32.bat' ) - // Create MLE, specify position using :create() and - // assign data code block accessing LOCAL variable - oMLE := WvgMLE():new() - oMLE:wordWrap := .F. - oMLE:border := .t. - oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) } - oMLE:create( oStatic2, , { 180,10 }, { 310,250 } ) - // Copy text from LOCAL variable into edit buffer via :dataLink - oMLE:setData() - - //--------------------------- ListBox -----------------------------\\ - oListBox := WvgListBox():new() - oListBox:create( oStatic, , { 5, 55 }, { 107, 380 } ) - - oListBox:setColorFG( RGB( 218,61,34 ) ) - //oListBox:setColorBG( RGB( 250,244,182 ) ) - - aadd( aParts, 'XbpDialog' ) - aadd( aParts, 'XbpMenuBar' ) - aadd( aParts, 'XbpToolBar' ) - aadd( aParts, 'XbpToolBarButton' ) - aadd( aParts, 'XbpStatusBar' ) - aadd( aParts, 'XbpStatic' ) - aadd( aParts, 'XbpTreeView' ) - aadd( aParts, 'XbpTreeViewItem' ) - aadd( aParts, 'XbpActiveXControl') - aadd( aParts, 'XbpListBox' ) - aadd( aParts, 'XbpPushButton' ) - aadd( aParts, 'XbpCheckBox' ) - aadd( aParts, 'XbpRadioButton' ) - aadd( aParts, 'Xbp3State' ) - aadd( aParts, 'XbpSLE' ) - aadd( aParts, 'XbpMLE' ) - aadd( aParts, 'XbpHTMLViewer' ) - aadd( aParts, 'XbpSysWindow' ) - aadd( aParts, 'XbpFontDialog' ) - aadd( aParts, 'XbpFont' ) - aadd( aParts, '-------------' ) - aadd( aParts, 'DataRef' ) - - aeval( aParts, {|e| oListBox:addItem( e ) } ) - oListBox:itemSelected := {|| WVG_MessageBox( , oListBox:getCurItem() ) } - oListBox:setData( 3 ) // show selected 'XbpToolBar' - - //--------------------------- PushButton --------------------------\\ - oXbp := WvgPushButton():new( oStatic ) - oXbp:caption := "Hide" - oXbp:create( , , { 20,440 }, {80,30} ) - oXbp:activate:= {|| oStatic:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } -#endif - //--------------------------- TreeView ---------------------------\\ - #if 0 - oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; - { 160, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - #else - oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; - { 160, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-4 }, , .t. ) - #endif - oTree:hasLines := .T. - oTree:hasButtons := .T. - oTree:alwaysShowSelection := .T. - oTree:create() - oTree:setColorBG( RGB( 120,15,240 ) ) - oTree:setColorFG( RGB( 15,240,120 ) ) - oTree:itemSelected := {|oItem| IF( oItem <> NIL, WVG_MessageBox( , oItem:caption ), NIL ) } - - oItem1 := oTree:rootItem:addItem( "First level A" ) - - oTree:rootItem:addItem( "First level B" ) - - oItem2 := oItem1:addItem( "Second level A" ) - oItem1:addItem( "Second level B" ) - - oItem2:addItem( "Third level A" ) - oItem2:addItem( "Third level B" ) - oItem2:addItem( "Third level C" ) - - #if 0 - oItem1:expand( .t. ) - #else - oTree:showExpanded( .t., 2 ) - #endif - - oTree:setData( oItem2 ) - - //--------------------------- Active-X ---------------------------\\ - hb_gtInfo( HB_GTI_WINTITLE, 'http://www.harbour.vouch.info' ) - #if 0 - oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - oCom:CLSID := 'Shell.Explorer.2' - oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) - #else - oCom := WvgHTMLViewer():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - //oCom:beforeNavigate := {|cURL, x, oHTML| x := x, oHTML := oHTML, oPanel:caption := cURL } - //oCom:statusTextChange := {|cText| oPanel:caption := cText } - #endif - oCom:create() - oCom:Navigate( 'http://www.harbour.vouch.info' ) - - oAddr := WvgSLE():new() - oAddr:bufferLength := 500 - oAddr:border := .t. - cNavigate := 'http://www.harbour.vouch.info' - oAddr:dataLink := {|x| iif( x == NIL, cNavigate, cNavigate := x ) } - oAddr:setColorFG( RGB( 0,0,255 ) ) - oAddr:setColorBG( RGB( 0,255,255 ) ) - oAddr:create( oDA, , { 120, oTBar:currentSize()[2] }, { 500,20 }, , .t. ) - oAddr:setData() - oAddr:killInputFocus := {|m1,m2,oS| m1:=m1, m2:=m2, oS:getData(), oCom:navigate( cNavigate ) } - - //--------------------------- Misc Config ------------------------\\ - #if 0 - oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; - IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; - IF( oBtn:caption == 'Tools', oStatic2:show():toFront(), nil ),; - IF( oBtn:caption == 'Font Dlg', ExeFontDialog( oCrt ), nil ),; - IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ),; - oPanel2:caption := "Button [ " + oBtn:caption + " ] clicked!" } - #else - oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; - IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; - IF( oBtn:caption == 'Tools', oStatic2:show():toFront(), nil ),; - IF( oBtn:caption == 'Font Dlg', ExeFontDialog( oCrt ), nil ),; - IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ) } - #endif - oCrt:resize := {|| ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) } - - oCrt:sendMessage( WM_SIZE, 0, 0 ) - oCrt:show() - - DO WHILE .t. - IF inkey() == K_ESC - EXIT - ENDIF - ENDDO - - oCrt:Destroy() - Return nil - -//----------------------------------------------------------------------// - -STATIC FUNCTION ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) - LOCAL aCrt, aTBar, aSBar - LOCAL nH, nT - - aCrt := oCrt:currentSize() - aTBar := oTBar:currentSize() - //aSBar := oSBar:currentSize() - - nT := aTBar[2] - nH := aCrt[2]-aTBar[2]//-aSBar[2] -#if 0 - IF oStatic:isVisible - #if 1 - oStatic:setPosAndSize( { 0, nT+3 }, { 120, nH-4 }, .t. ) - oAddr:setPosAndSize( { 120, nT+2 }, { aCrt[1]-120-150, 20 }, .t. ) - oCom:setPosAndSize( { 120, nT+2+20 }, { aCrt[1]-120-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - #else - oStatic:setSize( { 120, nH-4 }, .t. ) - oAddr:setSize( { aCrt[1]-120-150, 20 }, .t. ) - oCom:setSize( { aCrt[1]-120-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - #endif - - ELSE - oAddr:setPosAndSize( { 0, nT+2 }, { aCrt[1]-150, 20 }, .t. ) - oCom:setPosAndSize( { 0, nT+2+20 }, { aCrt[1]-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - - ENDIF -#else - oAddr:setPosAndSize( { 0, nT+2 }, { aCrt[1]-150, 20 }, .t. ) - oCom:setPosAndSize( { 0, nT+2+20 }, { aCrt[1]-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - -#endif - RETURN 1 - -//----------------------------------------------------------------------// - -Static Function ActiveXBuildMenuXbp( oCrt, oStatic, oStatic2 ) - Local oMenuBar, oSubMenu - - oMenuBar := WvgMenuBar():new( oCrt ):create() - - // Define submenu in procedural style. - // The numeric index of the selected menu item - // is passed to the Callback code block -> mp1 - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Procedural" - oSubMenu:addItem( { "Play Charge ~1", } ) - oSubMenu:addItem( { "Play Nannyboo ~2", } ) - oSubMenu:itemSelected := {|mp1| MyFunction( 100+mp1 ) } - oMenuBar:addItem( { oSubMenu, NIL } ) - - // Define submenu in the functional style: - // A menu item executes a code block that - // calls a function - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Functional" - oSubMenu:addItem( { "Play Opening ~1", {|| MyFunctionXbp( 1 ) } } ) - oSubMenu:addItem( { "Play Closing ~2", {|| MyFunctionXbp( 2 ) } } ) - oSubMenu:addItem() - oSubMenu:addItem( { "~MessageBox" , {|| MyFunctionXbp( 3 ) } } ) - oMenuBar:addItem( { oSubMenu, NIL } ) - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "F~eatures" - oSubMenu:addItem( { "~Hide or Show Left Panel" , {|| IF( oStatic:isVisible, ; - oStatic:hide(), oStatic:show() ), oCrt:sendMessage( WM_SIZE,0,0 ) } } ) - oSubMenu:addItem( { "~Show My Panel" , {|| oStatic2:show() } } ) - oSubMenu:addItem() - oSubMenu:addItem( { "~Font Dialog" , {|| ExeFontDialog( oCrt ) } } ) - - oMenuBar:addItem( { oSubMenu, NIL } ) - - Return nil -//----------------------------------------------------------------------// - -STATIC FUNCTION ActiveXBuildToolBarXbp( oCrt ) - LOCAL oTBar - - oTBar := WvgToolBar():new( oCrt , , { 0,0 }, { 0,0 }, , .T. ) - - oTBar:style := WVGTOOLBAR_STYLE_FLAT //VERTICAL - - oTBar:borderStyle := WVGFRAME_RECT - - oTBar:buttonWidth := 28 - oTBar:buttonHeight := 26 - - oTBar:imageWidth := 26 - oTBar:imageHeight := 24 - - oTBar:showToolTips := .t. - - oTBar:create() - - oTBar:addItem( "New" , hb_DirBase() + 'v_new.bmp' ) - oTBar:addItem( "Select" , hb_DirBase() + 'v_selct1.bmp' ) - oTBar:addItem( ) - oTBar:addItem( "FontDlg" , hb_DirBase() + 'v_calend.bmp' ) - oTBar:addItem( "Tools" , hb_DirBase() + 'v_lock.bmp' ) - oTBar:addItem( "Index" , hb_DirBase() + 'v_index.bmp' ) - oTBar:addItem( ) - oTBar:addItem( "Show" , hb_DirBase() + 'v_clclt.bmp' ) - oTBar:addItem( "Hide" , hb_DirBase() + 'v_notes1.bmp' ) - RETURN oTBar - -//----------------------------------------------------------------------// - -Static Function MyFunctionXbp( nMode ) - -// #define MUSIC_WAITON {800, 1600} - - do case - case nMode == 1 - tone( MUSIC_WAITON[1], 1 ) - tone( MUSIC_WAITON[2], 1 ) - - case nMode == 2 - tone( MUSIC_WAITON[2], 1 ) - tone( MUSIC_WAITON[1], 1 ) - - case nMode == 3 - WVG_MessageBox( , "Button clicked!" ) - - case nMode == 101 // Charge - Eval( {|| tone(523,2),tone(698,2),tone(880,2),tone(1046,4),tone(880,2),tone(1046,8) } ) - - case nMode == 102 // NannyBoo - AEval( {{196,2},{196,2},{164,2},{220,2},{196,4},{164,4}}, {|a| tone(a[1],a[2]) } ) - - case nMode == 103 // BADKEY - tone( 480,0.25 ) - tone( 240,0.25 ) - - endcase - - Return nil - -//----------------------------------------------------------------------// - -STATIC FUNCTION ExeFontDialog( oCrt ) - LOCAL oFontDlg - - STATIC nMode := 0 - - oFontDlg := WvgFontDialog():new( oCrt ) - - oFontDlg:title := 'Select a Screen Font' - oFontDlg:aPos := { 150,150 } - oFontDlg:buttonApply := .t. - oFontDlg:activateApply := {|| NIL } - oFontDlg:familyName := "Courier New" - oFontDlg:strikeout := .T. - oFontDlg:underscore := .f. - //oFontDlg:activateOk := {|| WVG_MessageBox( , 'activateOK Event Handelled in Windows!' ) } - oFontDlg:nominalPointSize := 12 - - //oFontDlg:size := .f. - //oFontDlg:style := .f. - - oFontDlg:create() - - #if 1 - // Every 2nd FontDialog will be MODAL - oFontDlg:display( ++nMode % 2 ) - #endif - - oFontDlg:destroy() - - RETURN nil -#endif -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// -//----------------------------------------------------------------------// - -FUNCTION demoxbp() - Local oCrt, oTBar, oSBar, oStatic, oCom, oXbp, oTree, oItem1, oItem2 - LOCAL oListBox, oCheck, oRadio, oStatic2, oMLE, oAddr - LOCAL oPanel, oPanel1, oPanel2, cText, cNavigate, oDA - LOCAL cVarA := "Test A", cVarB := "Test B" - LOCAL aState := {"not selected", "selected", "undefined"} - LOCAL aParts := {} - - //--------------------------- Dialog -------------------------------\\ - oCrt := WvgDialog():new( , , { 30,30 }, { 900,600 }, , .t. ) - oCrt:closable := .t. - oCrt:icon := "vr_1.ico" - oCrt:create() - - oCrt:setFontCompoundName( '12.Courier italic' ) - - oDA := oCrt:drawingArea - - //--------------------------- Menu --------------------------------\\ - ActiveXBuildMenuXbp( oCrt, @oStatic, @oStatic2 ) - - //--------------------------- ToolBar -----------------------------\\ - oTBar := ActiveXBuildToolBarXbp( oDA ) - - //--------------------------- StatusBar ---------------------------\\ - oSBar := WvgStatusBar():new( oCrt ):create( , , , , , .t. ) - oSBar:panelClick := {|oPanel| WVG_MessageBox( , oPanel:caption ) } - oPanel := oSBar:getItem( 1 ) - oPanel:caption := 'My Root Panel' - oPanel1 := oSBar:addItem() - oPanel1:caption := 'Ready' - oPanel2 := oSBar:addItem() - oPanel2:caption := 'Click on any part!' - - //--------------------------- Static ------------------------------\\ - oStatic := WvgStatic():new( oDA ) - oStatic:type := WVGSTATIC_TYPE_TEXT - oStatic:options := WVGSTATIC_TEXT_CENTER - oStatic:caption := chr(13)+'Implemented Xbase++ Parts' - - oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - oStatic:setColorBG( RGB( 200,200,200 ) ) - - //--------------------------- ListBox -----------------------------\\ - oListBox := WvgListBox():new() - oListBox:create( oStatic, , { 5, 55 }, { 107, 380 } ) - - oListBox:setColorFG( RGB( 218,61,34 ) ) - //oListBox:setColorBG( RGB( 250,244,182 ) ) - - aadd( aParts, 'XbpDialog' ) - aadd( aParts, 'XbpMenuBar' ) - aadd( aParts, 'XbpToolBar' ) - aadd( aParts, 'XbpToolBarButton' ) - aadd( aParts, 'XbpStatusBar' ) - aadd( aParts, 'XbpStatic' ) - aadd( aParts, 'XbpTreeView' ) - aadd( aParts, 'XbpTreeViewItem' ) - aadd( aParts, 'XbpActiveXControl') - aadd( aParts, 'XbpListBox' ) - aadd( aParts, 'XbpPushButton' ) - aadd( aParts, 'XbpCheckBox' ) - aadd( aParts, 'XbpRadioButton' ) - aadd( aParts, 'Xbp3State' ) - aadd( aParts, 'XbpSLE' ) - aadd( aParts, 'XbpMLE' ) - aadd( aParts, 'XbpHTMLViewer' ) - aadd( aParts, 'XbpSysWindow' ) - aadd( aParts, 'XbpFontDialog' ) - aadd( aParts, 'XbpFont' ) - aadd( aParts, '-------------' ) - aadd( aParts, 'DataRef' ) - - aeval( aParts, {|e| oListBox:addItem( e ) } ) - oListBox:itemSelected := {|| WVG_MessageBox( , oListBox:getCurItem() ) } - oListBox:setData( 3 ) // show selected 'XbpToolBar' - - //--------------------------- PushButton --------------------------\\ - oXbp := WvgPushButton():new( oStatic ) - oXbp:caption := "Hide" - oXbp:create( , , { 20,440 }, {80,30} ) - oXbp:activate:= {|| oStatic:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } - - //--------------------------- TreeView ---------------------------\\ - - oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; - { 160, oCrt:currentSize()[2]-; - oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) - oTree:hasLines := .T. - oTree:hasButtons := .T. - oTree:alwaysShowSelection := .T. - oTree:create() - oTree:setColorBG( RGB( 120,15,240 ) ) - oTree:setColorFG( RGB( 15,240,120 ) ) - oTree:itemSelected := {|oItem| IF( oItem <> NIL, WVG_MessageBox( , oItem:caption ), NIL ) } - - oItem1 := oTree:rootItem:addItem( "First level A" ) - - oTree:rootItem:addItem( "First level B" ) - - oItem2 := oItem1:addItem( "Second level A" ) - oItem1:addItem( "Second level B" ) - - oItem2:addItem( "Third level A" ) - oItem2:addItem( "Third level B" ) - oItem2:addItem( "Third level C" ) - - #if 0 - oItem1:expand( .t. ) - #else - oTree:showExpanded( .t., 2 ) - #endif - - oTree:setData( oItem2 ) - - //--------------------------- Active-X ---------------------------\\ - hb_gtInfo( HB_GTI_WINTITLE, 'http://www.harbour.vouch.info' ) -#if 0 - #if 0 - oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - oCom:CLSID := 'Shell.Explorer.2' - oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) - #else - oCom := WvgHTMLViewer():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - oCom:beforeNavigate := {|cURL, x, oHTML| x := x, oHTML := oHTML, oPanel:caption := cURL } - oCom:statusTextChange := {|cText| oPanel:caption := cText } - oCom:mapEvent( 112, {|| oPanel:caption := ' E X P L O R E R - 2 6 9' } ) - #endif - oCom:create() - oCom:Navigate( 'http://www.harbour.vouch.info' ) -#endif - oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) - oCom:CLSID := 'newObjects.comctl.VisiLabel' - oCom:mapEvent( 2, {|| WAPI_OutputDebugString( 'VISILABEE' ) } ) - oCom:create() - - oAddr := WvgSLE():new() - oAddr:bufferLength := 500 - oAddr:border := .t. - cNavigate := 'http://www.harbour.vouch.info' - oAddr:dataLink := {|x| iif( x == NIL, cNavigate, cNavigate := x ) } - oAddr:setColorFG( RGB( 0,0,255 ) ) - oAddr:setColorBG( RGB( 0,255,255 ) ) - oAddr:create( oDA, , { 120, oTBar:currentSize()[2] }, { 500,20 }, , .t. ) - oAddr:setData() - oAddr:killInputFocus := {|m1,m2,oS| m1:=m1, m2:=m2, oS:getData(), oCom:navigate( cNavigate ) } - - //----------------- Panel : Static + Radio + Checkbox ----------\\ - oStatic2:= WvgStatic():New( oDA, , { 150, 150 }, { 500,310 }, , .f. ) - //oStatic2:type := WVGSTATIC_TYPE_RAISEDBOX //BGNDFRAME - oStatic2:exStyle += WS_EX_WINDOWEDGE - //oStatic2:options := WVGSTATIC_FRAMETHICK - oStatic2:create() - oStatic2:setColorBG( RGB( 175,175,175 ) ) - - oXbp := WvgPushButton():new( oStatic2 ) - oXbp:caption := "Hide" - oXbp:caption := "Hide" - oXbp:create( , , { 430,275 }, { 60,25 } ) - oXbp:activate := {|| oStatic2:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } - - oRadio := WvgRadioButton():new( oStatic2,, { 10,10 }, { 100,15 } ) - oRadio:caption := "Com 1" - oRadio:selection := .T. - oRadio:selected := {|m1,m2,obj| m1:=m1, m2:=m2, WVG_MessageBox( , obj:caption + IF( obj:selection, '< S >', '< N >' ) ) } - oRadio:create() - - oRadio := WvgRadioButton():new( oStatic2,, { 10,35 }, { 100,15 } ) - oRadio:caption := "Com 2" - oRadio:create() - - oCheck := WvgCheckBox():New( oStatic2, , { 10,70 }, { 100,15 }, , .t. ) - oCheck:caption := 'Checkbox A' - oCheck:create() - oCheck:selected := {|m1,m2,o| m1:=m1,m2:=m2, WVG_MessageBox( , IF( o:getData(), 'I am selected','I am not selected' ) ) } - - // Create first 3State button, passing the position to :create() - oXbp := Wvg3State():new() - oXbp:caption := "3 State A" - oXbp:create( oStatic2, , { 10,100 }, { 100,15 } ) - // Determine current state using mp1 - oXbp:selected := {| m1,m2,oBtn | m2:=m2, oBtn:=oBtn, oPanel1:caption := "3State A ["+aState[ m1+1 ]+"]" } - - // Create second 3State Button, passing the position to :new() - oXbp := Wvg3State():new( oStatic2, , { 10,125 }, { 100,15 } ) - oXbp:caption := "3 State B" - oXbp:create( oStatic2 ) - // Determine current state using :getData() - oXbp:selected := {| m1,m2,oBtn | m1:=m1,m2:=m2, WVG_MessageBox( , "3State B", aState[ oBtn:getData()+1 ] ) } - - // Create first SLE, specify position using :create() - // On :typeOut set the focus to the second SLE - oXbp := WvgSLE():new() - oXbp:autoTab := .T. - oXbp:bufferLength := 20 - // Data code block containing assignment to LOCAL variable - oXbp:dataLink := {|x| IIf( x == NIL, cVarA, cVarA := x ) } - oXbp:create( oStatic2, , { 10,170 }, { 150,20 } ) - oXbp:setData() - // Assign the value of the edit buffer to a LOCAL variable when the input focus is lost - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarA =" + cVarA } - - // Create second SLE, specify position using :new() - oXbp := WvgSLE():new( , , { 10,200 }, { 150,20 } ) - oXbp:tabStop := .T. - oXbp:bufferLength := 15 - oXbp:dataLink := {|x| IIf( x == NIL, cVarB, cVarB := x ) } - oXbp:create( oStatic2 ) - oXbp:setData() - oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarB =" + cVarB } - - // Read file into LOCAL variable - cText := MemoRead( 'gtwvg.hbc' ) - // Create MLE, specify position using :create() and - // assign data code block accessing LOCAL variable - oMLE := WvgMLE():new() - oMLE:wordWrap := .F. - oMLE:border := .t. - oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) } - oMLE:create( oStatic2, , { 180,10 }, { 310,250 } ) - // Copy text from LOCAL variable into edit buffer via :dataLink - oMLE:setData() - - //--------------------------- Misc Config ------------------------\\ - oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; - IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; - IF( oBtn:caption == 'Tools' , oStatic2:show():toFront(), nil ),; - IF( oBtn:caption == 'FontDlg', ExeFontDialogXbp( oCrt ), nil ),; - IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ),; - oPanel2:caption := "Button [ " + oBtn:caption + " ] clicked!" } - - oCrt:resize := {|| ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) } - - oCrt:sendMessage( WM_SIZE, 0, 0 ) - oCrt:show() - - DO WHILE .t. - IF inkey() == K_ESC - EXIT - ENDIF - ENDDO - - oCrt:Destroy() - - Return nil - -//----------------------------------------------------------------------// - -STATIC FUNCTION ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) - LOCAL aCrt, aTBar, aSBar - LOCAL nH, nT - - aCrt := oCrt:currentSize() - aTBar := oTBar:currentSize() - aSBar := oSBar:currentSize() - - nT := aTBar[2] - nH := aCrt[2] - aTBar[2] - aSBar[2] - - IF oStatic:isVisible - oStatic:setPosAndSize( { 0, nT+3 }, { 120, nH-4 }, .t. ) - oAddr:setPosAndSize( { 120, nT+2 }, { aCrt[1]-120-150, 20 }, .t. ) - oCom:setPosAndSize( { 120, nT+2+20 }, { aCrt[1]-120-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - - ELSE - oAddr:setPosAndSize( { 0, nT+2 }, { aCrt[1]-150, 20 }, .t. ) - oCom:setPosAndSize( { 0, nT+2+20 }, { aCrt[1]-150, nH-20 }, .t. ) - oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) - - ENDIF - - RETURN 1 - -//----------------------------------------------------------------------// - -Static Function ActiveXBuildMenuXbp( oCrt, oStatic, oStatic2 ) - Local oMenuBar, oSubMenu - - oMenuBar := WvgMenuBar():new( oCrt ):create() - - // Define submenu in procedural style. - // The numeric index of the selected menu item - // is passed to the Callback code block -> mp1 - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Procedural" - oSubMenu:addItem( { "Play Charge ~1", } ) - oSubMenu:addItem( { "Play Nannyboo ~2", } ) - oSubMenu:itemSelected := {|mp1| MyFunctionXbp( 100+mp1 ) } - oMenuBar:addItem( { oSubMenu, NIL } ) - - // Define submenu in the functional style: - // A menu item executes a code block that - // calls a function - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "~Functional" - oSubMenu:addItem( { "Play Opening ~1", {|| MyFunctionXbp( 1 ) } } ) - oSubMenu:addItem( { "Play Closing ~2", {|| MyFunctionXbp( 2 ) } } ) - oSubMenu:addItem() - oSubMenu:addItem( { "~MessageBox" , {|| MyFunctionXbp( 3 ) } } ) - oMenuBar:addItem( { oSubMenu, NIL } ) - - oSubMenu := WvgMenu():new( oMenuBar ):create() - oSubMenu:title := "F~eatures" - oSubMenu:addItem( { "~Hide or Show Left Panel" , {|| IF( oStatic:isVisible, ; - oStatic:hide(), oStatic:show() ), oCrt:sendMessage( WM_SIZE,0,0 ) } } ) - oSubMenu:addItem( { "~Show My Panel" , {|| oStatic2:show():toFront() } } ) - oSubMenu:addItem() - oSubMenu:addItem( { "~Font Dialog" , {|| ExeFontDialogXbp( oCrt ) } } ) - - oMenuBar:addItem( { oSubMenu, NIL } ) - - Return nil -//----------------------------------------------------------------------// - -STATIC FUNCTION ActiveXBuildToolBarXbp( oCrt ) - LOCAL oTBar - - oTBar := WvgToolBar():new( oCrt , , { 0,0 }, { 0,0 }, , .T. ) - - oTBar:style := WVGTOOLBAR_STYLE_FLAT - - oTBar:borderStyle := WVGFRAME_RECT - - oTBar:buttonWidth := 28 - oTBar:buttonHeight := 26 - - oTBar:imageWidth := 26 - oTBar:imageHeight := 24 - - oTBar:showToolTips := .t. - - oTBar:create() - - oTBar:addItem( "New" , hb_DirBase() + 'v_new.bmp' ) - oTBar:addItem( "Select" , hb_DirBase() + 'v_selct1.bmp' ) - oTBar:addItem( ) - oTBar:addItem( "FontDlg" , hb_DirBase() + 'v_calend.bmp' ) - oTBar:addItem( "Tools" , hb_DirBase() + 'v_lock.bmp' ) - oTBar:addItem( "Index" , hb_DirBase() + 'v_index.bmp' ) - oTBar:addItem( ) - oTBar:addItem( "Show" , hb_DirBase() + 'v_clclt.bmp' ) - oTBar:addItem( "Hide" , hb_DirBase() + 'v_notes1.bmp' ) - - RETURN oTBar - -//----------------------------------------------------------------------// - -Static Function MyFunctionXbp( nMode ) - - do case - case nMode == 1 - tone( MUSIC_WAITON[1], 1 ) - tone( MUSIC_WAITON[2], 1 ) - - case nMode == 2 - tone( MUSIC_WAITON[2], 1 ) - tone( MUSIC_WAITON[1], 1 ) - - case nMode == 3 - WVG_MessageBox( , "Button clicked!" ) - - case nMode == 101 // Charge - Eval( {|| tone(523,2),tone(698,2),tone(880,2),tone(1046,4),tone(880,2),tone(1046,8) } ) - - case nMode == 102 // NannyBoo - AEval( {{196,2},{196,2},{164,2},{220,2},{196,4},{164,4}}, {|a| tone(a[1],a[2]) } ) - - case nMode == 103 // BADKEY - tone( 480,0.25 ) - tone( 240,0.25 ) - - endcase - - Return nil - -//----------------------------------------------------------------------// - -STATIC FUNCTION ExeFontDialogXbp( oCrt ) - LOCAL oFontDlg - - STATIC nMode := 0 - - oFontDlg := WvgFontDialog():new( oCrt ) - - oFontDlg:title := 'Select a Screen Font' - oFontDlg:aPos := { 150,150 } - oFontDlg:buttonApply := .t. - oFontDlg:activateApply := {|| NIL } - oFontDlg:familyName := "Courier New" - oFontDlg:strikeout := .T. - oFontDlg:underscore := .f. - //oFontDlg:activateOk := {|| WVG_MessageBox( , 'activateOK Event Handelled in Windows!' ) } - oFontDlg:nominalPointSize := 12 - - //oFontDlg:size := .f. - //oFontDlg:style := .f. - - oFontDlg:create() - - // Every 2nd FontDialog will be MODAL - oFontDlg:display( ++nMode % 2 ) - - oFontDlg:destroy() - - RETURN nil - -//----------------------------------------------------------------------// -// ------ End Pure Xbase++ Implementation ------ -//----------------------------------------------------------------------// -// -// Simplified Console with GUI Look -// -/*----------------------------------------------------------------------*/ -PROCEDURE ExecGCUI() - - IF hb_mtvm() - Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():New( , , { 2,4 }, { 20,81 }, , .t. ) , ; - oCrt:icon := "dia_excl.ico",; - oCrt:create(), ; - GCUIConsole( oCrt ) , ; - oCrt:destroy() } ) - ENDIF - - RETURN -//----------------------------------------------------------------------// - -#xTranslate Alert( => MyAlert( - -PROCEDURE GCUIConsole( oCrt ) - LOCAL dDate := date() - LOCAL cName := pad( 'Some Usefule Name' , 35 ) - LOCAL cAdd1 := pad( 'Linda Goldman Avenue', 35 ) - LOCAL cAdd2 := pad( 'Excellent Street' , 35 ) - LOCAL cAdd3 := pad( 'Suit #415' , 35 ) - LOCAL nSlry := 9000 - LOCAL nColGet := 8 - LOCAL GetList := {} - LOCAL hBoxR, hTxt - - SET SCOREBOARD OFF - - SetColor( "N/W,N/GR*,,,N/W*" ) - CLS - hb_gtInfo( HB_GTI_WINTITLE, "WVG Simplified yet Powerful CUI-GUI Console!" ) - - @ MaxRow(), 0 SAY PadC( "Navigate the Gets", maxcol()+1 ) COLOR "W+/B" - - @ 2, nColGet SAY "< Date >" - @ 5, nColGet SAY "<" + PadC( "Name" , 33 ) + ">" - @ 8, nColGet SAY "<" + PadC( "Address", 33 ) + ">" - @ 15, nColGet SAY "< Salary >" - - @ 3, nColGet GET dDate ; - WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 1 ) ) } ; - Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,0,0 ) ), .t. } - @ 6, nColGet GET cName ; - WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 2 ) ) } ; - Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,255,0 ) ), ; - Wvg_SetGObjState( hBoxR, 3 ), .t. } - @ 9, nColGet GET cAdd1 ; - WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 3 ) ) } ; - Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,0,255 ) ), .t. } - @ 11, nColGet GET cAdd2 ; - WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 4 ) ) } ; - Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,255,255 ) ), ; - Wvg_SetGObjState( hBoxR, 1 ), .t. } - @ 13, nColGet GET cAdd3 ; - WHEN {|| Wvg_SetGObjData( hTxt, 6, RGB( 198,21,140 ) ), .t. } - @ 16, nColGet GET nSlry PICTURE "@Z 9999999.99" ; - WHEN {|| Wvg_SetGObjData( hTxt, 6, RGB( 0,0,0 ) ), .t. } - - // The only additional calls to render your console GUI - // - // The GETLIST : This can be embedded via @ GET preprocessor command - aEval( GetList, {|oGet| Wvg_BoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) - // - hBoxR := Wvg_BoxRaised( 1,2,18,49, {-5,-5,5,5} ) - // - Wvg_BoxRecessed( 1,2,18,49 ) - // - // Wvg_BoxGroup( 2,4,17,47 ) - // - Wvg_BoxGroupRaised( 2,4,17,47, {-7,-7,7,7} ) - // - hTxt := Wvg_TextBox( 3,57,16,75, {10,10,-10,-10}, 'This is first TextBox Line!', 2, 2 ) - // - Wvg_Image( 15,36,16,42, {-3,-3,3,3}, GOBJ_IMAGESOURCE_FILE, 'Vouch1.bmp' ) - Wvg_BoxRaised( 15,36,16,42,{-2,-2,2,2} ) - // - Wvg_ShadedRect( 1,54,18,79, { -5,-5,5,5 }, 0, {65000,21000,7000,56000}, {255,32255,16000,32500} ) - // - Wvg_BoxRaised( 1,54,18,79, {-5,-5,5,5} ) - - // Instruct GT to Repaint the Screen with GUI elements. - oCrt:refresh() - - // Issue the read - READ - - My_Alert( 'How did you like the "Alert" replacement?', { 'WOW','OK','OOps'} ) - - RETURN -/*----------------------------------------------------------------------*/ -#xUntranslate alert( => - -FUNCTION MyAlert( cMsg, aOpt ) - LOCAL nSel, oCrt - - oCrt := WvgCrt():New( , , { -1,-1 }, { 9, MaxCol()-6 }, , .t. ) - oCrt:lModal := .t. - oCrt:icon := "dia_excl.ico" - oCrt:create() - oCrt:resizable := .t. - - SetColor( 'N/W' ) - CLS - hb_gtInfo( HB_GTI_WINTITLE, cMsg ) - - nSel := Alert( cMsg, aOpt ) - - oCrt:destroy() - - RETURN nSel - -#xTranslate Alert( => MyAlert( -/*----------------------------------------------------------------------*/ -STATIC FUNCTION FetchText( nMode ) - LOCAL cText - - DO CASE - CASE nMode == 1 - cText := 'Do you know Harbour is gaining a popularity what Clipper enjoyed at one time! ' - cText += 'Enjoy it.' - CASE nMode == 2 - cText := 'Do you know Harbour can host pure console, cui+gui console, pure gui consoles applications? ' - cText += 'This demonstration is a proof of that.' - CASE nMode == 3 - cText := 'Do you know Harbour is a multi-gt, multi-window, multi-thread compiler far superior than others in the market! ' - cText += 'And is FREE.' - CASE nMode == 4 - cText := 'Enjoy and contribute to the project any way you can. Develop, Debug, Support, and spread a word of mouth!' - ENDCASE - - RETURN cText -/*----------------------------------------------------------------------*/ -#ifdef __QT__ -FUNCTION ExeQTWidgets() - LOCAL oPS, oPPrv, oWZ, oCD, oWP - - oPS := QPageSetupDialog():new() - oPS:setWindowTitle( 'Harbour-QT PageSetup Dialog' ) - oPS:show() - - oPPrv := QPrintPreviewDialog():new() - oPPrv:setWindowTitle( 'Harbour-QT Preview Preview Dialog' ) - oPPrv:show() - - oWZ := QWizard():new() - oWZ:setWindowTitle( 'Harbour-QT Wizard to Show Slides etc.' ) - oWZ:show() - - oCD := QColorDialog():new() - oCD:setWindowTitle( 'Harbour-QT Color Selection Dialog' ) - oCD:show() - - oWP := QWebView():new() - oWP:setWindowTitle( 'Harbour-QT Web Page Navigator' ) - oWP:show() - RETURN NIL -#endif + //----------------------------------------------------------------------// - -Function My_Alert( cMessage, aOptions, cCaption, nInit, nTime ) - RETURN Vou_AlertDialog( cCaption, cMessage, aOptions, nInit, , ,nTime ) - -#define DLG_CLR_MOUSE 1 -#define DLG_CLR_CAPT 2 -#define DLG_CLR_TEXT 3 -#define DLG_CLR_BTN 4 -#define DLG_CLR_TRG 5 -#define DLG_CLR_SHADOW 6 -#define DLG_CLR_HILITE 7 -#define DLG_CLR_HISEL 8 - -#define K_MOVING 1001 -#define K_LEFT_DOWN 1002 -#define K_LEFT_DBLCLICK 1006 -#define K_LEFT_UP 1003 -#define K_RIGHT_DOWN 1004 -#define K_RIGHT_DBLCLICK 1007 -#define K_RIGHT_UP 1005 - -#xtranslate B_CRT ,,, ; - [ TITLE ] ; - [ ICON ] ; - [ ] ; - [ ] ; - [ ] ; - [ ] ; - [ AT , ] ; - [ ] ; - INTO ; - => ; - := Vou_CreateOCrt( , , , , , , ; - <.lModal.>, <.lRowCols.>, <.lHidden.>, <.lCenter.>, ; - , , <.lNoTitleBar.> ) - - -FUNCTION Vou_AlertDialog( cCaption, aText_, aButtons_, sel, aMessage_, nTop, nTime ) - local nLinesRqd, nColRqd, nLeft, nBottom, nRight, oCrt - local nColTxt, nColCap, nColBut, nBtnRow - local i, nTopReq, lGo, nKey, nMCol, nMRow, nTrg - local maxCol := maxcol() - local maxRow := maxrow() - local nBtnCol_ - local pal_ := {"w+/n","w/r","n/w","n/bg","r/bg","N/W","n/B","w+/B"} - local aTrg_ , x_:={} - - DEFAULT cCaption TO "Your Attention Please!" - DEFAULT aButtons_ TO {"OK"} - DEFAULT aText_ TO {} - DEFAULT aMessage_ TO {} - DEFAULT sel TO 1 - DEFAULT nTime TO 10 - - if nTime == 0 - nTime := 10000 // Seconds - endif - - if valtype( aText_ ) == "C" - aText_:= {aText_} - endif - - if valtype(aButtons_) == "C" - aButtons_:= {aButtons_} - endif - - nLinesRqd := len( aText_ )+ if( len( aText_ )== 0, 4, 5 ) - nTopReq := int( ( maxRow - nLinesRqd ) / 2 ) - nTop := if( nTop == nil, nTopReq, if( nTop > nTopReq, nTop, nTopReq ) ) - nBottom := nTop + nLinesRqd - 1 // 1 for shadow - - // check for columns - // place 2 spaces before and after the buttons - nColCap := len( cCaption )+ 7 // " - "+" "+caption+" " - nColTxt := 0 - if !empty(aText_) - aeval(aText_, {|e| nColTxt := max( nColTxt, len( e ) ) } ) - endif - nColTxt += 6 // for two spaces at both sides - nColBut := 0 - aeval( aButtons_, {|e| nColBut += len( e ) + 7 } ) - nColBut += 3 - - nColRqd := 0 - aeval( { nColCap, nColTxt, nColBut }, {|e| nColRqd := max( nColRqd, e ) } ) - - nLeft := IF( maxCol > nColRqd, int( ( maxCol - nColRqd ) / 2 ), 0 ) - nRight := nLeft+nColRqd - - aTrg_:= array( len( aButtons_ ) ) - for i := 1 to len( aButtons_ ) - aTrg_[i] := upper( substr( aButtons_[ i ], 1, 1 ) ) - next - - // Create a new Window - // - B_CRT nTop, nLeft, nBottom-1, nRight MODAL ICON "dia_excl.ico" TITLE ' '+cCaption INTO oCrt - - nTop := -1 - nLeft := 0 - nBottom := nTop + nLinesRqd - 1 - nRight := nLeft + nColRqd - nBtnRow := nTop + 1 + len( aText_ ) + if( len( aText_ ) == 0, 1, 2 ) - - nBtnCol_ := array( len( aButtons_ ) ) - - nBtnCol_[ 1 ] := int( ( nColRqd - nColBut ) / 2 ) + 3 - if len( aButtons_ ) > 1 - for i := 2 to len( aButtons_ ) - nBtnCol_[ i ] := nBtnCol_[ i-1 ] + len( aButtons_[ i-1 ] ) + 3 + 4 - next - ENDIF - - setcursor( 0 ) - SetColor( 'N/W' ) - CLS - - DispBegin() - SetColor( pal_[ DLG_CLR_TEXT ] ) - - Wvg_BoxRaised( nTop, nLeft, nBottom, nRight ) - - SetColor( pal_[ DLG_CLR_TEXT ] ) - if !empty( aText_ ) - FOR i := 1 to len( aText_ ) - @ nTop+1+i, nLeft SAY padc( aText_[ i ], nRight-nLeft+1 ) - NEXT - ENDIF - - // display buttons - // - for i := 1 to len( aButtons_ ) - SetColor( pal_[ DLG_CLR_BTN ] ) - @ nBtnRow, nBtnCol_[ i ] SAY " "+aButtons_[ i ]+" " - SetColor( pal_[ DLG_CLR_TRG ] ) - @ nBtnRow, nBtnCol_[ i ]+2 say substr( aButtons_[ i ],1,1 ) - - aadd( x_, { nBtnRow, nBtnCol_[ i ], nBtnRow, nBtnCol_[ i ] + len( aButtons_[ i ] ) + 3 } ) - next - - setColor( pal_[ DLG_CLR_HILITE ] ) - @ nBtnRow, nBtnCol_[ sel ] SAY " "+aButtons_[sel]+" " - - setColor( pal_[ DLG_CLR_HISEL ] ) - @ nBtnRow, nBtnCol_[ sel ]+2 SAY substr( aButtons_[ sel ],1,1 ) - - aeval( x_, {|e_| Wvg_BoxRaised( e_[ 1 ], e_[ 2 ], e_[ 3 ], e_[ 4 ] ) } ) - - dispend() - - lGo := .t. - do while lGo - IF ( nKey := Inkey() ) == 0 - LOOP - ENDIF - - if nKey == K_ESC - sel := 0 - exit - endif - nMRow := MRow() - nMCol := MCol() - - do case - case nKey == K_RIGHT_DOWN - sel := 0 - lGo := .f. - case nKey == K_LEFT_DOWN - if nMRow == nTop - if nMCol >= nLeft .and. nMCol <= nLeft+3 - sel := 0 - lGo := .f. - endif - elseif nMRow == nBtnRow - for i := 1 to len( nBtnCol_ ) - if nMCol >= nBtnCol_[ i ] .and. nMCol <= nBtnCol_[ i ] + len( aButtons_[ i ] )+4 - sel := i - lGo := .f. - endif - next - endif - case nKey == K_ESC - sel := 0 - lGo := .f. - case nKey == K_ENTER - lGo := .f. - case nKey == K_LEFT .or. nKey == K_DOWN - sel-- - case nKey == K_RIGHT .or. nKey == K_UP - sel++ - case ( nTrg := ascan( aTrg_, upper( chr( nKey ) ) ) ) > 0 - sel := nTrg - lGo := .f. - otherwise - if setkey( nKey ) != nil - eval( setKey( nKey ) ) - endif - endcase - - if sel > len( aButtons_ ) - sel := 1 - elseif sel < 1 - sel := len( aButtons_ ) - endif - - dispbegin() - for i := 1 to len ( aButtons_ ) - setColor( pal_[ DLG_CLR_BTN ] ) - @ nBtnRow, nBtnCol_[ i ] SAY " "+aButtons_[i]+" " - setColor( pal_[ DLG_CLR_TRG]) - @ nBtnRow, nBtnCol_[i]+2 say substr(aButtons_[i],1,1) - next - if sel > 0 - setColor( pal_[ DLG_CLR_HILITE ] ) - @ nBtnRow, nBtnCol_[sel] SAY " "+aButtons_[ sel ]+" " - setColor( pal_[ DLG_CLR_HISEL ] ) - @ nBtnRow, nBtnCol_[ sel ]+2 SAY substr( aButtons_[ sel ], 1, 1 ) - endif - - dispend() - enddo - - oCrt:destroy() - - return sel - -//----------------------------------------------------------------------// - -FUNCTION Vou_CreateOCrt( nT, nL, nB, nR, cTitle, xIcon, lModal, lRowCols, lHidden, ; - lCenter, nRow, nCol, lNoTitleBar ) - LOCAL oCrt, aPos - - DEFAULT cTitle TO 'Info' - DEFAULT xIcon TO 'VW_DFT' - DEFAULT lModal TO .T. - DEFAULT lHidden TO .F. - DEFAULT lCenter TO .F. - DEFAULT lNoTitleBar TO .F. - - aPos := IF( lCenter, {-1,-1}, IF( nRow == NIL, { nT, nL }, { nRow,nCol } ) ) - - oCrt := WvgCrt():new( , , aPos, { nB - nT, nR - nL }, , !lHidden ) - oCrt:lModal := lModal - IF lRowCols - oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS - ENDIF - oCrt:create() - SetCursor( 0 ) - - IF hb_isNumeric( xIcon ) - hb_gtInfo( HB_GTI_ICONRES, xIcon ) - ELSE - IF ( '.ico' $ lower( xIcon ) ) - hb_gtInfo( HB_GTI_ICONFILE, xIcon ) - ELSE - IF '.bmp' $ lower( xIcon ) - xIcon := 'VW_DFT' - ENDIF - hb_gtInfo( HB_GTI_ICONRES, xIcon ) - ENDIF - ENDIF - - hb_gtInfo( HB_GTI_WINTITLE, cTitle ) - - SetColor( 'N/W' ) - CLS - - RETURN oCrt - -/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/gtwvg/tests/wvgactivex.prg b/harbour/contrib/gtwvg/tests/wvgactivex.prg new file mode 100644 index 0000000000..57511fb624 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgactivex.prg @@ -0,0 +1,664 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ +// The function has to be called via hb_threadStart( {|| ExecuteActiveX( nActiveX ) } ) +// +FUNCTION ExecuteActiveX( nActiveX, xParam ) + Local oCrt, oTBar, oSBar, oStatic, oCom, oXbp, oTree, oItem1, oItem2 + LOCAL oListBox, oStatic2, oDA + LOCAL oPanel, oPanel1, oPanel2 +// LOCAL cVarA := "Test A", cVarB := "Test B" +// LOCAL aState := {"not selected", "selected", "undefined"} + LOCAL aParts := {} +// LOCAL oCheck, oRadio, oMLE, cText + + HB_SYMBOL_UNUSED( xParam ) + HB_SYMBOL_UNUSED( oCom ) + + //--------------------------- Dialog -------------------------------\\ + #if 1 + oCrt := WvgDialog():new( , , { 30,30 }, { 800,600 }, , .t. ) + oCrt:closable := .t. + oCrt:create() + #else + oCrt := WvgCrt():new( , , { 5,5 }, { 30,60 }, , .t. ) + oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS + oCrt:closable := .t. + oCrt:create() + SetCursor( .f. ) + #endif + + oDA := oCrt:drawingArea + + //--------------------------- Menu --------------------------------\\ + ActiveXBuildMenu( oCrt, @oStatic, @oStatic2 ) + + //--------------------------- ToolBar -----------------------------\\ + oTBar := BuildWvgToolBar( oDA, nActiveX ) + + //--------------------------- StatusBar ---------------------------\\ + oSBar := WvgStatusBar():new( oDA ):create( , , , , , .t. ) + oSBar:panelClick := {|oPanel| WVG_MessageBox( , oPanel:caption ) } + oPanel := oSBar:getItem( 1 ) + oPanel:caption := 'My Root Panel' + oPanel1 := oSBar:addItem() + oPanel1:caption := 'Ready' + oPanel2 := oSBar:addItem() + oPanel2:caption := 'Click on any part!' + + //--------------------------- Static ------------------------------\\ + oStatic := WvgStatic():new( oDA ) + oStatic:type := WVGSTATIC_TYPE_TEXT + oStatic:options := WVGSTATIC_TEXT_CENTER + oStatic:caption := chr(13)+'Implemented Xbase++ Parts' + oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; + oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) + oStatic:setColorBG( RGB( 198,198,198 ) ) + +#if 0 // panel + //--------------------------- Static + Radio + Checkbox ----------\\ + oStatic2:= WvgStatic():New( oCrt, , { 150, 150 }, { 500,310 }, , .f. ) + //oStatic2:type := WVGSTATIC_TYPE_RAISEDBOX //BGNDFRAME + oStatic2:exStyle += WS_EX_WINDOWEDGE + //oStatic2:options := WVGSTATIC_FRAMETHICK + oStatic2:create() + //oStatic2:setColorBG( RGB( 198,198,198 ) ) + + oXbp := WvgPushButton():new( oStatic2 ) + oXbp:caption := "Hide" + oXbp:create( , , { 430,275 }, { 60,25 } ) + oXbp:activate := {|| oStatic2:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } + + oRadio := WvgRadioButton():new( oStatic2,, { 10,10 }, { 100,15 } ) + oRadio:caption := "Com 1" + oRadio:selection := .T. + oRadio:selected := {|m1,m2,obj| m1:=m1, m2:=m2, WVG_MessageBox( , obj:caption + IF( obj:selection, '< S >', '< N >' ) ) } + oRadio:create() + + oRadio := WvgRadioButton():new( oStatic2,, { 10,35 }, { 100,15 } ) + oRadio:caption := "Com 2" + oRadio:create() + + oCheck := WvgCheckBox():New( oStatic2, , { 10,70 }, { 100,15 }, , .t. ) + oCheck:caption := 'Checkbox A' + oCheck:create() + oCheck:selected := {|m1,m2,o| m1:=m1,m2:=m2, WVG_MessageBox( , IF( o:getData(), 'I am selected','I am not selected' ) ) } + + // Create first 3State button, passing the position to :create() + oXbp := Wvg3State():new( oStatic2 ) + oXbp:caption := "3 State A" + oXbp:create( , , { 10,100 }, { 100,15 } ) + // Determine current state using mp1 + oXbp:selected := {| m1,m2,oBtn | m2:=m2, oBtn:=oBtn, oPanel1:caption := "3State A ["+aState[ m1+1 ]+"]" } + + // Create second 3State Button, passing the position to :new() + oXbp := Wvg3State():new( oStatic2, , { 10,125 }, { 100,15 } ) + oXbp:caption := "3 State B" + oXbp:create( oStatic2 ) + // Determine current state using :getData() + oXbp:selected := {| m1,m2,oBtn | m1:=m1,m2:=m2, WVG_MessageBox( , "3State B", aState[ oBtn:getData()+1 ] ) } + + // Create first SLE, specify position using :create() + // On :typeOut set the focus to the second SLE + oXbp := WvgSLE():new( oStatic2 ) + oXbp:autoTab := .T. + oXbp:bufferLength := 20 + // Data code block containing assignment to LOCAL variable + oXbp:dataLink := {|x| IIf( x == NIL, cVarA, cVarA := x ) } + oXbp:create( , , { 10,170 }, { 150,20 } ) + oXbp:setData() + // Assign the value of the edit buffer to a LOCAL variable when the input focus is lost + oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarA =" + cVarA } + + // Create second SLE, specify position using :new() + oXbp := WvgSLE():new( oStatic2, , { 10,200 }, { 150,20 } ) + oXbp:tabStop := .T. + oXbp:bufferLength := 15 + oXbp:dataLink := {|x| IIf( x == NIL, cVarB, cVarB := x ) } + oXbp:create( ) + oXbp:setData() + oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarB =" + cVarB } + + // Read file into LOCAL variable + cText := MemoRead( 'hbmk_b32.bat' ) + // Create MLE, specify position using :create() and + // assign data code block accessing LOCAL variable + oMLE := WvgMLE():new( oStatic2 ) + oMLE:wordWrap := .F. + oMLE:border := .t. + oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) } + oMLE:create( oStatic2, , { 180,10 }, { 310,250 } ) + // Copy text from LOCAL variable into edit buffer via :dataLink + oMLE:setData() +#endif + + //--------------------------- ListBox -----------------------------\\ + oListBox := WvgListBox():new() + oListBox:create( oStatic, , { 5, 55 }, { 107, 380 } ) + + oListBox:setColorFG( RGB( 218,61,34 ) ) + + aadd( aParts, 'XbpDialog' ) + aadd( aParts, 'XbpMenuBar' ) + aadd( aParts, 'XbpToolBar' ) + aadd( aParts, 'XbpStatusBar' ) + aadd( aParts, 'XbpStatic' ) + aadd( aParts, 'XbpTreeView' ) + aadd( aParts, 'XbpActiveX' ) + aadd( aParts, 'XbpListBox' ) + aadd( aParts, 'XbpPushButton' ) + aadd( aParts, 'XbpCheckBox' ) + aadd( aParts, 'XbpRadioButton') + aadd( aParts, 'Xbp3State' ) + aadd( aParts, 'XbpSLE' ) + aadd( aParts, 'XbpMLE' ) + aadd( aParts, 'DataRef' ) + + aeval( aParts, {|e| oListBox:addItem( e ) } ) + oListBox:itemSelected := {|| WVG_MessageBox( , oListBox:getCurItem() ) } + oListBox:setData( 3 ) + + //--------------------------- PushButton --------------------------\\ + oXbp := WvgPushButton():new( oStatic ) + oXbp:caption := "Hide" + oXbp:create( , , { 20,440 }, {80,30} ) + oXbp:activate:= {|| oStatic:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } + + //--------------------------- TreeView ---------------------------\\ + oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; + { 160, oCrt:currentSize()[2]-; + oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) + oTree:hasLines := .T. + oTree:hasButtons := .T. + oTree:alwaysShowSelection := .T. + oTree:create() + oTree:setColorBG( RGB( 120,15,240 ) ) + oTree:setColorFG( RGB( 15,240,120 ) ) + oTree:itemSelected := {|oItem| IF( oItem <> NIL, WVG_MessageBox( , oItem:caption ), NIL ) } + + oItem1 := oTree:rootItem:addItem( "First level A" ) + + oTree:rootItem:addItem( "First level B" ) + + oItem2 := oItem1:addItem( "Second level A" ) + oItem1:addItem( "Second level B" ) + + oItem2:addItem( "Third level A" ) + oItem2:addItem( "Third level B" ) + oItem2:addItem( "Third level C" ) + + #if 0 + oItem1:expand( .t. ) + #else + oTree:showExpanded( .t., 2 ) + #endif + + oTree:setData( oItem2 ) + + //--------------------------- Misc Config ------------------------\\ + oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; + IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; + IF( oBtn:caption == 'Tools', oStatic2:show():toFront(), nil ),; + IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ),; + oPanel2:caption := "Button [ " + oBtn:caption + " ] clicked!" } + oDA:resize := {|| ResizeDialog( oCrt, oTBar, oSBar, oStatic, oCom, oTree ) } + + #if 1 + //--------------------------- Active-X ---------------------------\\ + oCom := BuildActiveXControl( nActiveX, oDA ) + if hb_isObject( oCom ) + oCrt:sendMessage( WM_SIZE, 0, 0 ) + oCrt:show() + ExeActiveX( nActiveX, oCom, xParam ) + ENDIF + #else + oCrt:show() + DO WHILE .t. + IF inkey() == K_ESC + EXIT + ENDIF + ENDDO + #endif + + oCrt:Destroy() + Return NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION ResizeDialog( oCrt, oTBar, oSBar, oStatic, oCom, oTree ) + LOCAL aCrt, aTBar, aSBar + LOCAL nH, nT +// LOCAL aStatic, aCom, aTree + + aCrt := oCrt:currentSize() + aTBar := oTBar:currentSize() + aSBar := oSBar:currentSize() +// aStatic := oStatic:currentSize() +// aTree := oTree:currentSize() +// aCom := oCom:currentSize() + + nT := aTBar[2] + nH := aCrt[2]-aTBar[2]-aSBar[2] + + IF oStatic:isVisible + oStatic:setPosAndSize( { 0, nT+3 }, { 120, nH-4 }, .t. ) + oCom:setPosAndSize( { 120, nT }, { aCrt[1]-120-150, nH }, .t. ) + oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) + ELSE + oCom:setPosAndSize( { 0, nT }, { aCrt[1]-150, nH }, .t. ) + oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) + ENDIF + + RETURN 1 + +//----------------------------------------------------------------------// + +Static Function ActiveXBuildMenu( oCrt, oStatic, oStatic2 ) + Local oMenuBar, oSubMenu + + oMenuBar := WvgMenuBar():new( oCrt ):create() + + // Define submenu in procedural style. + // The numeric index of the selected menu item + // is passed to the Callback code block -> mp1 + + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "~Procedural" + oSubMenu:addItem( { "Play Charge ~1", } ) + oSubMenu:addItem( { "Play Nannyboo ~2", } ) + oSubMenu:itemSelected := {|mp1| MyFunction( 100+mp1 ) } + oMenuBar:addItem( { oSubMenu, NIL } ) + + // Define submenu in the functional style: + // A menu item executes a code block that + // calls a function + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "~Functional" + oSubMenu:addItem( { "Play Opening ~1", {|| MyFunction( 1 ) } } ) + oSubMenu:addItem( { "Play Closing ~2", {|| MyFunction( 2 ) } } ) + oSubMenu:addItem() + oSubMenu:addItem( { "~MessageBox" , {|| MyFunction( 3 ) } } ) + oMenuBar:addItem( { oSubMenu, NIL } ) + + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "F~eatures" + oSubMenu:addItem( { "~Hide or Show Left Panel" , {|| IF( oStatic:isVisible, ; + oStatic:hide(), oStatic:show() ), oCrt:sendMessage( WM_SIZE,0,0 ) } } ) + oSubMenu:addItem( { "~Show My Panel" , {|| oStatic2:show() } } ) + oMenuBar:addItem( { oSubMenu, NIL } ) + + Return NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION BuildActiveXControl( nActiveX, oDA ) + LOCAL oCom + + DEFAULT nActiveX TO 2 + + oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) + + do case + case nActiveX == 1 + hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'http://www.harbour.vouch.info'+' ]' ) + oCom:CLSID := 'Shell.Explorer.2' + oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) + oCom:mapEvent( 105, {|| WAPI_OutputDebugString( ' E X P L O R E R - 105' ) } ) + + case nActiveX == 11 + hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'MSHTML Demo'+' ]' ) + oCom:CLSID := "MSHTML:" + "

Stream Test

This HTML content is being loaded from a stream." + oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) + + case nActiveX == 2 + #define evClick 1 + #define evDblClk 2 + #define evBtnDown 3 + #define evMouseMove 4 + #define evBtnUp 5 + + hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' ) + oCom:CLSID := 'AnalogClockControl.AnalogClock' + oCom:Id := 5 + + oCom:mapEvent( evDblClk, {|| oCom:Value := seconds()/86400 ,; + oCom:BackColor := RGB( 0,140,210 ),; + oCom:Refresh() ,; + oCom:ShowSecondsHand := .t. ,; + oCom:Hands3D := .t. ,; + oCom:Refresh() ,; + oCom:showAboutBox() ; + } ) + + oCom:mapEvent( evBtnUp, {|nBtn| if( nBtn == 2, oCom:oParent:sendMessage( WM_CLOSE,0,0 ), NIL ) } ) + + case nActiveX == 3 + hb_gtInfo( HB_GTI_WINTITLE, 'file://' + hb_DirBase() + 'myharu.pdf' ) + oCom:CLSID := 'file://' + hb_DirBase() + 'myharu.pdf' + oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) + + case nActiveX == 4 + hb_gtInfo( HB_GTI_WINTITLE, 'RM Chart [ Attributes Next Charts ]' ) + oCom:CLSID := 'RMChart.RMChartX' + + // RMChart does not have event interface. + // Trying to set it generates GPF. + // Please download RMChart.ocx from http://www.rmchart.com/ . It is free in everysense. + + case nActiveX == 5 + hb_gtInfo( HB_GTI_WINTITLE, 'Image Viewer' ) + oCom:CLSID := 'SCRIBBLE.ScribbleCtrl.1' + + endcase + + oCom:create() + + RETURN oCom + +//----------------------------------------------------------------------// + +STATIC FUNCTION ExeActiveX( nActiveX, oCom, xParam ) + Local nKey, sData + + static nTurn := 0 + + // After :CREATE() Messages + // + if nActiveX == 1 + oCom:AddressBar := .t. + hb_gtInfo( HB_GTI_WINTITLE, IIF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) ) + oCom:Navigate( IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) ) + + elseif nActiveX == 4 + ConfigureRMChart( oCom ) + oCom:Draw( .t. ) + oCom:Draw2Clipboard() + + elseif nActiveX == 5 + oCom:loadMultiPage( hb_DirBase() + 'myharu.pdf', 2 ) + oCom:addGradientBorder( 10, RGB( 12,20,233 ), RGB( 100,255,20 ), 0 ) + oCom:drawText( 10,10,'Vouch' ) + //oCom:emboss( 3,0 ) + oCom:copy2ClipBoard() + oCom:view := 11 + oCom:setBackGroundColor( rgb( 225,225,225 ) ) + //oCom:rotate90() + + endif + + do while .t. + nKey := inkey() + + IF nActiveX == 2 + oCom:Value := seconds()/86400 + ENDIF + + if nKey == K_F12 + if nActiveX == 1 + oCom:Navigate( 'www.vouch.info' ) + + elseif nActiveX == 11 + //oCom:document( 0 ):InnerHTML := "

Stream Test

This HTML content in a document." + + elseif nActiveX == 4 + oCom:RMCBackColor := 23456142 + oCom:RMCStyle := 2 + oCom:RMCUserWatermark := 'Vouch' + + oCom:Region(1):SetProperties( 5.0,5.0,-5.0,-5.0 ) + + oCom:Draw( .t. ) + endif + + elseif nKey == K_F11 + if nActiveX == 4 + nTurn++ + if nTurn > 6 + nTurn := 1 + endif + sData := NIL + sData := '' + + do case + case nTurn == 1 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] ' + 'Stacked Bars' ) + //SetMode( 30,100 ) + + sData += "00003600|00004450|000051|000061|000073|00008-6972|00009412|00011Tahoma|100011|10" + sData += "0035|1000410|10005-5|10006-5|1000911|100101|100111|100181|100200|1002150000|1002" + sData += "211|100238|100331|100341|100356|100378|100411|100468|100484|100494|10051-6972|10" + sData += "052-16777216|10053-1828|100541|100558|10056-16777216|10057-16777216|10060-167772" + sData += "16|10061-16777216|1006315|10064-32|100652|10066-16776961|10180this is the footer" + sData += "|10181Example of stacked bars|10182Apples*Pears*Cherries*Strawberries|10183 $|10" + sData += "184This is an optional axis text, sized 9 points and bold\9b|10187Label Nr. 1*La" + sData += "bel Nr. 2*Label Nr. 3*Label Nr. 4*Label Nr. 5*Label Nr. 6|10196This is an option" + sData += "al label axis text|110011|110023|110033|110045|110055|11006-1|1100923|110131|110" + sData += "14-1|110171|11019-16777077|1102111|110221|110236|1105310000*10000*16000*12000*20" + sData += "000*10000|120011|120023|120033|120045|120055|12006-1|1200927|120131|12014-1|1201" + sData += "71|12019-16751616|1202111|120221|120236|120535000*7000*4000*15000*10000*10000|13" + sData += "0011|130023|130033|130045|130055|13006-1|1300982|130131|13014-1|130171|13019-838" + sData += "8608|1302111|130221|130236|1305310000*3000*12000*10000*5000*20000|140011|140023|" + sData += "140033|140045|140055|14006-1|1400925|140131|14014-1|140171|14019-4684277|1402111" + sData += "|140221|140236|140535000*9000*12000*6000*10000*5000" + + case nTurn == 2 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Floating Bars' ) + //SetMode( 20,90 ) + + sData += "00003550|00004300|000051|000073|00008-2894893|00009412|00011Tahoma|100011|100035" + sData += "|100045|10005-5|10006-5|1000911|100101|100111|100131|100181|100201|1002113|10022" + sData += "13|100238|100331|100341|100356|100378|100411|100468|100482|10052-16777216|10053-" + sData += "1120086|100544|100555|10056-16777216|10057-16777216|10060-16777216|10061-1677721" + sData += "6|1006316|10064-5383962|100652|10066-16777011|10181Birth of a Killer App|10182Sc" + sData += "hedule*Reality|10187Design*Development*Testing*Bug Fixing*Documentation*Marketin" + sData += "g|1020104/01*04/02*04/03*04/04*04/05*04/06*04/07*04/08*04/09*04/10*04/11*04/12*0" + sData += "5/01|110011|110026|110044|110101|110131|11019-6751336|1102111|110221|1102312|110" + sData += "531*3*4*6*6*4*7*4*9*3*10*3|120011|120026|120044|120101|120132|12019-47872|120211" + sData += "1|120221|1202312|120531*.5*1.5*10.5*12*1*12*1*12.5*.5*2*11" + + case nTurn == 3 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Four Regions' ) + //SetMode( 40,120 ) + + sData += "00003700|00004500|000054|000061|000071|00008-984833|00009412|00011Tahoma|100011|" + sData += "100032|100042|10005348|10006248|1000910|100101|100111|100181|100200|10021100|100" + sData += "2211|100238|100331|100341|100355|100378|100481|100491|10051-984833|10052-1677721" + sData += "6|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-16777216|10061-" + sData += "16777216|10187Label 1*Label 2*Label 3*Label 4*Label 5|110011|110021|110031|11004" + sData += "6|110056|11006-1|110091|110131|11014-1|110171|1102111|110221|110235|1105330*40*7" + sData += "0*60*20|200011|20003352|200042|20005-2|20006248|2000910|200101|200111|200181|200" + sData += "200|20021100|2002211|200238|200331|200341|200355|200378|200484|200491|20051-9848" + sData += "33|20052-16777216|20053-657956|200544|200555|20056-16777216|20057-16777216|20060" + sData += "-16777216|20061-16777216|20187Label 1*Label 2*Label 3*Label 4*Label 5|210011|210" + sData += "023|210033|210045|210055|21006-1|210091|210101|210131|21014-1|210171|2102111|210" + sData += "221|210235|2105320*10*15*25*30|220011|220023|220033|220045|220055|22006-1|220091" + sData += "|220101|220131|22014-1|220171|2202111|220221|220235|2205325*30*10*20*15|230011|2" + sData += "30023|230033|230045|230055|23006-1|230091|230101|230131|23014-1|230171|2302111|2" + sData += "30221|230235|2305310*20*40*20*30|240011|240023|240033|240045|240055|24006-1|2400" + sData += "91|240101|240131|24014-1|240171|2402111|240221|240235|2405340*30*20*30*20|300011" + sData += "|300032|30004252|30005348|30006-2|3000910|300101|300181|300481|300491|30051-9848" + sData += "33|30052-16777216|30053-657956|310011|3100251|310031|3100454|310054|310071|31009" + sData += "1|310121|310151|310161|310171|310182|310211|310221|310235|3105330*50*20*40*60|40" + sData += "0011|40003352|40004252|40005-2|40006-2|4000910|400101|400111|400131|400181|40020" + sData += "100|40021250|4002211|400238|400281|400292|400300|400310|400322|400331|400341|400" + sData += "3510|400378|400482|400492|40051-984833|40052-16777216|40053-984833|400541|400558" + sData += "|40056-16776961|40057-16777216|400592|40060-16777216|40061-16777216|40183$ |4018" + sData += "5 %|410011|410021|410031|410043|410053|41006-1|4100950|410131|41014-1|410171|410" + sData += "19-10496|4102111|410221|4102310|41053240*230*220*180*170*160*145*130*125*115|420" + sData += "011|4200221|420035|4200422|420052|420061|420071|4200963|420111|420121|420131|420" + sData += "171|42019-16744448|4202115|420221|4202310|420261|420538.1*6.2*4.3*2.2*1.2*3.1*5." + sData += "2*11.4*7.3*4.2" + + case nTurn == 4 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'10 Biggest Companies' ) + //SetMode( 25,90 ) + + sData += "00003670|00004450|000051|000061|000071|00008-10185235|00009412|00011Tahoma|10001" + sData += "1|100035|1000410|10005-5|10006-5|1000912|100101|100111|100131|100181|10020100000" + sData += "|10021250000|1002211|100239|100281|100292|100300|100310|100322|100331|100341|100" + sData += "3510|100378|100482|100492|10051-32944|10052-1296|10053-983041|100541|100558|1005" + sData += "6-1828|10057-16777216|100592|10060-1828|10061-16777216|10180data source: F.A.Z|1" + sData += "0181The world's 10 biggest industrial companies 2003|10183$ |10184Total turnover" + sData += " in Mill. Dollar|10185 %|10186Net operating margin|10187Exxon Mobil*Royal Dutch " + sData += "/ Shell*BP*General Motors*Daimler Chrysler*Ford Motor*Toyota Motor*General Elect" + sData += "ric*TOTAL*Chevron Texaco|110011|110021|110031|110043|110053|11006-1|1100950|1101" + sData += "31|11014-1|110171|11019-10496|1102111|110221|1102310|11053242365*235598*232571*1" + sData += "85524*170457*164196*149321*132797*130067*119703|120011|1200221|120035|1200422|12" + sData += "0052|120061|120071|1200970|120111|120121|120131|1201421|120171|12019-16744448|12" + sData += "02115|120221|1202310|120261|120538.9*4.1*4.4*2.1*.3*.3*5.9*11.3*6.7*6" + + case nTurn == 5 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Grouped Bars' ) + //SetMode( 25,80 ) + + sData += "00003600|00004450|000051|000061|000075|00008-2|00009412|00010paper.jpg|00011Taho" + sData += "ma|100011|100035|100045|10005-5|10006-5|1000910|100101|100111|100181|100200|1002" + sData += "1100|1002211|100238|100331|100341|100355|100378|100468|100484|10053-2|100541|100" + sData += "558|100631|100651|10182First quarter*Second quarter*Third quarter*Fourth quarter" + sData += "|101872000*2001*2002*2003*2004|110011|110022|110044|110131|1102111|110221|110235" + sData += "|1105330*20*40*60*10|120011|120022|120044|120131|1202111|120221|120235|1205330*2" + sData += "0*50*70*60|130011|130022|130044|130131|1302111|130221|130235|1305340*10*30*20*80" + sData += "|140011|140022|140044|140131|1402111|140221|140235|1405370*50*80*40*30" + + case nTurn == 6 + hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Flow Chart' ) + //SetMode( 30,50 ) + + sData += "00003305|00004400|000051|00008-984833|00009412|00011Tahoma|100011|100035|100045|" + sData += "10005-5|10006-5|10180\7C|010011|010051|010072|010081|0101050|0101125|01012100|01" + sData += "01325|01014-5952982|01015-5952982|01016255|010191|0102010|01026Start|01030-256|0" + sData += "10012|010054|0100721|01014-16776961|010222|01024100*100|0102550*75|01026|010272|" + sData += "010293|010013|010051|010071|010081|0101050|0101175|01012100|0101325|01014-669788" + sData += "2|01015-6697882|01016255|010191|0102010|01026i = 1|01030-16777216|010014|010054|" + sData += "0100721|01014-16776961|010222|01024100*100|01025100*150|01026|010272|010293|0100" + sData += "15|010051|010073|010081|0101050|01011150|01012100|0101350|01014-65536|01015-6553" + sData += "6|01016255|010191|0102010|01026i = 39?|01030-256|010016|010054|0100721|01014-167" + sData += "76961|010222|01024100*100|01025200*225|01026|010272|010293|010017|010051|010071|" + sData += "010081|0101050|01011225|01012100|0101325|01014-6697882|01015-6697882|01016255|01" + sData += "0191|0102010|01026i = i + 1|01030-16777216|010018|010054|0100721|01014-16776961" + sData += "|010222|01024100*100|01025250*275|01026|010272|010293|010019|010051|010073|01008" + sData += "1|0101050|01011275|01012100|0101350|01014-65536|01015-65536|01016255|010191|0102" + sData += "010|01026i <= 100|01030-256|0100110|010054|0100721|01014-16776961|010222|0102410" + sData += "0*100|01025325*350|01026|010272|010293|0100111|010051|010072|010081|0101050|0101" + sData += "1350|01012100|0101325|01014-5952982|01015-5952982|01016255|010191|0102010|01026S" + sData += "top|01030-256|0100113|010054|0100721|01014-16776961|010222|01024150*200|01025175" + sData += "*175|01026|010272|010293|0100114|010051|010081|01010145|01011157|0101250|01014-1" + sData += "6776961|01015-5383962|01016255|010191|0102010|01026yes|01030-16777216|0100115|01" + sData += "0051|010071|010081|01010200|01011162|01012100|0101325|01014-6697882|01015-669788" + sData += "2|01016255|010191|0102010|01026i = 69|01030-16777216|0100116|010054|0100721|0101" + sData += "4-16776961|010224|0102450*10*10*100|01025300*300*125*125|01026|010272|010293|010" + sData += "0117|010054|0100721|01014-16776961|010223|01024250*250*100|01025162*125*125|0102" + sData += "6|010272|010293|0100118|010051|010081|01010100|01011200|0101250|0101325|01014-16" + sData += "776961|01016255|010191|0102010|01026no|01030-16777216|0100119|010051|010081|0101" + sData += "010|01011280|0101240|01014-16776961|01016255|010191|0102010|01026yes|01030-16777" + sData += "216|0100120|010051|010081|01010100|01011322|0101250|01014-16776961|01016255|0101" + sData += "91|0102010|01026no|01030-16777216|0100120|010051|010079|01010180|01011280|010121" + sData += "20|01013100|01015-39322|010191|010209|01026RMChart is not a flowchart tool. This" + sData += " is just an example for the use of CustomObjects!|01030-256" + + endcase + + oCom:Reset() + oCom:RMCFile := sData + oCom:Draw( .t. ) + endif + + endif + + if nKey == K_ESC + exit + endif + enddo + + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION ConfigureRMChart( RMChart ) + + #define RMC_CTRLSTYLEFLAT 0 + #define RMC_PIE_GRADIENT 52 + #define RMC_FULL 1 + #define RMC_EXPLODE_NONE 0 + #define RMC_VLABEL_ABSOLUTE 6 + #define RMC_HATCHBRUSH_OFF 0 + + /* The code pulled from freewin sources */ + WITH OBJECT RMChart + :Font := "Tahoma" + :RMCStyle := RMC_CTRLSTYLEFLAT + + :AddRegion() + WITH OBJECT :Region( 1 ) + :Footer = "http://vouch.info" + + :AddCaption() + WITH OBJECT :Caption() + :Titel := "GTWVG Active-X Demo" + :FontSize := 10 + :Bold := .T. + END + + :AddGridlessSeries() + + WITH OBJECT :GridLessSeries + :SeriesStyle := RMC_PIE_GRADIENT + :Alignment := RMC_FULL + :Explodemode := RMC_EXPLODE_NONE + :Lucent := .F. + :ValueLabelOn := RMC_VLABEL_ABSOLUTE + :HatchMode := RMC_HATCHBRUSH_OFF + :StartAngle := 0 + :DataString := "10*5*20*25" + END + END + END + + RETURN NIL +//----------------------------------------------------------------------// + +STATIC FUNCTION MyFunction( nMode ) + + #define MUSIC_WAITON {800, 1600} + + do case + case nMode == 1 + tone( MUSIC_WAITON[1], 1 ) + tone( MUSIC_WAITON[2], 1 ) + + case nMode == 2 + tone( MUSIC_WAITON[2], 1 ) + tone( MUSIC_WAITON[1], 1 ) + + case nMode == 3 + WVG_MessageBox( , "Button clicked!" ) + + case nMode == 101 // Charge + Eval( {|| tone(523,2),tone(698,2),tone(880,2),tone(1046,4),tone(880,2),tone(1046,8) } ) + + case nMode == 102 // NannyBoo + AEval( {{196,2},{196,2},{164,2},{220,2},{196,4},{164,4}}, {|a| tone(a[1],a[2]) } ) + + case nMode == 103 // BADKEY + tone( 480,0.25 ) + tone( 240,0.25 ) + + endcase + + RETURN NIL + +//----------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgcuigdialog.prg b/harbour/contrib/gtwvg/tests/wvgcuigdialog.prg new file mode 100644 index 0000000000..4777764f87 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgcuigdialog.prg @@ -0,0 +1,136 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ + +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ +// +// Simplified Console with GUI Look +// +/*----------------------------------------------------------------------*/ + +PROCEDURE ExecGCUI() + + IF hb_mtvm() + Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():New( , , { 2,4 }, { 20,81 }, , .t. ) , ; + oCrt:icon := "dia_excl.ico",; + oCrt:create(), ; + GCUIConsole( oCrt ) , ; + oCrt:destroy() } ) + ENDIF + RETURN + +//----------------------------------------------------------------------// + +#xTranslate Alert( => MyAlert( + +PROCEDURE GCUIConsole( oCrt ) + LOCAL dDate := date() + LOCAL cName := pad( 'Some Usefule Name' , 35 ) + LOCAL cAdd1 := pad( 'Linda Goldman Avenue', 35 ) + LOCAL cAdd2 := pad( 'Excellent Street' , 35 ) + LOCAL cAdd3 := pad( 'Suit #415' , 35 ) + LOCAL nSlry := 9000 + LOCAL nColGet := 8 + LOCAL GetList := {} + LOCAL hBoxR, hTxt + + SET SCOREBOARD OFF + + SetColor( "N/W,N/GR*,,,N/W*" ) + CLS + hb_gtInfo( HB_GTI_WINTITLE, "WVG Simplified yet Powerful CUI-GUI Console!" ) + + @ MaxRow(), 0 SAY PadC( "Navigate the Gets", maxcol()+1 ) COLOR "W+/B" + + @ 2, nColGet SAY "< Date >" + @ 5, nColGet SAY "<" + PadC( "Name" , 33 ) + ">" + @ 8, nColGet SAY "<" + PadC( "Address", 33 ) + ">" + @ 15, nColGet SAY "< Salary >" + + @ 3, nColGet GET dDate ; + WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 1 ) ) } ; + Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,0,0 ) ), .t. } + @ 6, nColGet GET cName ; + WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 2 ) ) } ; + Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,255,0 ) ), ; + Wvg_SetGObjState( hBoxR, 3 ), .t. } + @ 9, nColGet GET cAdd1 ; + WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 3 ) ) } ; + Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,0,255 ) ), .t. } + @ 11, nColGet GET cAdd2 ; + WHEN {|| Wvg_SetGObjData( hTxt, 1, FetchText( 4 ) ) } ; + Valid {|| Wvg_SetGObjData( hTxt, 6, RGB( 255,255,255 ) ), ; + Wvg_SetGObjState( hBoxR, 1 ), .t. } + @ 13, nColGet GET cAdd3 ; + WHEN {|| Wvg_SetGObjData( hTxt, 6, RGB( 198,21,140 ) ), .t. } + @ 16, nColGet GET nSlry PICTURE "@Z 9999999.99" ; + WHEN {|| Wvg_SetGObjData( hTxt, 6, RGB( 0,0,0 ) ), .t. } + + // The only additional calls to render your console GUI + // + // The GETLIST : This can be embedded via @ GET preprocessor command + aEval( GetList, {|oGet| Wvg_BoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) + // + hBoxR := Wvg_BoxRaised( 1,2,18,49, {-5,-5,5,5} ) + // + Wvg_BoxRecessed( 1,2,18,49 ) + // + // Wvg_BoxGroup( 2,4,17,47 ) + // + Wvg_BoxGroupRaised( 2,4,17,47, {-7,-7,7,7} ) + // + hTxt := Wvg_TextBox( 3,57,16,75, {10,10,-10,-10}, 'This is first TextBox Line!', 2, 2 ) + // + Wvg_Image( 15,36,16,42, {-3,-3,3,3}, GOBJ_IMAGESOURCE_FILE, 'Vouch1.bmp' ) + Wvg_BoxRaised( 15,36,16,42,{-2,-2,2,2} ) + // + Wvg_ShadedRect( 1,54,18,79, { -5,-5,5,5 }, 0, {65000,21000,7000,56000}, {255,32255,16000,32500} ) + // + Wvg_BoxRaised( 1,54,18,79, {-5,-5,5,5} ) + + // Instruct GT to Repaint the Screen with GUI elements. + oCrt:refresh() + + // Issue the read + READ + +// Alert( 'How did you like the "Alert" replacement?', { 'WOW','OK','OOps'} ) + My_Alert( 'How did you like the "Alert" replacement?', { 'WOW','OK','OOps'} ) + + RETURN + +/*----------------------------------------------------------------------*/ + +STATIC FUNCTION FetchText( nMode ) + LOCAL cText + + DO CASE + CASE nMode == 1 + cText := 'Do you know Harbour is gaining a popularity what Clipper enjoyed at one time! ' + cText += 'Enjoy it.' + CASE nMode == 2 + cText := 'Do you know Harbour can host pure console, cui+gui console, pure gui consoles applications? ' + cText += 'This demonstration is a proof of that.' + CASE nMode == 3 + cText := 'Do you know Harbour is a multi-gt, multi-window, multi-thread compiler far superior than others in the market! ' + cText += 'And is FREE.' + CASE nMode == 4 + cText := 'Enjoy and contribute to the project any way you can. Develop, Debug, Support, and spread a word of mouth!' + ENDCASE + + RETURN cText + +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/gtwvg/tests/wvgdyndialogs.prg b/harbour/contrib/gtwvg/tests/wvgdyndialogs.prg new file mode 100644 index 0000000000..5ed418e1e9 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgdyndialogs.prg @@ -0,0 +1,371 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ + +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#define ID_BTN_OK 1 +#define ID_MLE 10 +#define ID_CHK_SATIS 11 +#define ID_EDT_TIME 51 +#define ID_LST_LIST 13 +#define ID_CMB_COMBO 31 +#define ID_RDO_XH 21 +#define ID_RDO_CLIP 22 +#define ID_RDO_XBASE 23 +#define ID_EDT_TEXT 14 +#define ID_EDT_NUMB 15 +#define ID_STA_TEXT 71 +#define ID_STA_IMAGE 72 +#define ID_ICO_VOUCH 81 + +#define ID_GRP_COMP 113 + +#define ID_MNU_FILE 201 +#define ID_MNU_CONTROL 202 + +/*----------------------------------------------------------------------*/ + +#define CRLF chr( 13 )+chr( 10 ) + +/*----------------------------------------------------------------------*/ + +thread static t_aSlides := {} + +/*----------------------------------------------------------------------*/ + +FUNCTION DynWinDialog( nInfo ) + Local hDlg, aDlg, nStyle, cDlgIcon, cDlgProc, lOnTop, hMenu +// Local bDlgProc +// Local nTimerTicks + + nStyle := DS_SETFONT + WS_VISIBLE + WS_POPUP + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + + aDlg := Wvt_MakeDlgTemplate( 1, 4, 21, 60, {0,0,0,0}, ; + "Dialog First [ " + ltrim( str( nInfo,10,0 ) ) + " ] "+; + iif( nInfo%2==0, "Modeless", "Modal" )," Dialog !", nStyle ) + + // Multi line edit control + // + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOVSCROLL + ES_MULTILINE + ; + ES_WANTRETURN + WS_BORDER + WS_VSCROLL + aDlg := Wvt_AddDlgItem( aDlg, 1, 2, 15, 35, {}, ID_MLE , "EDIT" , nStyle, /* cText, nHelpId, nExStyle */ ) + + // Two Horz and Vert Lines + // + nStyle := WS_CHILD + WS_VISIBLE + SS_ETCHEDVERT + aDlg := Wvt_AddDlgItem( aDlg, 1, 39, 16, 1, {}, 111 , "STATIC" , nStyle ) + nStyle := WS_CHILD + WS_VISIBLE + SS_ETCHEDHORZ + aDlg := Wvt_AddDlgItem( aDlg, 17, 2, 1, 56, {}, 112 , "STATIC" , nStyle ) + + // Icon + nStyle := WS_CHILD + WS_VISIBLE + SS_ICON //+ SS_CENTERIMAGE + aDlg := Wvt_AddDlgItem( aDlg, 18, 2, 2, 6, {}, ID_ICO_VOUCH , "STATIC" , nStyle, "" ) +/* + // Bitmap + nStyle := WS_CHILD + WS_VISIBLE + SS_BITMAP + SS_REALSIZEIMAGE + aDlg := Wvt_AddDlgItem( aDlg, 18, 41, 2,8, {-3,0,3}, ID_STA_IMAGE, "STATIC" , nStyle, "" ) +*/ + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_AUTOCHECKBOX + aDlg := Wvt_AddDlgItem( aDlg, 18, 15, 1, 10, {}, ID_CHK_SATIS , "BUTTON" , nStyle, "Satisfied?" ) + + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_RIGHT + ES_READONLY + aDlg := Wvt_AddDlgItem( aDlg, 18, 30, 1, 7, {3}, ID_EDT_TIME , "EDIT" , nStyle, "" ) + + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + LBS_NOTIFY + WS_VSCROLL + WS_BORDER + aDlg := Wvt_AddDlgItem( aDlg, 1, 41, 4, 17, {}, ID_LST_LIST , "LISTBOX", nStyle, "ListBox" ) + + nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT + aDlg := Wvt_AddDlgItem( aDlg, 4, 41, 1, 17, {3,0,0,0}, -1 , "STATIC" , nStyle, "Degree" ) + nStyle := WS_VISIBLE + WS_TABSTOP + CBS_DROPDOWNLIST + WS_BORDER + WS_VSCROLL + aDlg := Wvt_AddDlgItem( aDlg, 5, 41, 6, 17, {}, ID_CMB_COMBO , "COMBOBOX" , nStyle, "Combo" ) + + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_GROUPBOX + aDlg := Wvt_AddDlgItem( aDlg, 7, 41, 4, 17, {0,0,4,0},ID_GRP_COMP, "BUTTON" , nStyle, "Compiler" ) + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_AUTORADIOBUTTON + aDlg := Wvt_AddDlgItem( aDlg, 8, 43, 1, 14, {}, ID_RDO_XH , "BUTTON" , nStyle, "(x)Harbour" ) + aDlg := Wvt_AddDlgItem( aDlg, 9, 43, 1, 14, {}, ID_RDO_CLIP , "BUTTON" , nStyle, "Clipper" ) + aDlg := Wvt_AddDlgItem( aDlg,10, 43, 1, 14, {}, ID_RDO_XBASE , "BUTTON" , nStyle, "Xbase++" ) + + nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT + aDlg := Wvt_AddDlgItem( aDlg, 12, 41, 1, 17, {3,0,0,0}, ID_STA_TEXT, "STATIC" , nStyle, "Scrollable Text" ) + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOHSCROLL + WS_BORDER + aDlg := Wvt_AddDlgItem( aDlg, 13, 41, 1, 17, {}, ID_EDT_TEXT , "EDIT" , nStyle, "This is Text Field" ) + + nStyle := WS_CHILD + WS_VISIBLE + SS_LEFT + aDlg := Wvt_AddDlgItem( aDlg, 14, 41, 1, 17, {3,0,0,0}, -1, "STATIC" , nStyle, "Right Justified Numerics" ) + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOHSCROLL + ES_NUMBER + ES_RIGHT + WS_BORDER + aDlg := Wvt_AddDlgItem( aDlg, 15, 41, 1, 17, {}, ID_EDT_NUMB , "EDIT" , nStyle, "1234567" ) + + nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_PUSHBUTTON + aDlg := Wvt_AddDlgItem( aDlg, 18, 50, 1, 8, {-3,0,3,0}, ID_BTN_OK, "BUTTON" , nStyle, "OK" ) + + hMenu := Wvt_CreateMenu() + Wvt_AppendMenu( hMenu, MF_STRING + MF_ENABLED, ID_MNU_FILE , "File" ) + Wvt_AppendMenu( hMenu, MF_STRING + MF_ENABLED, ID_MNU_CONTROL, "Controls" ) + + lOnTop := .f. + cDlgProc := "DynDlgProc" +// bDlgProc := {|a,b,c,d| DYNDLGPROC(a,b,c,d) } + cDlgIcon := "v_notes.ico" +// nTimerTicks := 1000 // 1 second + + if nInfo == 2 + // Modal Dialog + // + //hDlg := Wvt_DialogBox( aDlg, bDlgProc, Wvt_GetWindowHandle() ) + hDlg := Wvt_DialogBox( aDlg, cDlgProc, Wvt_GetWindowHandle() ) + else + // Modeless Dialog + // + hDlg := Wvt_CreateDialog( aDlg, lOnTop, cDlgProc, cDlgIcon, /*nTimerTicks*/, hMenu ) + + // Using Function name. + //hDlg := Wvt_CreateDialog( aDlg, lOnTop, cDlgProc, cDlgIcon, nTimerTicks, hMenu, lModal ) + endif + + RETURN hDlg + +//-------------------------------------------------------------------// + +FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam ) + Local lClicked, cPrompt, nIndex, hFont, aHFonts + + Switch ( nMsg ) + + case WM_TIMER + WVG_SetDlgItemText( hDlg, ID_EDT_TIME, Time() ) + exit + + case WM_COMMAND + do case + + case wParam == ID_CHK_SATIS + lClicked := ( WVG_IsDlgButtonChecked( hDlg,ID_CHK_SATIS ) == 1 ) + WVG_MessageBox( hDlg, iif( lClicked, "Satisfied", "UnSatisfied" ), "CheckBoxStatus" ) + + case wParam == ID_RDO_XH + WVG_MessageBox( hDlg, "(x)Harbour", "Compiler" ) + + case wParam == ID_RDO_CLIP + WVG_MessageBox( hDlg, "Clipper", "Compiler" ) + + case wParam == ID_RDO_XBASE + WVG_MessageBox( hDlg, "Xbase++", "Compiler" ) + + case wParam == ID_MNU_FILE + WVG_MessageBox( hDlg, "Execute Menu Action!", "File" ) + + case wParam == ID_MNU_CONTROL + WVG_MessageBox( hDlg, "Controls are from Windows!", "Controls" ) + + case WVG_LOWORD( wParam ) == ID_LST_LIST + if WVG_HIWORD( wParam ) == LBN_SELCHANGE + nIndex := WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_LST_LIST ), LB_GETCURSEL, 0, 0 ) + cPrompt := space( 20 ) + WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_LST_LIST ), LB_GETTEXT, nIndex, @cPrompt ) + WVG_MessageBox( hDlg, cPrompt, "ListBox" ) + endif + + case WVG_LOWORD( wParam ) == ID_CMB_COMBO + if WVG_HIWORD( wParam ) == CBN_SELCHANGE + nIndex := WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_CMB_COMBO ), CB_GETCURSEL, 0, 0 ) + cPrompt := space( 20 ) + WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_CMB_COMBO ), CB_GETLBTEXT, nIndex, @cPrompt ) + WVG_MessageBox( hDlg, cPrompt, "Combo Box" ) + endif + + endcase + exit + + CASE WM_CTLCOLOREDIT + IF ( WVG_GetDlgItem( hDlg,ID_MLE ) == lParam ) + WVG_SetTextColor( wParam, RGB( 0,0,255 ) ) + WVG_SetBkColor( wParam, RGB( 255,255,200 ) ) + return 1 + ELSEIF ( WVG_GetDlgItem( hDlg,ID_EDT_TEXT ) == lParam ) + WVG_SetTextColor( wParam, RGB( 255,255,255 ) ) + WVG_SetBkColor( wParam, RGB( 10,200,45 ) ) + Return 1 + ENDIF + EXIT + + CASE WM_CTLCOLORSTATIC + IF ( WVG_GetDlgItem( hDlg,ID_STA_TEXT ) == lParam ) + WVG_SetTextColor( wParam, RGB( 255,255,255 ) ) + Return 1 + ENDIF + EXIT + + CASE WM_INITDIALOG + WVG_SetTimer( hDlg, 5001, 1000 ) // 1 sec + + IF empty( aHFonts := SetFonts() ) + IF ( hFont := Wvt_CreateFont( "Times New Roman", 18 ) ) != 0 + SetFonts( hFont ) + ENDIF + ENDIF + + IF len( aHFonts ) > 0 + WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_MLE ), WM_SETFONT, ahFonts[ 1 ], 0 ) + ENDIF + + IF empty( SetIcons() ) + SetIcons( WVG_LoadIcon( "vr_1.ico" ) ) + ENDIF + IF !empty( SetIcons() ) + WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_ICO_VOUCH ), STM_SETIMAGE, IMAGE_ICON, SetIcons()[ 1 ] ) + ENDIF + + /* + if t_hImage == nil + t_hImage := WVG_LoadImage( "vouch1.bmp", 2 ) + endif + if t_hImage != nil .and. t_hImage != 0 + WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_STA_IMAGE ), STM_SETIMAGE, IMAGE_BITMAP, t_hImage ) + endif + */ + WVG_SetDlgItemText( hDlg, ID_MLE , GetEditText() ) + WVG_CheckDlgButton( hDlg, ID_CHK_SATIS, .t. ) + + WVG_CheckRadioButton( hDlg, ID_RDO_XH, ID_RDO_XBASE, ID_RDO_XH ) + + Wvt_LBAddString( hDlg, ID_LST_LIST, "(x)Harbour" ) + Wvt_LBAddString( hDlg, ID_LST_LIST, "Gtwvt" ) + Wvt_LBAddString( hDlg, ID_LST_LIST, "Wvtgui" ) + Wvt_LBAddString( hDlg, ID_LST_LIST, "Modeless" ) + Wvt_LBAddString( hDlg, ID_LST_LIST, "Dialogs" ) + Wvt_LBAddString( hDlg, ID_LST_LIST, "WVT" ) + + Wvt_LBSetCurSel( hDlg, ID_LST_LIST, 1 ) + + Wvt_CBAddString( hDlg, ID_CMB_COMBO, "First" ) + Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Second" ) + Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Third" ) + Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Fourth" ) + Wvt_CBAddString( hDlg, ID_CMB_COMBO, "Fifth" ) + + Wvt_CBSetCurSel( hDlg, ID_CMB_COMBO, 1 ) + + WVG_InvalidateRect( hDlg ) + + EXIT + + CASE WM_DESTROY + // Do whatevert you want to do with cText + // Each box will retrieve its own text. + // + /* cText := */ WVG_GetDlgItemText( hDlg, ID_MLE ) + EXIT + END + + RETURN 0 + +//-------------------------------------------------------------------// + +STATIC FUNCTION GetEditText() + LOCAL cText := "" + + cText += "Welcome in the Wonderful World of (x)Harbour!" + cText += CRLF + CRLF + cText += "When Peter Rees first published GTWVT, a Windows " + cText += "Terminal Driver, on 22 Dec 2003, everybody took it " + cText += "lightly, except for me, as I was aware that what " + cText += "wonderful contribution to (x)Harbour he has made, " + cText += "what immense possibilities he has opened for (x)Harbour " + cText += "developers, what limitations he has cleared for Clipper " + cText += "savvy user base." + cText += CRLF + CRLF + cText += "With a little effort I could extend GTWVT " + cText += "to give it a GUI look. I also tried to give it " + cText += "an event driven functionality, and up came Wvt*Classes." + cText += CRLF + CRLF + cText += "And yet another feather is added in the cap of GTWVT " + cText += "as it is now capable of firing modeless dialogs like the one " + cText += "you are viewing. These dialogs can be constructed dynamically ( Courtesy hbwhat32 ) " + cText += "at run time or can be one of resources. At present 20 such dialogs " + cText += "can be active at any given time. Also note that dialogs created " + cText += "dynamically respect Top, Left, Rows, Cols coordinates, which is an " + cText += "undisputed productivity boost!" + cText += CRLF + CRLF + cText += "Enjoy!" + CRLF + cText += "Pritpal Bedi, INDIA" + + RETURN cText + +//-------------------------------------------------------------------// + +FUNCTION DlgSlideShow() + LOCAL hDlg, aDlg, nStyle + + t_aSlides := { "vouch1.bmp", "v_notes.ico", "2000.gif", "v_lock.bmp", "v_help.ico" } + + nStyle := DS_SETFONT + WS_VISIBLE + WS_POPUP + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + + aDlg := Wvt_MakeDlgTemplate( 0, 0, 20, 40, {}, "Slide Show", nStyle ) + + hDlg := Wvt_CreateDialog( aDlg, .f., "DlgSlideShowProc", "vr_1.ico", 5000 ) + + RETURN hDlg + +//-------------------------------------------------------------------// + +FUNCTION DlgSlideShowProc( hDlg, nMsg, wParam, lParam ) + + THREAD STATIC nSlide := 1 + + HB_SYMBOL_UNUSED( wParam ) + HB_SYMBOL_UNUSED( lParam ) + + SWITCH nMsg + + CASE WM_INITDIALOG + DrawSlide( hDlg, nSlide ) + EXIT + + CASE WM_PAINT + DrawSlide( hDlg, nSlide ) + EXIT + + CASE WM_TIMER + nSlide++ + IF nSlide > len( t_aSlides ) + nSlide := 1 + ENDIF + DrawSlide( hDlg, nSlide ) + + EXIT + END + + RETURN 0 + +//-------------------------------------------------------------------// + +FUNCTION DrawSlide( hDlg, nSlide ) + LOCAL hDC, aRect + + hDC := WVG_GetDC( hDlg ) + aRect := WVG_GetClientRect( hDlg ) + + Win_Rectangle( hDC, aRect[ 1 ]+10, aRect[ 2 ]+10, aRect[ 3 ]-10, aRect[ 4 ]-10 ) + WVG_DrawImage( hDC, aRect[ 1 ]+10, aRect[ 2 ]+10, aRect[ 3 ] - aRect[ 1 ] -20, ; + aRect[ 4 ] - aRect[ 2 ] - 20, t_aSlides[ nSlide ] ) + + WVG_ReleaseDC( hDlg,hDC ) + + Return NIL + +//----------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgmodal.prg b/harbour/contrib/gtwvg/tests/wvgmodal.prg new file mode 100644 index 0000000000..d9082f3b4f --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgmodal.prg @@ -0,0 +1,356 @@ +/* + * $Id$ + */ +/* + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#xUntranslate alert( => + +FUNCTION MyAlert( cMsg, aOpt ) + LOCAL nSel, oCrt + + oCrt := WvgCrt():New( , , { -1,-1 }, { 9, MaxCol()-6 }, , .t. ) + oCrt:lModal := .t. + oCrt:icon := "dia_excl.ico" + oCrt:create() + oCrt:resizable := .t. + + SetColor( 'N/W' ) + CLS + hb_gtInfo( HB_GTI_WINTITLE, cMsg ) + + nSel := Alert( cMsg, aOpt ) + + oCrt:destroy() + + RETURN nSel + +#xTranslate Alert( => MyAlert( + +/*----------------------------------------------------------------------*/ + +FUNCTION My_Alert( cMessage, aOptions, cCaption, nInit, nTime ) + RETURN DialogAlert( cCaption, cMessage, aOptions, nInit, , ,nTime ) + +/*----------------------------------------------------------------------*/ + +#define DLG_CLR_MOUSE 1 +#define DLG_CLR_CAPT 2 +#define DLG_CLR_TEXT 3 +#define DLG_CLR_BTN 4 +#define DLG_CLR_TRG 5 +#define DLG_CLR_SHADOW 6 +#define DLG_CLR_HILITE 7 +#define DLG_CLR_HISEL 8 + +#define K_MOVING 1001 +#define K_LEFT_DOWN 1002 +#define K_LEFT_DBLCLICK 1006 +#define K_LEFT_UP 1003 +#define K_RIGHT_DOWN 1004 +#define K_RIGHT_DBLCLICK 1007 +#define K_RIGHT_UP 1005 + +#xtranslate B_CRT ,,, ; + [ TITLE ] ; + [ ICON ] ; + [ ] ; + [ ] ; + [ ] ; + [ ] ; + [ AT , ] ; + [ ] ; + INTO ; + => ; + := CreateOCrt( , , , , , , ; + <.lModal.>, <.lRowCols.>, <.lHidden.>, <.lCenter.>, ; + , , <.lNoTitleBar.> ) + +/*----------------------------------------------------------------------*/ + +FUNCTION DialogAlert( cCaption, aText_, aButtons_, sel, aMessage_, nTop, nTime ) + LOCAL nLinesRqd, nColRqd, nLeft, nBottom, nRight, oCrt + LOCAL nColTxt, nColCap, nColBut, nBtnRow + LOCAL i, nTopReq, lGo, nKey, nMCol, nMRow, nTrg + LOCAL maxCol := maxcol() + LOCAL maxRow := maxrow() + LOCAL nBtnCol_ + LOCAL pal_ := {"w+/n","w/r","n/w","n/bg","r/bg","N/W","n/B","w+/B"} + LOCAL aTrg_ , x_:={} + + DEFAULT cCaption TO "Your Attention Please!" + DEFAULT aButtons_ TO {"OK"} + DEFAULT aText_ TO {} + DEFAULT aMessage_ TO {} + DEFAULT sel TO 1 + DEFAULT nTime TO 10 + + if nTime == 0 + nTime := 10000 // Seconds + endif + + if valtype( aText_ ) == "C" + aText_:= {aText_} + endif + + if valtype(aButtons_) == "C" + aButtons_:= {aButtons_} + endif + + nLinesRqd := len( aText_ )+ if( len( aText_ )== 0, 4, 5 ) + nTopReq := int( ( maxRow - nLinesRqd ) / 2 ) + nTop := if( nTop == nil, nTopReq, if( nTop > nTopReq, nTop, nTopReq ) ) + nBottom := nTop + nLinesRqd - 1 // 1 for shadow + + // check for columns + // place 2 spaces before and after the buttons + nColCap := len( cCaption )+ 7 // " - "+" "+caption+" " + nColTxt := 0 + if !empty(aText_) + aeval(aText_, {|e| nColTxt := max( nColTxt, len( e ) ) } ) + endif + nColTxt += 6 // for two spaces at both sides + nColBut := 0 + aeval( aButtons_, {|e| nColBut += len( e ) + 7 } ) + nColBut += 3 + + nColRqd := 0 + aeval( { nColCap, nColTxt, nColBut }, {|e| nColRqd := max( nColRqd, e ) } ) + + nLeft := IF( maxCol > nColRqd, int( ( maxCol - nColRqd ) / 2 ), 0 ) + nRight := nLeft+nColRqd + + aTrg_:= array( len( aButtons_ ) ) + for i := 1 to len( aButtons_ ) + aTrg_[i] := upper( substr( aButtons_[ i ], 1, 1 ) ) + next + + // Create a new Window + // + B_CRT nTop, nLeft, nBottom-1, nRight MODAL ICON "dia_excl.ico" TITLE ' '+cCaption INTO oCrt + + nTop := -1 + nLeft := 0 + nBottom := nTop + nLinesRqd - 1 + nRight := nLeft + nColRqd + nBtnRow := nTop + 1 + len( aText_ ) + if( len( aText_ ) == 0, 1, 2 ) + + nBtnCol_ := array( len( aButtons_ ) ) + + nBtnCol_[ 1 ] := int( ( nColRqd - nColBut ) / 2 ) + 3 + if len( aButtons_ ) > 1 + for i := 2 to len( aButtons_ ) + nBtnCol_[ i ] := nBtnCol_[ i-1 ] + len( aButtons_[ i-1 ] ) + 3 + 4 + next + ENDIF + + setcursor( 0 ) + SetColor( 'N/W' ) + CLS + + DispBegin() + SetColor( pal_[ DLG_CLR_TEXT ] ) + + Wvg_BoxRaised( nTop, nLeft, nBottom, nRight ) + + SetColor( pal_[ DLG_CLR_TEXT ] ) + if !empty( aText_ ) + FOR i := 1 to len( aText_ ) + @ nTop+1+i, nLeft SAY padc( aText_[ i ], nRight-nLeft+1 ) + NEXT + ENDIF + + // display buttons + // + for i := 1 to len( aButtons_ ) + SetColor( pal_[ DLG_CLR_BTN ] ) + @ nBtnRow, nBtnCol_[ i ] SAY " "+aButtons_[ i ]+" " + SetColor( pal_[ DLG_CLR_TRG ] ) + @ nBtnRow, nBtnCol_[ i ]+2 say substr( aButtons_[ i ],1,1 ) + + aadd( x_, { nBtnRow, nBtnCol_[ i ], nBtnRow, nBtnCol_[ i ] + len( aButtons_[ i ] ) + 3 } ) + next + + setColor( pal_[ DLG_CLR_HILITE ] ) + @ nBtnRow, nBtnCol_[ sel ] SAY " "+aButtons_[sel]+" " + + setColor( pal_[ DLG_CLR_HISEL ] ) + @ nBtnRow, nBtnCol_[ sel ]+2 SAY substr( aButtons_[ sel ],1,1 ) + + aeval( x_, {|e_| Wvg_BoxRaised( e_[ 1 ], e_[ 2 ], e_[ 3 ], e_[ 4 ] ) } ) + + dispend() + + lGo := .t. + do while lGo + IF ( nKey := Inkey() ) == 0 + LOOP + ENDIF + + if nKey == K_ESC + sel := 0 + exit + endif + nMRow := MRow() + nMCol := MCol() + + do case + case nKey == K_RIGHT_DOWN + sel := 0 + lGo := .f. + case nKey == K_LEFT_DOWN + if nMRow == nTop + if nMCol >= nLeft .and. nMCol <= nLeft+3 + sel := 0 + lGo := .f. + endif + elseif nMRow == nBtnRow + for i := 1 to len( nBtnCol_ ) + if nMCol >= nBtnCol_[ i ] .and. nMCol <= nBtnCol_[ i ] + len( aButtons_[ i ] )+4 + sel := i + lGo := .f. + endif + next + endif + case nKey == K_ESC + sel := 0 + lGo := .f. + case nKey == K_ENTER + lGo := .f. + case nKey == K_LEFT .or. nKey == K_DOWN + sel-- + case nKey == K_RIGHT .or. nKey == K_UP + sel++ + case ( nTrg := ascan( aTrg_, upper( chr( nKey ) ) ) ) > 0 + sel := nTrg + lGo := .f. + otherwise + if setkey( nKey ) != nil + eval( setKey( nKey ) ) + endif + endcase + + if sel > len( aButtons_ ) + sel := 1 + elseif sel < 1 + sel := len( aButtons_ ) + endif + + dispbegin() + for i := 1 to len ( aButtons_ ) + setColor( pal_[ DLG_CLR_BTN ] ) + @ nBtnRow, nBtnCol_[ i ] SAY " "+aButtons_[i]+" " + setColor( pal_[ DLG_CLR_TRG]) + @ nBtnRow, nBtnCol_[i]+2 say substr(aButtons_[i],1,1) + next + if sel > 0 + setColor( pal_[ DLG_CLR_HILITE ] ) + @ nBtnRow, nBtnCol_[sel] SAY " "+aButtons_[ sel ]+" " + setColor( pal_[ DLG_CLR_HISEL ] ) + @ nBtnRow, nBtnCol_[ sel ]+2 SAY substr( aButtons_[ sel ], 1, 1 ) + endif + + dispend() + enddo + + oCrt:destroy() + + return sel + +//----------------------------------------------------------------------// + +FUNCTION CreateOCrt( nT, nL, nB, nR, cTitle, xIcon, lModal, lRowCols, lHidden, ; + lCenter, nRow, nCol, lNoTitleBar ) + LOCAL oCrt, aPos + + DEFAULT cTitle TO 'Info' + DEFAULT xIcon TO 'VW_DFT' + DEFAULT lModal TO .T. + DEFAULT lHidden TO .F. + DEFAULT lCenter TO .F. + DEFAULT lNoTitleBar TO .F. + + aPos := IF( lCenter, {-1,-1}, IF( nRow == NIL, { nT, nL }, { nRow,nCol } ) ) + + oCrt := WvgCrt():new( , , aPos, { nB - nT, nR - nL }, , !lHidden ) + oCrt:lModal := lModal + IF lRowCols + oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS + ENDIF + oCrt:create() + SetCursor( 0 ) + + IF hb_isNumeric( xIcon ) + hb_gtInfo( HB_GTI_ICONRES, xIcon ) + ELSE + IF ( '.ico' $ lower( xIcon ) ) + hb_gtInfo( HB_GTI_ICONFILE, xIcon ) + ELSE + IF '.bmp' $ lower( xIcon ) + xIcon := 'VW_DFT' + ENDIF + hb_gtInfo( HB_GTI_ICONRES, xIcon ) + ENDIF + ENDIF + + hb_gtInfo( HB_GTI_WINTITLE, cTitle ) + + SetColor( 'N/W' ) + CLS + + RETURN oCrt + +/*----------------------------------------------------------------------*/ + +FUNCTION DoModalWindow() + LOCAL oCrt, nSel, pGT + + /* This part can be clubbed in a separate prg for different dialogs + * OR can be loaded from a data dictionary. + */ + oCrt := WvgCrt():New( , , { 4,8 }, { 12,49 }, , .T. ) + + oCrt:lModal := .t. + oCrt:resizable := .f. + oCrt:closable := .f. + oCrt:title := 'Information! [R:4 C:8]' + + oCrt:rbUp := {|| DispOutAt( maxrow(), 0, padc( 'rbUp', maxcol()+1 ),'W+/R*' ) } + oCrt:lbUp := {|| DispOutAt( maxrow(), 0, padc( 'lbUp', maxcol()+1 ),'W+/B*' ) } + oCrt:leave := {|| DispOutAt( maxrow(), 0, padc( 'Leaving', maxcol()+1 ), 'W+/RB' ) } + oCrt:enter := {|| DispOutAt( maxrow(), 0, padc( 'Entering', maxcol()+1 ), 'W+/B' ) } + + oCrt:Create() + oCrt:show() + + pGT := SetGT( 3, hb_gtSelect() ) + + // Here goes the Clipper Code + // + SetColor( 'N/W' ) + CLS + do while .t. + nSel := alert( 'I am in modal window !;< Try: MMove LBUp RBUp >;Click Parent Window', { 'OK' } ) + + if nSel == 0 .or. nSel == 1 + exit + + endif + enddo + + SetGT( 3, pGT ) + oCrt:Destroy() + Return NIL + +//----------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgqt.prg b/harbour/contrib/gtwvg/tests/wvgqt.prg new file mode 100644 index 0000000000..fc4c6017fa --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgqt.prg @@ -0,0 +1,58 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#ifdef __QT__ +#define QT_PTROF( oObj ) ( oObj:pPtr ) +INIT PROCEDURE Qt_Start() + qt_qapplication() + RETURN + +EXIT PROCEDURE Qt_End() + qt_qapplication_exec() + RETURN +#endif + +//-------------------------------------------------------------------// + +#ifdef __QT__ +FUNCTION ExeQTWidgets() + LOCAL oPS, oPPrv, oWZ, oCD, oWP + + oPS := QPageSetupDialog():new() + oPS:setWindowTitle( 'Harbour-QT PageSetup Dialog' ) + oPS:show() + + oPPrv := QPrintPreviewDialog():new() + oPPrv:setWindowTitle( 'Harbour-QT Preview Preview Dialog' ) + oPPrv:show() + + oWZ := QWizard():new() + oWZ:setWindowTitle( 'Harbour-QT Wizard to Show Slides etc.' ) + oWZ:show() + + oCD := QColorDialog():new() + oCD:setWindowTitle( 'Harbour-QT Color Selection Dialog' ) + oCD:show() + + oWP := QWebView():new() + oWP:setWindowTitle( 'Harbour-QT Web Page Navigator' ) + oWP:show() + + RETURN NIL +#endif +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/gtwvg/tests/wvgtbrowser.prg b/harbour/contrib/gtwvg/tests/wvgtbrowser.prg new file mode 100644 index 0000000000..7d735d7b36 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgtbrowser.prg @@ -0,0 +1,536 @@ +/* + * $Id$ + */ + +/* + * TBrowse Demonstration with GUI Elements + * + * This protocol can be clubbed with pure console implementation + * AND can be called IN a separate thread as well as modal TO + * current window. + * + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#define K_SBLINEUP 1051 +#define K_SBLINEDOWN 1052 +#define K_SBPAGEUP 1053 +#define K_SBPAGEDOWN 1054 + +#define K_SBLINELEFT 1055 +#define K_SBLINERIGHT 1056 +#define K_SBPAGELEFT 1057 +#define K_SBPAGERIGHT 1058 + +#define K_SBTHUMBTRACKVERT 1059 +#define K_SBTHUMBTRACKHORZ 1060 + +/*----------------------------------------------------------------------*/ + +FUNCTION WvtMyBrowse() + + IF hb_mtvm() + Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():New( , , { -1,-2 }, { 34,69 }, , .T. ), ; + oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS,; + oCrt:icon := "dia_excl.ico",; + oCrt:create(),; + Wvt_SetGui( .t. ),; + ExecBrowser( oCrt ),; + oCrt:destroy(); + } ) + + ELSE + ExecBrowser() + ENDIF + + Return NIL + +//----------------------------------------------------------------------// + +FUNCTION ExecBrowser( oCrt ) + LOCAL nKey, bBlock, oBrowse , aLastPaint, i, aLastPaint1, pGT + LOCAL cFileIndex, cFileDbf, cRDD, nIndex, oTBar, cScr, info_ + LOCAL lEnd := .f. + LOCAL aBlocks := {} + LOCAL nTop := 4 + LOCAL nLeft := 3 + LOCAL nBottom := maxrow() - 2 + LOCAL nRight := maxcol() - 3 + LOCAL nCursor := setCursor( 0 ) + LOCAL nRow := row() + LOCAL nCol := col() + LOCAL cColor := SetColor( "N/W*,N/GR*,,,N/W*" ) + LOCAL aObjects := WvtSetObjects( {} ) + LOCAL hPopup := Wvt_SetPopupMenu() + + STATIC nStyle := 0 + THREAD STATIC nFactor := 200 + + IF oCrt == NIL + cScr := SaveScreen( 0,0,maxrow(),maxcol() ) + ENDIF + + BrwBuildMenu( oCrt ) + oTBar := BuildWvgToolBar( oCrt ) + + pGT := SetGT( 2, hb_gtSelect() ) + + cRDD := "DBFCDX" + cFileDbf := hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" + cFileIndex := "test.z01" + + USE ( cFileDbf ) NEW SHARED VIA ( cRDD ) + if NetErr() + return nil + endif + if fLock() + INDEX ON Test->FIRST TAG "001" TO ( cFileIndex ) + INDEX ON Test->LAST TAG "002" TO ( cFileIndex ) + INDEX ON Test->CITY TAG "003" TO ( cFileIndex ) + dbUnlock() + endif + SET INDEX TO + SET INDEX TO ( cFileIndex ) + SET ORDER TO 1 + DbGoTo( 50 ) + + info_:= DbStruct() + + Popups( 2 ) + + oBrowse := TBrowseWVG():New( nTop + 3, nLeft + 2, nBottom - 1, nRight - 2 ) + + oBrowse:ColSep := " " + oBrowse:HeadSep := "__" + oBrowse:GoTopBlock := { || dbGoTop() } + oBrowse:GoBottomBlock := { || dbGoBottom() } + oBrowse:SkipBlock := { | nSkip | dbSkipBlock( nSkip,oBrowse ) } + + for i := 1 to len( info_ ) + bBlock := VouBlockField( i ) + oBrowse:AddColumn( TBColumnNew( info_[ i,1 ], bBlock ) ) + next + + oBrowse:configure() + + if nStyle > 5 + nStyle := 0 + endif + + Wvt_SetPen( nStyle, 0, rgb( 210,1210,210 ) ) + + nStyle++ + + //hb_gtInfo( HB_GTI_ICONFILE, "dia_excl.ico" ) + hb_gtInfo( HB_GTI_WINTITLE, "WVT Gui TBrowse()" ) + + aAdd( aBlocks, {|| Wvt_DrawBoxRaised( oBrowse:nTop-3, oBrowse:nLeft-2, oBrowse:nBottom+1, oBrowse:nRight+2 ) } ) + aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } ) + aAdd( aBlocks, {|| Wvt_DrawGridHorz( oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } ) + aAdd( aBlocks, {|| Wvt_DrawGridVert( oBrowse:nTop, oBrowse:nBottom, oBrowse:aColumnsSep, len( oBrowse:aColumnsSep ) ) } ) + + aLastPaint := WvtSetBlocks( aBlocks ) + + DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) + DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight-oBrowse:nLeft+1 ), "W+/W" ) + DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) + + oTBar:buttonClick := {|oBtn| IF( oBtn:caption=='Show',__keyboard( chr( K_DOWN ) ),nil ) } + + While !lEnd + oBrowse:ForceStable() + + nKey := InKey( 0, INKEY_ALL ) + + do case + case nKey == K_F12 + nFactor-- + hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor ) + + case nKey == K_F11 + nFactor++ + hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor ) + + case nKey == K_F6 + hb_gtInfo( HB_GTI_RESIZABLE, .f. ) + case nKey == K_F7 + hb_gtInfo( HB_GTI_RESIZABLE, .t. ) + + case BrwHandleKey( oBrowse, nKey, @lEnd ) + + case nKey == HB_K_RESIZE + oBrowse:nBottom := maxrow() - 3 + oBrowse:nRight := maxcol() - 5 + + DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) + DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" ) + DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) + oBrowse:configure() + + case nKey == K_F2 + nIndex := IndexOrd() + nIndex++ + if nIndex > 3 + nIndex := 1 + endif + Set Order To ( nIndex ) + oBrowse:RefreshAll() + + case nKey == K_F3 + aLastPaint1 := WvtSetBlocks( {} ) + DoModalWindow() + WvtSetBlocks( aLastPaint1 ) + + case nKey == K_F4 + hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) + + endcase + end + + Wvt_SetPen( 0 ) + WvtSetBlocks( aLastPaint ) + WvtSetObjects( aObjects ) + + DevPos( nRow, nCol ) + SetColor( cColor ) + SetCursor( nCursor ) + + DBCloseArea() + IF oCrt == NIL + RestScreen( 0, 0, maxrow(), maxcol(), cScr ) + ENDIF + Wvt_setPopupMenu( hPopup ) + SetGT( 2, pGT ) + + RETURN NIL + +//-------------------------------------------------------------------// + +STATIC FUNCTION DbSkipBlock( n ) + + LOCAL nSkipped := 0 + + if n == 0 + DBSkip( 0 ) + + elseif n > 0 + do while nSkipped != n .and. TBNext() + nSkipped++ + enddo + else + do while nSkipped != n .and. TBPrev() + nSkipped-- + enddo + endif + + RETURN nSkipped + +//-------------------------------------------------------------------// + +STATIC FUNCTION TBNext() + + LOCAL nSaveRecNum := recno() + LOCAL lMoved := .T. + + if Eof() + lMoved := .F. + else + DBSkip( 1 ) + if Eof() + lMoved := .F. + DBGoTo( nSaveRecNum ) + endif + endif + + RETURN lMoved + +//-------------------------------------------------------------------// + +STATIC FUNCTION TBPrev() + LOCAL nSaveRecNum := Recno() + LOCAL lMoved := .T. + + DBSkip( -1 ) + + if Bof() + DBGoTo( nSaveRecNum ) + lMoved := .F. + endif + + RETURN lMoved + +//-------------------------------------------------------------------// + +STATIC FUNCTION VouBlockField( i ) + + RETURN {|| fieldget( i ) } + +//-------------------------------------------------------------------// + +STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd ) + LOCAL lRet := .t. + + do case + case nKey == K_ESC + lEnd := .t. + + case nKey == K_ENTER + lEnd := .t. + + case nKey == K_DOWN + oBrowse:Down() + + case nKey == K_UP + oBrowse:Up() + + case nKey == K_LEFT + oBrowse:Left() + + case nKey == K_RIGHT + oBrowse:Right() + + case nKey == K_PGDN + oBrowse:pageDown() + + case nKey == K_PGUP + oBrowse:pageUp() + + case nKey == K_CTRL_PGUP + oBrowse:goTop() + + case nKey == K_CTRL_PGDN + oBrowse:goBottom() + + case nKey == K_HOME + oBrowse:home() + + case nKey == K_END + oBrowse:end() + + case nKey == K_CTRL_LEFT + oBrowse:panLeft() + + case nKey == K_CTRL_RIGHT + oBrowse:panRight() + + case nKey == K_CTRL_HOME + oBrowse:panHome() + + case nKey == K_CTRL_END + oBrowse:panEnd() + + case nKey == K_MWBACKWARD + oBrowse:down() + + case nKey == K_MWFORWARD + oBrowse:up() + + otherwise + lRet := .f. + + endcase + + RETURN lRet + +//-------------------------------------------------------------------// + +STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey ) + LOCAL lRet := .t., lRefAll := .f. + + HB_SYMBOL_UNUSED( cPaintID ) + + do case + case nKey == K_DOWN + oBrowse:Down() + + case nKey == K_UP + oBrowse:Up() + + case nKey == K_LEFT + oBrowse:Left() + + case nKey == K_RIGHT + oBrowse:Right() + + case nKey == K_PGDN + oBrowse:pageDown() + lRefAll := .t. + + case nKey == K_PGUP + oBrowse:pageUp() + lRefAll := .t. + + case nKey == K_CTRL_PGUP + oBrowse:goTop() + lRefAll := .t. + + case nKey == K_CTRL_PGDN + oBrowse:goBottom() + lRefAll := .t. + + case nKey == K_HOME + oBrowse:home() + + case nKey == K_END + oBrowse:end() + + case nKey == K_CTRL_LEFT + oBrowse:panLeft() + + case nKey == K_CTRL_RIGHT + oBrowse:panRight() + + case nKey == K_CTRL_HOME + oBrowse:panHome() + + case nKey == K_CTRL_END + oBrowse:panEnd() + + case nKey == K_MWBACKWARD + oBrowse:down() + + case nKey == K_MWFORWARD + oBrowse:up() + + case nKey == K_SBTHUMBTRACKVERT + OrdKeyGoTo( oWvtBrw:oVBar:GetPos() ) + lRefAll := .t. + + case nKey == K_SBTHUMBTRACKHORZ + oBrowse:ColPos := oWvtBrw:oHBar:GetPos() + + case nKey == K_SBLINEUP + oBrowse:up() + + case nKey == K_SBLINEDOWN + oBrowse:down() + + case nKey == K_SBPAGEUP + oBrowse:PageUp() + + case nKey == K_SBPAGEDOWN + oBrowse:PageDown() + + case nKey == K_SBLINELEFT + oBrowse:Left() + + case nKey == K_SBLINERIGHT + oBrowse:Right() + + case nKey == K_SBPAGELEFT + oBrowse:Left() + + case nKey == K_SBPAGERIGHT + oBrowse:right() + + otherwise + lRet := .f. + + endcase + + if lRet + if lRefAll + oBrowse:RefreshAll() + endif + oBrowse:ForceStable() + + oWvtBrw:oVBar:SetPos( OrdKeyCount(),OrdKeyNo() ) + oWvtBrw:oHBar:SetPos( oBrowse:ColCount, oBrowse:ColPos ) + endif + + RETURN lRet + +//-------------------------------------------------------------------// + +FUNCTION ConfigBrowser( aFields, cUseAlias, aTLBR, cDesc, oParent, cColorSpec, nID ) + LOCAL info_, oWvtBrw, oBrowse, i, bBlock + LOCAL aPopup := {} + + aadd( aPopup, { "Down" , {|| oBrowse:Down() , oBrowse:ForceStable() } } ) + aadd( aPopup, { "Up" , {|| oBrowse:Up() , oBrowse:ForceStable() } } ) + aadd( aPopup, { "Page Down", {|| oBrowse:PageDown(), oBrowse:ForceStable() } } ) + aadd( aPopup, { "Page Up" , {|| oBrowse:PageUp() , oBrowse:ForceStable() } } ) + aadd( aPopup, { "Top" , {|| oBrowse:GoTop() , oBrowse:ForceStable() } } ) + aadd( aPopup, { "Bottom" , {|| oBrowse:GoBottom(), oBrowse:ForceStable() } } ) + + Select( cUseAlias ) + info_:= DbStruct() + + //oBrowse := TBrowseNew( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] ) + oBrowse := TBrowseWVG():New( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] ) + + oBrowse:ColSep := " " + oBrowse:HeadSep := "__" + oBrowse:ColorSpec := cColorSpec + oBrowse:GoTopBlock := { || dbGoTop() } + oBrowse:GoBottomBlock := { || dbGoBottom() } + oBrowse:SkipBlock := { | nSkip | dbSkipBlock( nSkip,oBrowse ) } + + for i := 1 to len( aFields ) + bBlock := VouBlockField( aFields[ i ] ) + oBrowse:AddColumn( TBColumnNew( info_[ aFields[ i ],1 ], bBlock ) ) + next + + oBrowse:configure() + + oWvtBrw := WvtBrowse():New( oParent,nID ) + + oWvtBrw:nTop := aTLBR[ 1 ] + oWvtBrw:nLeft := aTLBR[ 2 ] + oWvtBrw:nBottom := aTLBR[ 3 ] + oWvtBrw:nRight := aTLBR[ 4 ] + oWvtBrw:cAlias := cUseAlias + oWvtBrw:oBrw := oBrowse + oWvtBrw:cDesc := cDesc + oWvtBrw:nPointer := WVT_IDC_HAND + oWvtBrw:cColorHilite := "W+/B*" + oWvtBrw:Tooltip := cDesc + oWvtBrw:aPopup := aPopup + + oWvtBrw:bHandleEvent := {|oWvtBrw,cPaintID,oBrowse,nKey| BrwOnEvent( oWvtBrw,cPaintID,oBrowse,nKey ) } + + RETURN oWvtBrw + +//-------------------------------------------------------------------// + +STATIC FUNCTION BrwBuildMenu( oCrt ) + Local oMenu, oSMenu + + oMenu := WvgMenuBar():new( oCrt, , .t. ):create() + + oSMenu := WvgMenu():new( oMenu ):create() + oSMenu:addItem( { '~First' , {|| alert( 'First' ) } } ) + oSMenu:addItem( { '~Second', {|| alert( 'Second' ) } } ) + oSMenu:addItem() + oSMenu:addItem( { '~Third' , {|| alert( 'Third' ) } } ) + oMenu:addItem( { oSMenu, '~Hello' } ) + + oSMenu := WvgMenu():new( oMenu ):create() + oSMenu:addItem( { '~First' , {|| alert( 'First' ) } } ) + oSMenu:addItem( '-' ) + oSMenu:addItem( { '~Second', {|| alert( 'Second' ) } } ) + oSMenu:addItem( { '~Third' , {|| alert( 'Third' ) } } ) + oMenu:addItem( { oSMenu, '~MyFriends' } ) + + oSMenu := WvgMenu():new( oMenu ):create() + oSMenu:title := "~Procedural" + oSMenu:addItem( { "Procedure ~1", } ) + oSMenu:addItem( { "Procedure ~2", } ) + oSMenu:itemSelected := {|mp1| MyMenuProcedure( 100+mp1 ) } + oSMenu:checkItem( 2 ) + + oMenu:addItem( { oSMenu, NIL } ) + + Return oMenu + +//----------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgutilities.prg b/harbour/contrib/gtwvg/tests/wvgutilities.prg new file mode 100644 index 0000000000..30766de12f --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgutilities.prg @@ -0,0 +1,503 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ +// +// 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 + +/*----------------------------------------------------------------------*/ + +thread static t_keys_:= { , , , , , , , , , , , , , , , , , , , } +thread static t_pic_ := { , , , , , , , , , , , , , , , , , , , } + +/*----------------------------------------------------------------------*/ + +FUNCTION WvtSetKeys( lSet ) + + if lSet + t_keys_[ 2 ] := SetKey( K_F2, {|| WvtNextGets() } ) + t_keys_[ 3 ] := SetKey( K_F3, {|| WvtWindowExpand( 1 ) } ) + t_keys_[ 4 ] := SetKey( K_F4, {|| WvtWindowExpand( -1 ) } ) + t_keys_[ 5 ] := SetKey( K_F5, {|| WvtMyBrowse() } ) + t_keys_[ 6 ] := SetKey( K_F6, {|| Wvt_Minimize() } ) + t_keys_[ 7 ] := SetKey( K_F7, {|| WvtPartialScreen() } ) + t_keys_[ 8 ] := SetKey( K_F8, {|| WvtLines() } ) + t_keys_[ 9 ] := SetKey( K_F9, {|| Wvt_ChooseFont() } ) + t_keys_[ 10] := SetKey( K_F10,{|| Wvt_ChooseColor() } ) + else + SetKey( K_F2, t_keys_[ 2 ] ) + SetKey( K_F3, t_keys_[ 3 ] ) + SetKey( K_F4, t_keys_[ 4 ] ) + SetKey( K_F5, t_keys_[ 5 ] ) + SetKey( K_F6, t_keys_[ 6 ] ) + SetKey( K_F7, t_keys_[ 7 ] ) + SetKey( K_F8, t_keys_[ 8 ] ) + SetKey( K_F9, t_keys_[ 9 ] ) + SetKey( K_F10, t_keys_[ 10] ) + endif + + RETURN Nil +//-------------------------------------------------------------------// +// 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 !empty( pGT ) + 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 + +//-------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgwvtclasses.prg b/harbour/contrib/gtwvg/tests/wvgwvtclasses.prg new file mode 100644 index 0000000000..131aa5f529 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgwvtclasses.prg @@ -0,0 +1,438 @@ +/* + * $Id$ + */ + +/* + * Wvt*Classes Demonstration + * + * This protocol can be clubbed with pure console implementation + * AND can be called IN a separate thread as well as modal TO + * current window. + * + * Pritpal Bedi + */ +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#define CRLF chr( 13 )+chr( 10 ) + +/*----------------------------------------------------------------------*/ + +FUNCTION DialogWvgClassesOne( nMode ) + Local bBlock + + if hb_mtvm() + if nMode == 2 + MyDialogOne() + else + bBlock := { |oCrt| ; + oCrt := WvgCrt():New( , , { -1,-1 }, { 54,184 }, , .f. ), ; + oCrt:fontName := 'Courier',; + oCrt:fontHeight := 13 ,; + oCrt:fontWidth := 0 ,; + oCrt:Create() ,; + MyDialogOne( oCrt ) ,; + oCrt:destroy() ; + } + hb_threadStart( bBlock ) + endif + else + MyDialogOne() + endif + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION MyDialogOne( oCrt ) + LOCAL aObjects:= WvtSetBlocks( {} ) + LOCAL nWinRows, nWinCols, cWinTitle, cFont, nHeight + LOCAL oDlg, oBar, cUseAlias + LOCAL oText, oTBar, aImg_, oImg, oLine, oBox, oBtn, oBtn2 + LOCAL oBBox, oCon, oGet, oBBox2, oBnr, oTBx + LOCAL oBRsd, cTxt, oRct, nGetCol, nSayCol, bBlock, bBlock1 + LOCAL oWvtBrw, oWvtBrw1, lOpen, lOpen1, cUseAlias1, oGetArea, oGet1 + LOCAL hPopup, nGetRow, aGets_, lChkMouse + LOCAL g_oMenuBar, oPBar2,oPBar3, oMenu + + HB_SYMBOL_UNUSED( oCrt ) + + WvtSetKeys( .f. ) + lChkMouse := SetMouseCheck( .f. ) + + hPopup := Wvt_SetPopupMenu() + Popups() + + cTxt := "GtWvt is capable of designing virtually any preceivable control " + cTxt := cTxt + "Windows offers." + cTxt := cTxt + CRLF + CRLF + cTxt := cTxt + "This text is placed in a WvtTextBox() control with " + cTxt := cTxt + "font and alignment adjustments!" + cTxt := cTxt + CRLF + CRLF + cTxt := cTxt + "Enjoy - Pritpal Bedi, INDIA" + + aImg_:={} + aadd( aImg_, hb_DirBase() + "v_lock.bmp" ) + aadd( aImg_, hb_DirBase() + "v_new.bmp" ) + aadd( aImg_, hb_DirBase() + "v_clclt.bmp" ) + aadd( aImg_, hb_DirBase() + "v_calend.bmp" ) + aadd( aImg_, hb_DirBase() + "v_index.bmp" ) + aadd( aImg_, hb_DirBase() + "v_notes1.bmp" ) + aadd( aImg_, hb_DirBase() + "v_selct1.bmp" ) + ? '.' + Wvt_ShowWindow( 1 ) + nWinRows := 55 + nWinCols := 185 + cWinTitle := "WvtGui Dialog One" + cFont := "Courier New" + nHeight := 13 + + oDlg := WvtDialog():New( nWinRows, nWinCols, cWinTitle, cFont, nHeight ) + oDlg:nTooltipWidth := 300 + oDlg:nTooltipTextColor := RGB( 255,0,0 ) + + oBar := WvtStatusBar():New( oDlg,201 ) + oBar:SetPanels( { 50,100 } ) + oBar:SetText( 1, "Tab.SH_Tab.Left_Click - Select a Browse" ) + oBar:SetText( 2, "GtWvt is Fantastic", "w+/W" ) + oBar:SetText( 3, "WOW" ) + oBar:nPointer := WVT_IDC_HAND + oBar:Tooltip := "GtWvt Statusbar with 3 panels" + oDlg:AddObject( oBar ) + + oBox := WvtStatic():New( oDlg,110,4,oDlg:MaxCol()-40,7,oDlg:MaxCol()-2 ) + oBox:nStatic := WVT_STATIC_BOXRECESSED + oDlg:AddObject( oBox ) + + oText := WvtLabel():New( oDlg, 101, 4, oDlg:MaxCol()-40, 7,oDlg:MaxCol()-2 ) + oText:Text := "(x)Harbour" + oText:nFontHeight := 36 + oText:nAlignHorz := 2 + oText:nAlignVert := 2 + oText:nFontWeight := 700 + oText:nTextColor := RGB( 100, 255, 12 ) + oText:nBackColor := RGB( 0, 0, 255 ) + oText:nTextColorHoverOn := RGB( 255, 255, 0 ) + oText:nBackColorHoverOn := RGB( 255, 100, 12 ) + oText:lItalic := .t. + oText:ToolTip := "Software that GROWS with you" + oText:bOnSelect := {|| .t. } + oDlg:AddObject( oText ) + + oImg := WvtImage():New( oDlg,102,20,oDlg:MaxCol()-40,37,oDlg:MaxCol()-2 ) + oImg:cImage := aImg_[ 5 ] + oImg:Tooltip := "WvtImage():New()" + oDlg:AddObject( oImg ) + + oTBar := WvtToolbar():New( oDlg,103, 0,0,2 ) + oTBar:lFloating := .f. + oTBar:Tooltip := "Toolbar" + oTBar:AddButton( aImg_[ 1 ], {|| oImg:SetImage( aImg_[ 1 ] ) } , "Lock" ) + oTBar:AddButton( aImg_[ 2 ], {|| oImg:SetImage( aImg_[ 2 ] ), oText:SetText( "(x)Harbour" ) } , "New" ) + oTBar:AddButton( aImg_[ 3 ], {|| oImg:SetImage( aImg_[ 3 ] ) } , "Calculator" ) + oTBar:AddButton() + oTBar:AddButton( aImg_[ 5 ], {|| oImg:SetImage( aImg_[ 5 ] ) } , "Restore" ) + oTBar:AddButton( aImg_[ 4 ], {|| oImg:SetImage( aImg_[ 4 ] ), oText:SetText( "Vouch" ) } , "Calendar" ) + oTBar:AddButton( aImg_[ 6 ], {|| oImg:SetImage( aImg_[ 6 ] ) } , "Notes" ) + oTBar:AddButton( aImg_[ 7 ], {|| oImg:SetImage( aImg_[ 7 ] ) } , "Press to Send Browse on Top" ) + oTBar:AddButton() + oDlg:AddObject( oTBar ) + + oLine := WvtStatic():New( oDlg, 105, 39, 0, 39, oDlg:MaxCol() ) + oLine:nStatic := WVT_STATIC_LINE + oDlg:AddObject( oLine ) + + oBBox := WvtStatic():New( oDlg,125,4,127,37,139 ) + oBBox:nStatic := WVT_STATIC_BOXGROUP + oDlg:AddObject( oBBox ) + + oBtn := WvtPushButton():New(oDlg, 124, 6, 129, 7, 137 ) + oBtn:cCaption := "Print" + oBtn:bOnLeftUp := {|| Wvt_Keyboard( 379 ) } + oBtn:Tooltip := "Open Printing Dialog for the Browser in Focus" + oDlg:AddObject( oBtn ) + + oBtn2 := WvtPushButton():New( oDlg, 124, 9, 129, 12, 137 ) + oBtn2:cFileImage := aImg_[ 3 ] + oBtn2:block := {|| ExeProgressBar( oPBar2, oPBar3 ) } + oBtn2:Tooltip := "Execute Progress Bar" + oDlg:AddObject( oBtn2 ) + + oPBar2 := WvtProgressBar():New( oDlg, , 14, 129, 25, 137 ) + oPBar2:nBarColor := RGB( 240,240,0 ) + oPBar2:cBackColor := "W/N*" + oPBar2:lVertical := .t. + oPBar2:nDirection := 0 + oPBar2:cImage := "vouch1.bmp" + oDlg:AddObject( oPBar2 ) + + oPBar3 := WvtProgressBar():New( oDlg, , 26, 129, 36, 137 ) + oPBar3:nBarColor := RGB( 240,240,0 ) + oPBar3:cBackColor := "W/N*" + oPBar3:lVertical := .t. + oPBar3:nDirection := 1 + oPBar3:cImage := "vouch1.bmp" + oDlg:AddObject( oPBar3 ) + + oBBox2 := WvtStatic():New( oDlg, , 9, oDlg:MaxCol()-40, 18, oDlg:Maxcol()-2 ) + oBBox2:nStatic := WVT_STATIC_BOXGROUP + oDlg:AddObject( oBBox2 ) + + oCon := WvtConsole():New( oDlg ) + oDlg:AddObject( oCon ) + + nGetCol := 158 + bBlock := {|| oCon:Say( 12, 148, "Name" ,"N/W" ),; + oCon:Say( 14, 148, "Date" ,"N/W" ),; + oCon:Say( 16, 148, "Amount","N/W" ) } + + oGet := WvtGets():New( oDlg, 210, 9, oDlg:Maxcol()-40, 18, oDlg:Maxcol()-2 ) + oGet:AddGets( 12, nGetCol, "GTWvt ", "@! ","W+/B*,N/W*" ) + oGet:AddGets( 14, nGetCol, date() ) + oGet:AddGets( 16, nGetCol, 2122.57, "@Z 99999999.99","w+/R,GR+/B" ) + oGet:Tooltip := "WvtGets():New() - ReadModal() like Clipper" + oGet:cDesc := "Normal Get Box" + oGet:bOnCreate := bBlock + oDlg:AddObject( oGet ) + + oBnr := WvtBanner():New( oDlg, 101, 0, 127, 1, oDlg:MaxCol()-2 ) + oBnr:nTimeDelay := 0.25 + oBnr:cText := "the compiler that EXTENDS with you" + oBnr:nFontHeight := 24 + oBnr:nFontWeight := 0 + oBnr:nDirection := 0 + oBnr:nAlignVert := 2 + oBnr:nTextColor := RGB( 253,251,170 ) + oBnr:nBackColor := RGB( 128,227,142 ) + oBnr:nTextColorHoverOn := RGB( 255,255, 0 ) + oBnr:nBackColorHoverOn := RGB( 255,100, 12 ) + oBnr:Tooltip := "WvtBanner():New()" + oDlg:AddObject( oBnr ) + + oBRsd := WvtStatic():New( oDlg, , 41,127,52,oDlg:MaxCol()-2 ) + oBRsd:nStatic := WVT_STATIC_BOXGROUPRAISED + oDlg:AddObject( oBRsd ) + + oRct := WvtStatic():New( oDlg, , 41,127,52,oDlg:MaxCol()-2 ) + oRct:nStatic := WVT_STATIC_SHADEDRECT + oRct:aRGBb := { 0xffff, 0x0000, 0x0000, 0x0000 } + oRct:aRGBe := { 0x0000, 0xffff, 0xffff, 0x0000 } + oDlg:AddObject( oRct ) + + oTBx := WvtTextBox():New( oDlg, , 42,129,51,oDlg:MaxCol()-4 ) + oTBx:cText := cTxt + oTBx:Tooltip := "WvtTextBox():New()" + oTBx:nFontHeight := 16 + oTBx:lItalic := .t. + oTBx:lUnderline := .t. + oTBx:nAlignHorz := 2 + oTBx:nTextColor := RGB( 255,255,255 ) + oTBx:nTextColorHoverOn := RGB( 0,0,255 ) + oTBx:aPopup := {} + aadd( oTBx:aPopup, { "Getsome" , {|| .t. } } ) + aadd( oTBx:aPopup, { "Getsome2", {|| .t. } } ) + oDlg:AddObject( oTBx ) + + oGetArea := WvtStatic():New( oDlg, , 4, 2, 37, 62 ) + oGetArea:nStatic := WVT_STATIC_BOXRAISED + oDlg:AddObject( oGetArea ) + + nGetCol := 20 + nSayCol := 7 + nGetRow := 7 + bBlock1 := {|| oCon:Say( nGetRow+00, nSayCol, "First Name" ,"N/W" ),; + oCon:Say( nGetRow+02, nSayCol, "Last Name " ,"N/W" ),; + oCon:Say( nGetRow+04, nSayCol, "Street" ,"N/W" ),; + oCon:Say( nGetRow+06, nSayCol, "City" ,"W+/W"),; + oCon:Say( nGetRow+08, nSayCol, "State" ,"N/W" ),; + oCon:Say( nGetRow+10, nSayCol, "Zip" ,"B+/W"),; + oCon:Say( nGetRow+12, nSayCol, "Date Hired" ,"B+/W"),; + oCon:Say( nGetRow+14, nSayCol, "Married" ,"B+/W"),; + oCon:Say( nGetRow+16, nSayCol, "Age" ,"B+/W"),; + oCon:Say( nGetRow+18, nSayCol, "Salary" ,"B+/W"),; + oCon:Say( nGetRow+20, nSayCol, "Notes", ,"B+/W") ; + } + + aGets_:= { pad("Pritpal",20 ), pad( "Bedi",20 ), pad( "60, New Professor Colony",30 ), ; + pad( "Ludhiana, INDIA",30 ),; + "PB", pad( "141004",10 ), ctod( "22/06/04" ), .t., 48, 17000, ; + pad( "Wvtgui is a classical example of (x)Harbour capabilities...",65 ) } + + oGet1 := WvtGets():New( oDlg, , 4, 2, 37, 62 ) + oGet1:AddGets( nGetRow+00, nGetCol, aGets_[ 1 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+02, nGetCol, aGets_[ 2 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+04, nGetCol, aGets_[ 3 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+06, nGetCol, aGets_[ 4 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+08, nGetCol, aGets_[ 5 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+10, nGetCol, aGets_[ 6 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+12, nGetCol, aGets_[ 7 ], "@ " , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+14, nGetCol, aGets_[ 8 ], "@Y" , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+16, nGetCol, aGets_[ 9 ], "@Z 99" , "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+18, nGetCol, aGets_[ 10], "@Z 999999", "N/W*,N/GR*" ) + oGet1:AddGets( nGetRow+20, nGetCol, aGets_[ 11], "@S35" , "N/W*,N/GR*" ) + oGet1:cDesc := "test.dbf Fields" + oGet1:Tooltip := "Double Click to Activate ReadModal()" + oGet1:bOnCreate := bBlock1 + oDlg:AddObject( oGet1 ) + + g_oMenuBar := WvtMenu():new():create() + oMenu := WvtMenu():new():create() + oMenu:Caption := "Other Dialogs" + oMenu:AddItem( "Dialog Two", {|| DialogWvgClassesTwo() } ) + oMenu:AddItem( "-" ) + oMenu:AddItem( "Exit", {|| Wvt_Keyboard( K_ESC ) } ) + g_oMenuBar:addItem( "",oMenu ) + + oDlg:oMenu := g_oMenuBar + + lOpen := .f. + cUseAlias := "TEST" + USE ( hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" ) NEW ALIAS ( cUseAlias ) SHARED + if !NetErr() + lOpen := .t. + oWvtBrw := ConfigBrowser( { 1,7,9,10,8 }, cUseAlias, { 6,67,36,120 }, "test.dbf - 1,7,9,10,8", oDlg, "N/W*,N/GR*",1001 ) + oDlg:AddObject( oWvtBrw ) + endif + + lOpen1 := .f. + cUseAlias1 := "TEST1" + USE ( hb_DirBase() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "tests" + hb_osPathSeparator() + "test.dbf" ) NEW ALIAS ( cUseAlias1 ) SHARED + if !NetErr() + lOpen1 := .t. + oWvtBrw1 := ConfigBrowser( { 1,2,3,4,5,6 }, cUseAlias1, { 43,4,51,120 }, "test.dbf - 1,2,3,4,5,6",oDlg, "N/BG*,N/W*",1002 ) + oDlg:AddObject( oWvtBrw1 ) + endif + + Setkey( K_F12, {|| hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, 200 ) } ) + + oDlg:Create() + oDlg:Execute() + oDlg:Destroy() + + if lOpen + Select( cUseAlias ) + USE + endif + if lOpen1 + Select( cUseAlias1 ) + USE + endif + + WvtSetBlocks( aObjects ) + WvtSetKeys( .t. ) + Wvt_SetPopupMenu( hPopup ) + SetMouseCheck( lChkMouse ) + + RETURN Nil + +//-------------------------------------------------------------------// + +FUNCTION DialogWvgClassesTwo() + LOCAL aObjects := WvtSetBlocks( {} ) + LOCAL oDlg := WvtDialog():New( 30,90,"My Dialog Two" ) + LOCAL g_oMenuBar, oMenu, oPBar + LOCAL oPBar1, oPBar2, oPBar3, oPBar4 + + g_oMenuBar := WvtMenu():new():create() + oMenu := wvtMenu():new():create() + oMenu:Caption := "Miscellaneous" + oMenu:AddItem( "Progressbar", {|| ExeProgBar( oPBar,oPBar1,oPBar2,oPBar3, oPBar4 ) } ) + oMenu:AddItem( "-" ) + oMenu:AddItem( "Exit", {|| Wvt_Keyboard( K_ESC ) } ) + g_oMenuBar:addItem( "",oMenu ) + + oDlg:oMenu := g_oMenuBar + + oPBar := WvtProgressBar():New( oDlg, , 3, 10, 5, 80 ) + oPBar:nBarColor := RGB( 0,240,240 ) + oPBar:cBackColor := "W/N*" + oPBar:nDirection := 1 + oPBar:cImage := "vouch1.bmp" + oDlg:AddObject( oPBar ) + + oPBar1 := WvtProgressBar():New( oDlg, , 7, 10, 8, 80 ) + oPBar1:nBarColor := RGB( 11,255,196 ) + oPBar1:cBackColor := "W/N*" + oPBar1:nDirection := 0 + oDlg:AddObject( oPBar1 ) + + oPBar2 := WvtProgressBar():New( oDlg, , 11, 10, 28, 19 ) + oPBar2:nBarColor := RGB( 240,240,0 ) + oPBar2:cBackColor := "W/N*" + oPBar2:lVertical := .t. + oPBar2:nDirection := 0 + oPBar2:cImage := "v_notes.ico" + oDlg:AddObject( oPBar2 ) + + oPBar3 := WvtProgressBar():New( oDlg, , 11, 77, 28, 80 ) + oPBar3:nBarColor := RGB( 0,0,255 ) + oPBar3:cBackColor := "W/N*" + oPBar3:lVertical := .t. + oPBar3:nDirection := 1 + oDlg:AddObject( oPBar3 ) + + oPBar4 := WvtProgressBar():New( oDlg, , 22, 22, 28, 74 ) + oPBar4:nBarColor := RGB( 255,255,0 ) + oPBar4:cBackColor := "W/N*" + oPBar4:lVertical := .t. + oPBar4:nDirection := 0 + oDlg:AddObject( oPBar4 ) + + oDlg:Create() + oDlg:Execute() + oDlg:Destroy() + + WvtSetBlocks( aObjects ) + RETURN Nil + +//-------------------------------------------------------------------// + +STATIC FUNCTION ExeProgBar( oPBar,oPBar1,oPBar2,oPBar3,oPBar4 ) + LOCAL i + + oPBar:Activate() + oPBar1:Activate() + oPBar2:Activate() + oPBar3:Activate() + oPBar4:Activate() + for i := 1 to 100 + oPBar:Display( i, 100 ) + oPBar1:Display( i, 100 ) + oPBar2:Display( i, 100 ) + oPBar3:Display( i, 100 ) + oPBar4:Display( i, 100 ) + inkey( 0.3 ) + next + inkey( 0 ) + oPBar:DeActivate() + oPBar1:DeActivate() + oPBar2:DeActivate() + oPBar3:DeActivate() + oPBar4:DeActivate() + + RETURN nil +//-------------------------------------------------------------------// + +STATIC FUNCTION ExeProgressBar( oPBar, oPBar3 ) + LOCAL i + + oPBar:Activate() + oPBar3:Activate() + for i := 1 to 100 + oPBar:Display( i, 100 ) + oPBar3:Display( i, 100 ) + inkey( 0.3 ) + next + oPBar:DeActivate() + oPBar3:DeActivate() + + RETURN NIL + +//-------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/tests/wvgxbp.prg b/harbour/contrib/gtwvg/tests/wvgxbp.prg new file mode 100644 index 0000000000..9d18334c62 --- /dev/null +++ b/harbour/contrib/gtwvg/tests/wvgxbp.prg @@ -0,0 +1,431 @@ +/* + * $Id$ + */ + +/* + * Pritpal Bedi + */ + +/*----------------------------------------------------------------------*/ + +#include "inkey.ch" +#include "common.ch" +#include "wvtwin.ch" +#include "hbgtinfo.ch" +#include "hbgtwvg.ch" +#include "wvgparts.ch" + +/*----------------------------------------------------------------------*/ + +#define MUSIC_WAITON {800, 1600} + +/*----------------------------------------------------------------------*/ +// +// A Pure Xbase++ Implementation +// +//----------------------------------------------------------------------// + +FUNCTION demoxbp() + Local oCrt, oTBar, oSBar, oStatic, oCom, oXbp, oTree, oItem1, oItem2 + LOCAL oListBox, oCheck, oRadio, oStatic2, oMLE, oAddr + LOCAL oPanel, oPanel1, oPanel2, cText, cNavigate, oDA + LOCAL cVarA := "Test A", cVarB := "Test B" + LOCAL aState := {"not selected", "selected", "undefined"} + LOCAL aParts := {} + + //--------------------------- Dialog -------------------------------\\ + oCrt := WvgDialog():new( , , { 30,30 }, { 900,600 }, , .t. ) + oCrt:closable := .t. + oCrt:icon := "vr_1.ico" + oCrt:create() + + oCrt:setFontCompoundName( '12.Courier italic' ) + + oDA := oCrt:drawingArea + + //--------------------------- Menu --------------------------------\\ + ActiveXBuildMenuXbp( oCrt, @oStatic, @oStatic2 ) + + //--------------------------- ToolBar -----------------------------\\ + oTBar := ActiveXBuildToolBarXbp( oDA ) + + //--------------------------- StatusBar ---------------------------\\ + oSBar := WvgStatusBar():new( oCrt ):create( , , , , , .t. ) + oSBar:panelClick := {|oPanel| WVG_MessageBox( , oPanel:caption ) } + oPanel := oSBar:getItem( 1 ) + oPanel:caption := 'My Root Panel' + oPanel1 := oSBar:addItem() + oPanel1:caption := 'Ready' + oPanel2 := oSBar:addItem() + oPanel2:caption := 'Click on any part!' + + //--------------------------- Static ------------------------------\\ + oStatic := WvgStatic():new( oDA ) + oStatic:type := WVGSTATIC_TYPE_TEXT + oStatic:options := WVGSTATIC_TEXT_CENTER + oStatic:caption := chr(13)+'Implemented Xbase++ Parts' + + oStatic:create( , , { 0, oTBar:currentSize()[2]+3 }, { 120, oCrt:currentSize()[2]-; + oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) + oStatic:setColorBG( RGB( 200,200,200 ) ) + + //--------------------------- ListBox -----------------------------\\ + oListBox := WvgListBox():new() + oListBox:create( oStatic, , { 5, 55 }, { 107, 380 } ) + + oListBox:setColorFG( RGB( 218,61,34 ) ) + //oListBox:setColorBG( RGB( 250,244,182 ) ) + + aadd( aParts, 'XbpDialog' ) + aadd( aParts, 'XbpMenuBar' ) + aadd( aParts, 'XbpToolBar' ) + aadd( aParts, 'XbpToolBarButton' ) + aadd( aParts, 'XbpStatusBar' ) + aadd( aParts, 'XbpStatic' ) + aadd( aParts, 'XbpTreeView' ) + aadd( aParts, 'XbpTreeViewItem' ) + aadd( aParts, 'XbpActiveXControl') + aadd( aParts, 'XbpListBox' ) + aadd( aParts, 'XbpPushButton' ) + aadd( aParts, 'XbpCheckBox' ) + aadd( aParts, 'XbpRadioButton' ) + aadd( aParts, 'Xbp3State' ) + aadd( aParts, 'XbpSLE' ) + aadd( aParts, 'XbpMLE' ) + aadd( aParts, 'XbpHTMLViewer' ) + aadd( aParts, 'XbpSysWindow' ) + aadd( aParts, 'XbpFontDialog' ) + aadd( aParts, 'XbpFont' ) + aadd( aParts, '-------------' ) + aadd( aParts, 'DataRef' ) + + aeval( aParts, {|e| oListBox:addItem( e ) } ) + oListBox:itemSelected := {|| WVG_MessageBox( , oListBox:getCurItem() ) } + oListBox:setData( 3 ) // show selected 'XbpToolBar' + + //--------------------------- PushButton --------------------------\\ + oXbp := WvgPushButton():new( oStatic ) + oXbp:caption := "Hide" + oXbp:create( , , { 20,440 }, {80,30} ) + oXbp:activate:= {|| oStatic:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } + + //--------------------------- TreeView ---------------------------\\ + + oTree := WvgTreeView():new( oDA, , { oCrt:currentSize()[1]-160,oTBar:currentSize()[2]+3 }, ; + { 160, oCrt:currentSize()[2]-; + oTBar:currentSize()[2]-oSBar:currentSize()[2]-4 }, , .t. ) + oTree:hasLines := .T. + oTree:hasButtons := .T. + oTree:alwaysShowSelection := .T. + oTree:create() + oTree:setColorBG( RGB( 120,15,240 ) ) + oTree:setColorFG( RGB( 15,240,120 ) ) + oTree:itemSelected := {|oItem| IF( oItem <> NIL, WVG_MessageBox( , oItem:caption ), NIL ) } + + oItem1 := oTree:rootItem:addItem( "First level A" ) + + oTree:rootItem:addItem( "First level B" ) + + oItem2 := oItem1:addItem( "Second level A" ) + oItem1:addItem( "Second level B" ) + + oItem2:addItem( "Third level A" ) + oItem2:addItem( "Third level B" ) + oItem2:addItem( "Third level C" ) + + #if 0 + oItem1:expand( .t. ) + #else + oTree:showExpanded( .t., 2 ) + #endif + + oTree:setData( oItem2 ) + + //--------------------------- Active-X ---------------------------\\ + hb_gtInfo( HB_GTI_WINTITLE, 'http://www.harbour.vouch.info' ) + #if 0 + oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) + oCom:CLSID := 'Shell.Explorer.2' + oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) + #else + oCom := WvgHTMLViewer():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. ) + oCom:beforeNavigate := {|cURL, x, oHTML| x := x, oHTML := oHTML, oPanel:caption := cURL } + oCom:statusTextChange := {|cText| oPanel:caption := cText } + oCom:mapEvent( 112, {|| oPanel:caption := ' E X P L O R E R - 2 6 9' } ) + #endif + oCom:create() + oCom:Navigate( 'http://www.harbour.vouch.info' ) + + oAddr := WvgSLE():new() + oAddr:bufferLength := 500 + oAddr:border := .t. + cNavigate := 'http://www.harbour.vouch.info' + oAddr:dataLink := {|x| iif( x == NIL, cNavigate, cNavigate := x ) } + oAddr:setColorFG( RGB( 0,0,255 ) ) + oAddr:setColorBG( RGB( 0,255,255 ) ) + oAddr:create( oDA, , { 120, oTBar:currentSize()[2] }, { 500,20 }, , .t. ) + oAddr:setData() + oAddr:killInputFocus := {|m1,m2,oS| m1:=m1, m2:=m2, oS:getData(), oCom:navigate( cNavigate ) } + + //----------------- Panel : Static + Radio + Checkbox ----------\\ + oStatic2:= WvgStatic():New( oDA, , { 150, 150 }, { 500,310 }, , .f. ) + //oStatic2:type := WVGSTATIC_TYPE_RAISEDBOX //BGNDFRAME + oStatic2:exStyle += WS_EX_WINDOWEDGE + //oStatic2:options := WVGSTATIC_FRAMETHICK + oStatic2:create() + oStatic2:setColorBG( RGB( 175,175,175 ) ) + + oXbp := WvgPushButton():new( oStatic2 ) + oXbp:caption := "Hide" + oXbp:caption := "Hide" + oXbp:create( , , { 430,275 }, { 60,25 } ) + oXbp:activate := {|| oStatic2:hide(), oCrt:sendMessage( WM_SIZE, 0, 0 ) } + + oRadio := WvgRadioButton():new( oStatic2,, { 10,10 }, { 100,15 } ) + oRadio:caption := "Com 1" + oRadio:selection := .T. + oRadio:selected := {|m1,m2,obj| m1:=m1, m2:=m2, WVG_MessageBox( , obj:caption + IF( obj:selection, '< S >', '< N >' ) ) } + oRadio:create() + + oRadio := WvgRadioButton():new( oStatic2,, { 10,35 }, { 100,15 } ) + oRadio:caption := "Com 2" + oRadio:create() + + oCheck := WvgCheckBox():New( oStatic2, , { 10,70 }, { 100,15 }, , .t. ) + oCheck:caption := 'Checkbox A' + oCheck:create() + oCheck:selected := {|m1,m2,o| m1:=m1,m2:=m2, WVG_MessageBox( , IF( o:getData(), 'I am selected','I am not selected' ) ) } + + // Create first 3State button, passing the position to :create() + oXbp := Wvg3State():new() + oXbp:caption := "3 State A" + oXbp:create( oStatic2, , { 10,100 }, { 100,15 } ) + // Determine current state using mp1 + oXbp:selected := {| m1,m2,oBtn | m2:=m2, oBtn:=oBtn, oPanel1:caption := "3State A ["+aState[ m1+1 ]+"]" } + + // Create second 3State Button, passing the position to :new() + oXbp := Wvg3State():new( oStatic2, , { 10,125 }, { 100,15 } ) + oXbp:caption := "3 State B" + oXbp:create( oStatic2 ) + // Determine current state using :getData() + oXbp:selected := {| m1,m2,oBtn | m1:=m1,m2:=m2, WVG_MessageBox( , "3State B", aState[ oBtn:getData()+1 ] ) } + + // Create first SLE, specify position using :create() + // On :typeOut set the focus to the second SLE + oXbp := WvgSLE():new() + oXbp:autoTab := .T. + oXbp:bufferLength := 20 + // Data code block containing assignment to LOCAL variable + oXbp:dataLink := {|x| IIf( x == NIL, cVarA, cVarA := x ) } + oXbp:create( oStatic2, , { 10,170 }, { 150,20 } ) + oXbp:setData() + // Assign the value of the edit buffer to a LOCAL variable when the input focus is lost + oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarA =" + cVarA } + + // Create second SLE, specify position using :new() + oXbp := WvgSLE():new( , , { 10,200 }, { 150,20 } ) + oXbp:tabStop := .T. + oXbp:bufferLength := 15 + oXbp:dataLink := {|x| IIf( x == NIL, cVarB, cVarB := x ) } + oXbp:create( oStatic2 ) + oXbp:setData() + oXbp:killInputFocus := { |x,y,oSLE| x:=x,y:=y, oSLE:getData(), oPanel:caption := "cVarB =" + cVarB } + + // Read file into LOCAL variable + cText := MemoRead( 'gtwvg.hbc' ) + // Create MLE, specify position using :create() and + // assign data code block accessing LOCAL variable + oMLE := WvgMLE():new() + oMLE:wordWrap := .F. + oMLE:border := .t. + oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) } + oMLE:create( oStatic2, , { 180,10 }, { 310,250 } ) + // Copy text from LOCAL variable into edit buffer via :dataLink + oMLE:setData() + + //--------------------------- Misc Config ------------------------\\ + oTBar:buttonClick := {|oBtn| IF( oBtn:caption == 'Hide' , oStatic:hide(), nil ),; + IF( oBtn:caption == 'Show' , oStatic:show(), nil ),; + IF( oBtn:caption == 'Tools' , oStatic2:show():toFront(), nil ),; + IF( oBtn:caption == 'FontDlg', ExeFontDialogXbp( oCrt ), nil ),; + IF( oBtn:caption $ 'Hide,Show', oCrt:sendMessage( WM_SIZE, 0, 0 ), NIL ),; + oPanel2:caption := "Button [ " + oBtn:caption + " ] clicked!" } + + oCrt:resize := {|| ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) } + + oCrt:sendMessage( WM_SIZE, 0, 0 ) + oCrt:show() + + DO WHILE .t. + IF inkey() == K_ESC + EXIT + ENDIF + ENDDO + + oCrt:Destroy() + + Return nil + +//----------------------------------------------------------------------// + +STATIC FUNCTION ResizeDialogXbp( oCrt, oTBar, oSBar, oStatic, oCom, oTree, oAddr ) + LOCAL aCrt, aTBar, aSBar + LOCAL nH, nT + + aCrt := oCrt:currentSize() + aTBar := oTBar:currentSize() + aSBar := oSBar:currentSize() + + nT := aTBar[2] + nH := aCrt[2] - aTBar[2] - aSBar[2] + + IF oStatic:isVisible + oStatic:setPosAndSize( { 0, nT+3 }, { 120, nH-4 }, .t. ) + oAddr:setPosAndSize( { 120, nT+2 }, { aCrt[1]-120-150, 20 }, .t. ) + oCom:setPosAndSize( { 120, nT+2+20 }, { aCrt[1]-120-150, nH-20 }, .t. ) + oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) + + ELSE + oAddr:setPosAndSize( { 0, nT+2 }, { aCrt[1]-150, 20 }, .t. ) + oCom:setPosAndSize( { 0, nT+2+20 }, { aCrt[1]-150, nH-20 }, .t. ) + oTree:setPosAndSize( { aCrt[1]-150, nT }, { 150, nH }, .t. ) + + ENDIF + + RETURN 1 + +//----------------------------------------------------------------------// + +STATIC FUNCTION ActiveXBuildMenuXbp( oCrt, oStatic, oStatic2 ) + Local oMenuBar, oSubMenu + + oMenuBar := WvgMenuBar():new( oCrt ):create() + + // Define submenu in procedural style. + // The numeric index of the selected menu item + // is passed to the Callback code block -> mp1 + + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "~Procedural" + oSubMenu:addItem( { "Play Charge ~1", } ) + oSubMenu:addItem( { "Play Nannyboo ~2", } ) + oSubMenu:itemSelected := {|mp1| MyFunctionXbp( 100+mp1 ) } + oMenuBar:addItem( { oSubMenu, NIL } ) + + // Define submenu in the functional style: + // A menu item executes a code block that + // calls a function + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "~Functional" + oSubMenu:addItem( { "Play Opening ~1", {|| MyFunctionXbp( 1 ) } } ) + oSubMenu:addItem( { "Play Closing ~2", {|| MyFunctionXbp( 2 ) } } ) + oSubMenu:addItem() + oSubMenu:addItem( { "~MessageBox" , {|| MyFunctionXbp( 3 ) } } ) + oMenuBar:addItem( { oSubMenu, NIL } ) + + oSubMenu := WvgMenu():new( oMenuBar ):create() + oSubMenu:title := "F~eatures" + oSubMenu:addItem( { "~Hide or Show Left Panel" , {|| IF( oStatic:isVisible, ; + oStatic:hide(), oStatic:show() ), oCrt:sendMessage( WM_SIZE,0,0 ) } } ) + oSubMenu:addItem( { "~Show My Panel" , {|| oStatic2:show():toFront() } } ) + oSubMenu:addItem() + oSubMenu:addItem( { "~Font Dialog" , {|| ExeFontDialogXbp( oCrt ) } } ) + + oMenuBar:addItem( { oSubMenu, NIL } ) + + RETURN NIL +//----------------------------------------------------------------------// + +STATIC FUNCTION ActiveXBuildToolBarXbp( oCrt ) + LOCAL oTBar + + oTBar := WvgToolBar():new( oCrt , , { 0,0 }, { 0,0 }, , .T. ) + + oTBar:style := WVGTOOLBAR_STYLE_FLAT + + oTBar:borderStyle := WVGFRAME_RECT + + oTBar:buttonWidth := 28 + oTBar:buttonHeight := 26 + + oTBar:imageWidth := 26 + oTBar:imageHeight := 24 + + oTBar:showToolTips := .t. + + oTBar:create() + + oTBar:addItem( "New" , hb_DirBase() + 'v_new.bmp' ) + oTBar:addItem( "Select" , hb_DirBase() + 'v_selct1.bmp' ) + oTBar:addItem( ) + oTBar:addItem( "FontDlg" , hb_DirBase() + 'v_calend.bmp' ) + oTBar:addItem( "Tools" , hb_DirBase() + 'v_lock.bmp' ) + oTBar:addItem( "Index" , hb_DirBase() + 'v_index.bmp' ) + oTBar:addItem( ) + oTBar:addItem( "Show" , hb_DirBase() + 'v_clclt.bmp' ) + oTBar:addItem( "Hide" , hb_DirBase() + 'v_notes1.bmp' ) + + RETURN oTBar + +//----------------------------------------------------------------------// + +Static Function MyFunctionXbp( nMode ) + + do case + case nMode == 1 + tone( MUSIC_WAITON[1], 1 ) + tone( MUSIC_WAITON[2], 1 ) + + case nMode == 2 + tone( MUSIC_WAITON[2], 1 ) + tone( MUSIC_WAITON[1], 1 ) + + case nMode == 3 + WVG_MessageBox( , "Button clicked!" ) + + case nMode == 101 // Charge + Eval( {|| tone(523,2),tone(698,2),tone(880,2),tone(1046,4),tone(880,2),tone(1046,8) } ) + + case nMode == 102 // NannyBoo + AEval( {{196,2},{196,2},{164,2},{220,2},{196,4},{164,4}}, {|a| tone(a[1],a[2]) } ) + + case nMode == 103 // BADKEY + tone( 480,0.25 ) + tone( 240,0.25 ) + + endcase + + Return nil + +//----------------------------------------------------------------------// + +STATIC FUNCTION ExeFontDialogXbp( oCrt ) + LOCAL oFontDlg + + STATIC nMode := 0 + + oFontDlg := WvgFontDialog():new( oCrt ) + + oFontDlg:title := 'Select a Screen Font' + oFontDlg:aPos := { 150,150 } + oFontDlg:buttonApply := .t. + oFontDlg:activateApply := {|| NIL } + oFontDlg:familyName := "Courier New" + oFontDlg:strikeout := .T. + oFontDlg:underscore := .f. + //oFontDlg:activateOk := {|| WVG_MessageBox( , 'activateOK Event Handelled in Windows!' ) } + oFontDlg:nominalPointSize := 12 + + //oFontDlg:size := .f. + //oFontDlg:style := .f. + + oFontDlg:create() + + // Every 2nd FontDialog will be MODAL + oFontDlg:display( ++nMode % 2 ) + + oFontDlg:destroy() + + RETURN nil + +//----------------------------------------------------------------------//