diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 11d95d26bd..269f7ae53d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,42 @@ 2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2008-11-22 15:39 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * harbour/contrib/gtwvg/gtwvg.c + ! Fixed to honor parent GT if that is alien. + + * harbour/contrib/gtwvg/wvggui.c + ! Thorough synchronized hb_gtInfo() slots. + Every info gives results as expected, the only + poiint to remeber is that those values are based on :fontHeight/Width + set by the user at startup, though the font is never created. + So MaxCol() will return the ( Windows client area size / fontWidth ). + At any given moment this value is measured from actual size of the + window. Though this information is irrelevant in this context + but still it works. + + * harbour/contrib/gtwvg/wvgsink.c + ! Fixed few left-over unreleased memory blocks. + More synchronized code. + + ; TOFIX: With some active-x's, for example, Shell.Explorer.2, + object never unreference itself to 0 and hence GlobalAlloc()ated + memory never gets released. Though I made extensive debugging + but do not know where I should look into this matter. + + * harbour/contrib/gtwvg/wvgwin.c + + Added few more Win_* functions. + + * harbour/contrib/gtwvg/wvgax.prg + * harbour/contrib/gtwvg/wvgcrt.prg + * harbour/contrib/gtwvg/wvgdlg.prg + ! More synchronizations, method implementations, etc. + Still a work in progress. + + * harbour/contrib/gtwvg/tests/demowvg.prg + ! Changed menu prompts to depict correct usage. + + Added more prompts and deleted unwanted ones. + 2008-11-19 21:49 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * bin/hb-func.sh ! hbw32 -> hbwin diff --git a/harbour/contrib/gtwvg/gtwvg.c b/harbour/contrib/gtwvg/gtwvg.c index ef20df3d69..8ada3c3c86 100644 --- a/harbour/contrib/gtwvg/gtwvg.c +++ b/harbour/contrib/gtwvg/gtwvg.c @@ -2023,19 +2023,27 @@ static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT ) { HWND hWnd, hWndParent; LPTSTR szAppName; + BOOL bByConf; szAppName = HB_TCHAR_CONVTO( hb_cmdargARGV()[ 0 ] ); + bByConf = FALSE; hWndParent = NULL; if( pWVT->pPP->bConfigured ) { - PHB_GT pGTp = hb_gt_ItemBase( pWVT->pPP->pParentGT ); + PHB_GT pGTp = NULL; + if( pWVT->pPP->pParentGT ) + { + pGTp = hb_gt_ItemBase( pWVT->pPP->pParentGT ); + } if( pGTp ) { PHB_GTWVT pWVTp = HB_GTWVT_GET( pGTp ); - hWndParent = pWVTp->hWnd; + if( pWVTp ) + { + hWndParent = pWVTp->hWnd; + } hb_gt_BaseFree( pGTp ); - if( hWndParent ) { RECT rc; @@ -2060,31 +2068,36 @@ static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT ) pWVT->pPP->x = pt.x; pWVT->pPP->y = pt.y; + + bByConf = TRUE; } } + } + + // This can happen if the pGTp is alien to this GT + // TOFIX: + if( !bByConf ) + { + POINT pt; + + if( pWVT->pPP->bRowCols ) + { + pt.x = ( pWVT->PTEXTSIZE.x * pWVT->pPP->y ); + pt.y = ( pWVT->PTEXTSIZE.y * pWVT->pPP->x ); + + pWVT->ROWS = pWVT->pPP->width; + pWVT->COLS = pWVT->pPP->height; + } else { - POINT pt; - - if( pWVT->pPP->bRowCols ) - { - pt.x = ( pWVT->PTEXTSIZE.x * pWVT->pPP->y ); - pt.y = ( pWVT->PTEXTSIZE.y * pWVT->pPP->x ); - - pWVT->ROWS = pWVT->pPP->width; - pWVT->COLS = pWVT->pPP->height; - } - else - { - pt.x = pWVT->pPP->x; - pt.y = pWVT->pPP->y; - } - pWVT->pPP->x = pt.x; - pWVT->pPP->y = pt.y; - - if( pWVT->pPP->y < 0 ) - pWVT->CentreWindow = TRUE; + pt.x = pWVT->pPP->x; + pt.y = pWVT->pPP->y; } + pWVT->pPP->x = pt.x; + pWVT->pPP->y = pt.y; + + if( pWVT->pPP->y < 0 ) + pWVT->CentreWindow = TRUE; } hWnd = CreateWindowEx( @@ -2117,21 +2130,18 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT ) hb_errInternal( 10001, "Failed to create WVT window", NULL, NULL ); hb_gt_wvt_InitWindow( pWVT, pWVT->ROWS, pWVT->COLS ); - /* Set icon */ if( pWVT->hIcon ) { SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */ SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */ } - /* Set default window title */ { PHB_FNAME pFileName = hb_fsFNameSplit( hb_cmdargARGV()[ 0 ] ); hb_gt_wvt_SetWindowTitle( pWVT->hWnd, pFileName->szName ); hb_xfree( pFileName ); } - /* Create "Mark" prompt in SysMenu to allow console type copy operation */ { HMENU hSysMenu = GetSystemMenu( pWVT->hWnd, FALSE ); @@ -2166,7 +2176,6 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT ) iCmdShow = SW_SHOWNORMAL; } } - ShowWindow( pWVT->hWnd, iCmdShow ); UpdateWindow( pWVT->hWnd ); } @@ -2181,7 +2190,6 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT ) hb_wvt_gtCreateToolTipWindow( pWVT ); } } - return TRUE; } @@ -2506,93 +2514,12 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) break; - /* - switch( pWVT->fontWeight ) - { - case FW_THIN: - case FW_EXTRALIGHT: - case FW_LIGHT: - iVal = HB_GTI_FONTW_THIN; - break; - - case FW_DONTCARE: - case FW_NORMAL: - case FW_MEDIUM: - iVal = HB_GTI_FONTW_NORMAL; - break; - - case FW_SEMIBOLD: - case FW_BOLD: - case FW_EXTRABOLD: - case FW_HEAVY: - iVal = HB_GTI_FONTW_BOLD; - break; - - default: - iVal = 0; - break; - } - pInfo->pResult = hb_itemPutNI( pInfo->pResult, iVal ); - if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) - { - // store font status for next operation on fontsize // - switch( hb_itemGetNI( pInfo->pNewVal ) ) - { - case HB_GTI_FONTW_THIN: - pWVT->fontWeight = FW_LIGHT; - break; - case HB_GTI_FONTW_NORMAL: - pWVT->fontWeight = FW_NORMAL; - break; - case HB_GTI_FONTW_BOLD: - pWVT->fontWeight = FW_BOLD; - break; - } - } - break; - */ case HB_GTI_FONTQUALITY: pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->fontQuality ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) pWVT->fontQuality = hb_itemGetNI( pInfo->pNewVal ); break; - /* - switch( pWVT->fontQuality ) - { - case ANTIALIASED_QUALITY: - iVal = HB_GTI_FONTQ_HIGH; - break; - case DEFAULT_QUALITY: - case DRAFT_QUALITY: - iVal = HB_GTI_FONTQ_NORMAL; - break; - case NONANTIALIASED_QUALITY: - case PROOF_QUALITY: - iVal = HB_GTI_FONTQ_DRAFT; - break; - default: - iVal = 0; - break; - } - pInfo->pResult = hb_itemPutNI( pInfo->pResult, iVal ); - if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) - { - switch( hb_itemGetNI( pInfo->pNewVal ) ) - { - case HB_GTI_FONTQ_HIGH: - pWVT->fontQuality = ANTIALIASED_QUALITY; - break; - case HB_GTI_FONTQ_NORMAL: - pWVT->fontQuality = DEFAULT_QUALITY; - break; - case HB_GTI_FONTQ_DRAFT: - pWVT->fontQuality = DRAFT_QUALITY; - break; - } - } - break; - */ case HB_GTI_SCREENHEIGHT: pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->PTEXTSIZE.y * pWVT->ROWS ); @@ -3826,6 +3753,13 @@ static void hb_wvt_gtCreateObjects( PHB_GTWVT pWVT ) static void hb_wvt_gtExitGui( PHB_GTWVT pWVT ) { int i; + HMENU hMenu; + + hMenu = GetMenu( pWVT->hWnd ); + if( hMenu ) + { + DestroyMenu( hMenu ); + } for( i = 0; i < WVT_DLGML_MAX; i++ ) { diff --git a/harbour/contrib/gtwvg/tests/demowvg.prg b/harbour/contrib/gtwvg/tests/demowvg.prg index 819d105ef5..436de73398 100644 --- a/harbour/contrib/gtwvg/tests/demowvg.prg +++ b/harbour/contrib/gtwvg/tests/demowvg.prg @@ -292,6 +292,7 @@ PROCEDURE Main( cDSN ) WvtSetKeys( .f. ) Wvt_SetPopupMenu( hPopup ) + Popups( 1, .t. ) pGT_[ 1 ] := NIL RETURN @@ -1327,7 +1328,9 @@ FUNCTION CreateMainMenu() oMenu := WvtMenu():new():create() oMenu:Caption:= "Wvt*Classes" - oMenu:AddItem( "Dialog One", {|| MyDialogOne() } ) + oMenu:AddItem( "Dialog One . New Window . Threaded", {|| MyDialogOne( 1 ) } ) + oMenu:AddItem( "Dialog One . Main Window . Primary Thread", {|| MyDialogOne( 2 ) } ) + oMenu:AddItem( "-" ) oMenu:AddItem( "Dialog Two", {|| MyDialogTwo() } ) oMenu:AddItem( "-" ) oMenu:AddItem( "Exit" , {|| __keyboard( K_ESC ) } ) @@ -1335,12 +1338,15 @@ FUNCTION CreateMainMenu() oMenu := wvtMenu():new():create() oMenu:Caption := "Traditional" - oMenu:AddItem( "Next Gets" , {|| WvtNextGets() } ) - oMenu:AddItem( "Gets : Console", {|| WvtConsoleGets() } ) - oMenu:AddItem( "Browser" , {|| WvtMyBrowse() } ) - oMenu:AddItem( "Partial Screen", {|| WvtPartialScreen() } ) + oMenu:AddItem( "Gets . GTWVG . Threaded" , {|| WvtNextGets() } ) oMenu:AddItem( "-") - oMenu:AddItem( "Wvt Lines" , {|| WvtLines() } ) + oMenu:AddItem( "Gets . GTWVT . Threaded" , {|| WvtConsoleGets() } ) + oMenu:AddItem( "-") + oMenu:AddItem( "Browser . GTWVG . Threaded " , {|| WvtMyBrowse() } ) + oMenu:AddItem( "-") + oMenu:AddItem( "Partial Screen . Main Window", {|| WvtPartialScreen() } ) + oMenu:AddItem( "-") + oMenu:AddItem( "Wvt Lines . Main Window" , {|| WvtLines() } ) g_oMenuBar:addItem( "",oMenu ) oMenu := wvtMenu():new():create() @@ -1356,17 +1362,15 @@ FUNCTION CreateMainMenu() oMenu:AddItem( "Shrink" ,{|| WvtWindowExpand( -1 ) } ) oMenu:AddItem( "-") oMenu:AddItem( "Minimize",{|| Wvt_Minimize() } ) + oMenu:AddItem( "Maximize",{|| hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) } ) g_oMenuBar:addItem( "",oMenu) oMenu := wvtMenu():new():create() oMenu:Caption:= "Modeless Dialogs" - oMenu:AddItem( "Dialog First" ,{|| DynDialog_2() } ) + oMenu:AddItem( "Dynamic Dialog . Modeless" ,{|| DynDialog_2( 1 ) } ) + oMenu:AddItem( "Dynamic Dialog . Modal " ,{|| DynDialog_2( 2 ) } ) oMenu:AddItem( "-") - oMenu:AddItem( "Slide Show" ,{|| DlgSlideShow() } ) - oMenu:AddItem( "-") - oMenu:AddItem( "Dialog Scond" ,{|| DynDialog_1() } ) - oMenu:AddItem( "-") - oMenu:AddItem( "An Experiment",{|| Experiment_1() } ) + oMenu:AddItem( "Slide Show . Modeless" ,{|| DlgSlideShow() } ) g_oMenuBar:addItem( "",oMenu) oMenu := wvtMenu():new():create() @@ -1401,24 +1405,21 @@ STATIC FUNCTION ActivateMenu( oMenu ) RETURN ( NIL ) //-------------------------------------------------------------------// -STATIC FUNCTION MyDialogOne() +STATIC FUNCTION MyDialogOne( nMode ) Local bBlock - static n := 0 - if hb_mtvm() - n++ - if n%2 == 0 + if nMode == 2 MyDialogOne_X() else bBlock := { |oCrt| ; - hb_gtReload( 'WVG' ) ,; oCrt := WvgCrt():New( , , { -1,-1 }, { 54,184 }, , .f. ), ; oCrt:fontName := 'Courier',; oCrt:fontHeight := 13 ,; oCrt:fontWidth := 0 ,; oCrt:Create() ,; - MyDialogOne_X( oCrt ) ; + MyDialogOne_X( oCrt ) ,; + oCrt:destroy() ; } hb_threadStart( bBlock ) endif @@ -1811,73 +1812,6 @@ STATIC FUNCTION ExeProgressBar( oPBar, oPBar3 ) //-------------------------------------------------------------------// -Function DynDialog_1() - Local hDlg, aDlg, nStyle - - Static nInfo := 1 - nInfo++ - - nStyle := + WS_CAPTION + WS_SYSMENU ; - + WS_GROUP + WS_TABSTOP + DS_SETFONT ; - + WS_THICKFRAME + WS_VISIBLE + WS_POPUP - - aDlg := Wvt_MakeDlgTemplate( 1, 2, 15, 40, {0,0,0,0}, ; - ltrim( str( nInfo,10,0 ) ) + " - Modeless Dialog", nStyle ) - - nStyle := WS_VISIBLE + WS_TABSTOP + ES_AUTOVSCROLL + ES_MULTILINE + ES_WANTRETURN + WS_BORDER + WS_VSCROLL - aDlg := Wvt_AddDlgItem( aDlg, 1, 2, 9, 28, {}, 10, "EDIT" , nStyle, /* cText, nHelpId, nExStyle */ ) - - nStyle := WS_VISIBLE + SS_ETCHEDHORZ - aDlg := Wvt_AddDlgItem( aDlg, 12, 2, 1, 36, {}, 12, "STATIC", nStyle ) - - nStyle := WS_VISIBLE + WS_TABSTOP + BS_AUTOCHECKBOX - aDlg := Wvt_AddDlgItem( aDlg, 13, 2, 1, 10, {}, 11, "BUTTON", nStyle, "Is It Checked?" ) - - hDlg := Wvt_CreateDialog( aDlg, .f., "DynDlgProc_1" ) - - Return hDlg - -//-------------------------------------------------------------------// - -Function DynDlgProc_1( hDlg, nMsg, wParam, lParam ) - Local cText, lClicked - - Switch ( nMsg ) - - case WM_INITDIALOG - Win_SetDlgItemText( hDlg, 10, "This is multiline text which will be displayed in the edit window!" ) - Win_CheckDlgButton( hDlg, 11, .t. ) - exit - - case WM_DESTROY - // Do whatevert you want to do with cText - // Each box will retrieve its own text. - // - cText := Win_GetDlgItemText( hDlg, 10 ) - - exit - - case WM_TIMER - // Do some processing - - exit - - case WM_COMMAND - do case - - case wParam == 11 - lClicked := ( Win_IsDlgButtonChecked( hDlg,11 ) == 1 ) - Win_MessageBox( hDlg, "Button " + iif( lClicked, "Clicked", "Unclicked" ), "CheckBoxStatus" ) - - endcase - exit - - end - - Return .f. - -//-------------------------------------------------------------------// - #define ID_BTN_OK 1 #define ID_MLE 10 #define ID_CHK_SATIS 11 @@ -1900,12 +1834,9 @@ Function DynDlgProc_1( hDlg, nMsg, wParam, lParam ) //-------------------------------------------------------------------// -Function DynDialog_2() +Function DynDialog_2( nInfo ) Local hDlg, aDlg, nStyle, nTimerTicks, cDlgIcon, cDlgProc, lOnTop, hMenu, nProc, bDlgProc - Static nInfo := 0 - nInfo++ - 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}, ; @@ -1977,7 +1908,7 @@ Function DynDialog_2() cDlgIcon := "v_notes.ico" nTimerTicks := 1000 // 1 second - if nInfo % 2 == 1 + if nInfo == 2 // Modal Dialog // //hDlg := Wvt_DialogBox( aDlg, bDlgProc, Wvt_GetWindowHandle() ) @@ -2255,8 +2186,7 @@ Function ExecuteActiveX( nActiveX ) SetColor( 'N/W' ) CLS #else - oCrt := WvgDialog():init( , , { 30,30 }, { 400,500 }, , .f. ) - + oCrt := WvgDialog():new( , , { 30,30 }, { 500,550 }, , .f. ) oCrt:closable := .f. oCrt:create() #endif @@ -2294,11 +2224,12 @@ Static Function ExeActiveX( oCrt, nActiveX ) 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( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } ) 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 @@ -2310,19 +2241,20 @@ Static Function ExeActiveX( oCrt, nActiveX ) hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' ) oCom:CLSID := 'AnalogClockControl.AnalogClock' oCom:Id := 5 - oCom:mapEvent( evDblClk, {|| DoModalWindow() ,; - oCom:Value := .75632 ,; - oCom:BackColor := RGB( 0,140,210 ),; - oCom:Refresh() ,; - oCom:ShowSecondsHand := .t. ,; - oCom:Hands3D := .t. ,; - oCom:Refresh() } ) + + oCom:mapEvent( evDblClk, {|| oCom:Value := .75632 ,; + oCom:BackColor := RGB( 0,140,210 ),; + oCom:Refresh() ,; + oCom:ShowSecondsHand := .t. ,; + oCom:Hands3D := .t. ,; + oCom:Refresh() } ) oCom:mapEvent( evBtnUp, {|nBtn,nShift,nX,nY| if( nBtn == 2, lEnd := .t., NIL ) } ) case nActiveX == 3 hb_gtInfo( HB_GTI_WINTITLE, 'file://C:\harbour\contrib\gtwvg\tests\myharu.pdf' ) oCom:CLSID := 'file://C:\harbour\contrib\gtwvg\tests\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 ]' ) @@ -2351,12 +2283,8 @@ Static Function ExeActiveX( oCrt, nActiveX ) endif do while !( lEnd ) - nKey := inkey() -#if 0 -if nKey <> 0 - hb_toOutDebug( 'nKey = %i : %i ', nKey, HB_K_RESIZE ) -endif -#endif + nKey := inkey( 0.1 ) + if nKey == HB_K_RESIZE ResizeMe( oCom ) @@ -2364,6 +2292,9 @@ endif 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 @@ -2536,7 +2467,9 @@ endif enddo oCom:Destroy() + oCom := NIL endif + Return nil //----------------------------------------------------------------------// Function ConfigureRMChart( RMChart ) @@ -2605,12 +2538,6 @@ Static Function DoModalWindow() pGT_[ 3 ] := hb_gtSelect() - #if 0 - hb_toOutDebug( "Browser:title = %s", hb_gtInfoEx( pGT_[ 2 ], HB_GTI_WINTITLE ) ) - hb_toOutDebug( "Application:title = %s", hb_gtInfoEx( pGT_[ 1 ], HB_GTI_WINTITLE ) ) - hb_toOutDebug( "This:title = %s", hb_gtInfoEx( pGT_[ 3 ], HB_GTI_WINTITLE ) ) - #endif - // Here goes the Clipper Code // SetColor( 'N/W' ) @@ -2621,12 +2548,6 @@ Static Function DoModalWindow() if nSel == 0 .or. nSel == 1 exit - elseif nSel == 1 - #if 0 - hb_gtInfoEx( pGT_[ 2 ], HB_GTI_SETPOS_XY, 40, 40 ) - hb_gtInfoEx( pGT_[ 2 ], HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) - #endif - endif enddo @@ -2637,23 +2558,3 @@ Static Function DoModalWindow() Return nil //----------------------------------------------------------------------// -Function Experiment_1() - hb_threadStart( {|| ExperimentWGU() } ) - Return nil -//----------------------------------------------------------------------// -Static Function ExperimentWGU() - Local nKey - - hb_gtReload( 'WGU' ) - //hb_gtInfo( HB_GTI_RESIZABLE, .f. ) - hb_gtInfo( HB_GTI_WINTITLE, 'WGU Dialog Under GT Control' ) - - do while .t. - nKey := inkey( 0.1 ) - if nKey == 27 - exit - endif - enddo - Return NIL -//----------------------------------------------------------------------// - diff --git a/harbour/contrib/gtwvg/wvgax.prg b/harbour/contrib/gtwvg/wvgax.prg index e48465a7c9..e31d93770b 100644 --- a/harbour/contrib/gtwvg/wvgax.prg +++ b/harbour/contrib/gtwvg/wvgax.prg @@ -138,7 +138,6 @@ CLASS WvgActiveXControl FROM TOleAuto, WvgWindow PROTECTED: METHOD adviseEvents() - METHOD unadviseEvents() ENDCLASS @@ -191,18 +190,45 @@ METHOD Create( oParent, oOwner, aPos, aSize, aPresParams, lVisible, cCLSID, cLic //----------------------------------------------------------------------// METHOD Destroy() CLASS WvgActiveXControl - ::UnadviseEvents() - IF Win_IsWindow( ::hWnd ) - Win_DestroyWindow( ::hWnd ) + BEGIN SEQUENCE + IF hb_IsNumeric( ::hObj ) .and. ::hObj <> 0 +//hb_ToOutDebug( '......................Release....................' ) + + IF Win_IsWindow( ::hWnd ) + Win_DestroyWindow( ::hWnd ) + ENDIF + + IF ::hSink <> 0 + HB_AX_ShutDownConnectionPoint( ::hSink ) + ::hSink := NIL + ENDIF + + IF --nRef == 0 +// HB_AX_AtlAxWinTerm() + ENDIF +//hb_ToOutDebug( '<< Release >>' ) ENDIF - //::hObj := NIL + ENDSEQUENCE - IF --nRef == 0 - HB_AX_AtlAxWinTerm() - ENDIF RETURN NIL //----------------------------------------------------------------------// +METHOD adviseEvents() CLASS WvgActiveXControl + LOCAL n, hSink, xRet + + xRet := HB_AX_SetupConnectionPoint( ::hObj, @hSink, @n, ::hEvents ) + ::hSink := hSink + + RETURN xRet +//----------------------------------------------------------------------// +METHOD mapEvent( nEvent, bBlock ) + + if hb_isNumeric( nEvent ) .and. hb_isBlock( bBlock ) + ::hEvents[ nEvent ] := { bBlock } + endif + + RETURN Self +//----------------------------------------------------------------------// METHOD inheritPresParams() CLASS WvgActiveXControl Local lSuccess := .t. @@ -241,28 +267,6 @@ METHOD mouseMove() CLASS WvgActiveXControl METHOD activate() CLASS WvgActiveXControl RETURN Self //----------------------------------------------------------------------// -METHOD adviseEvents() CLASS WvgActiveXControl - LOCAL n - - RETURN HB_AX_SetupConnectionPoint( ::hObj, @::hSink, @n, ::hEvents ) -//----------------------------------------------------------------------// -METHOD unadviseEvents() CLASS WvgActiveXControl - - IF ::hSink <> 0 - HB_AX_ShutDownConnectionPoint( ::hSink ) - ::hSink := 0 - ENDIF - - RETURN NIL -//----------------------------------------------------------------------// -METHOD mapEvent( nEvent, bBlock ) - - if hb_isNumeric( nEvent ) .and. hb_isBlock( bBlock ) - ::hEvents[ nEvent ] := { bBlock } - endif - - RETURN Self -//----------------------------------------------------------------------// // Class AutomationObject //----------------------------------------------------------------------// #if 0 diff --git a/harbour/contrib/gtwvg/wvgcrt.prg b/harbour/contrib/gtwvg/wvgcrt.prg index c6b19c0a73..80eb33369a 100644 --- a/harbour/contrib/gtwvg/wvgcrt.prg +++ b/harbour/contrib/gtwvg/wvgcrt.prg @@ -319,7 +319,6 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCr /* CreateWindow() be forced to execute */ ? ' ' - ::hWnd := hb_gtInfo( HB_GTI_SPEC, HB_GTS_WINDOWHANDLE ) hb_gtInfo( HB_GTI_RESIZABLE , ::resizable ) @@ -338,7 +337,7 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCr endif if ::lModal - hb_gtInfo( HB_GTI_DISABLE, ::pGTp ) + //hb_gtInfo( HB_GTI_DISABLE, ::pGTp ) endif if ::visible diff --git a/harbour/contrib/gtwvg/wvgdlg.prg b/harbour/contrib/gtwvg/wvgdlg.prg index de38d7f467..b01dd84b30 100644 --- a/harbour/contrib/gtwvg/wvgdlg.prg +++ b/harbour/contrib/gtwvg/wvgdlg.prg @@ -108,7 +108,13 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgDi endif hb_gtInfo( HB_GTI_PRESPARAMS, { ::exStyle, ::style, ::aPos[ 1 ], ::aPos[ 2 ], ; - ::aSize[ 1 ], ::aSize[ 2 ], ::pGTp, .F., .f. } ) + ::aSize[ 1 ], ::aSize[ 2 ], ::pGTp, .F., .F. } ) + + if ::visible + hb_gtInfo( HB_GTI_SPEC, HB_GTS_SHOWWINDOW, SW_NORMAL ) + else + hb_gtInfo( HB_GTI_SPEC, HB_GTS_SHOWWINDOW, SW_HIDE ) + endif ::hWnd := hb_gtInfo( HB_GTI_SPEC, HB_GTS_WINDOWHANDLE ) @@ -131,7 +137,6 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgDi endif if ::visible - hb_gtInfo( HB_GTI_SPEC, HB_GTS_SHOWWINDOW, SW_NORMAL ) ::lHasInputFocus := .t. endif @@ -146,5 +151,9 @@ METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS Wv RETURN Self //----------------------------------------------------------------------// METHOD destroy() CLASS WvgDialog + + ::pGT := NIL + ::pGTp := NIL + RETURN Self //----------------------------------------------------------------------// diff --git a/harbour/contrib/gtwvg/wvggui.c b/harbour/contrib/gtwvg/wvggui.c index 3a72ce159f..c547155e5b 100644 --- a/harbour/contrib/gtwvg/wvggui.c +++ b/harbour/contrib/gtwvg/wvggui.c @@ -1148,6 +1148,11 @@ static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT ) NULL ); /* lpParam */ HB_TCHAR_FREE( szAppName ); + + + ShowWindow( pWVT->hWnd, pWVT->pPP->bVisible ? SW_NORMAL : SW_HIDE ); + UpdateWindow( pWVT->hWnd ); + return hWnd; } @@ -1178,9 +1183,6 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT ) hb_gt_wvt_SetWindowTitle( pWVT->hWnd, pFileName->szName ); hb_xfree( pFileName ); } - - ShowWindow( pWVT->hWnd, SW_NORMAL ); - UpdateWindow( pWVT->hWnd ); } return TRUE; @@ -1214,8 +1216,8 @@ static void hb_gt_wvt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil HB_GTSELF_RESIZE( pGT, pWVT->ROWS, pWVT->COLS ); HB_GTSELF_SEMICOLD( pGT ); - hb_gt_wvt_CreateConsoleWindow( pWVT ); - hb_gt_wvt_ProcessMessages( pWVT ); +// hb_gt_wvt_CreateConsoleWindow( pWVT ); +// hb_gt_wvt_ProcessMessages( pWVT ); } /* ********************************************************************** */ @@ -1284,121 +1286,116 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_FULLSCREEN: case HB_GTI_KBDSUPPORT: case HB_GTI_ISGRAPHIC: + { pInfo->pResult = hb_itemPutL( pInfo->pResult, TRUE ); break; - + } case HB_GTI_ISUNICODE: + { #if defined( UNICODE ) pInfo->pResult = hb_itemPutL( pInfo->pResult, TRUE ); #else pInfo->pResult = hb_itemPutL( pInfo->pResult, FALSE ); #endif break; - + } case HB_GTI_INPUTFD: + { pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) GetStdHandle( STD_INPUT_HANDLE ) ); break; - + } case HB_GTI_OUTPUTFD: + { pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) GetStdHandle( STD_OUTPUT_HANDLE ) ); break; - + } case HB_GTI_ERRORFD: + { pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) GetStdHandle( STD_ERROR_HANDLE ) ); break; - + } case HB_GTI_SETFONT: { - #if 0 pInfo->pResult = hb_itemPutL( pInfo->pResult, FALSE ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) { - HFONT hFont = hb_gt_wvt_GetFont( hb_arrayGetCPtr( pInfo->pNewVal, 1 ), - hb_arrayGetNI( pInfo->pNewVal, 2 ), - hb_arrayGetNI( pInfo->pNewVal, 3 ), - hb_arrayGetNI( pInfo->pNewVal, 4 ), - hb_arrayGetNI( pInfo->pNewVal, 5 ), - pWVT->CodePage ); - if( hFont ) - { - if( hb_gt_wvt_ValidWindowSize( pWVT->hWnd, pWVT->ROWS, pWVT->COLS, hFont, hb_arrayGetNI( pInfo->pNewVal, 3 ) ) ) - { - pInfo->pResult = hb_itemPutL( pInfo->pResult, TRUE ); + PHB_ITEM pSome; - hb_strncpy( pWVT->fontFace, hb_arrayGetCPtr( pInfo->pNewVal, 1 ), sizeof( pWVT->fontFace ) - 1 ); - pWVT->fontHeight = hb_arrayGetNI( pInfo->pNewVal, 2 ); - pWVT->fontWidth = hb_arrayGetNI( pInfo->pNewVal, 3 ); - pWVT->fontWeight = hb_arrayGetNI( pInfo->pNewVal, 4 ); - pWVT->fontQuality = hb_arrayGetNI( pInfo->pNewVal, 5 ); - if( pWVT->hWnd ) - { - //hb_gt_wvt_ResetWindowSize( pWVT ); - //HB_GTSELF_REFRESH( pGT ); - } - } - DeleteObject( hFont ); + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, 1 ); + if( hb_itemType( pSome ) & HB_IT_STRING ) + { + hb_strncpy( pWVT->fontFace, hb_itemGetCPtr( pSome ), sizeof( pWVT->fontFace ) - 1 ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, 2 ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->fontHeight = hb_arrayGetNI( pInfo->pNewVal, 2 ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, 3 ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->fontWidth = hb_arrayGetNI( pInfo->pNewVal, 3 ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, 4 ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->fontWeight = hb_arrayGetNI( pInfo->pNewVal, 4 ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, 5 ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->fontQuality = hb_arrayGetNI( pInfo->pNewVal, 5 ); } } - #endif - break; } case HB_GTI_FONTSIZE: - pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->PTEXTSIZE.y ); - #if 0 + { + pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->fontHeight ); + iVal = hb_itemGetNI( pInfo->pNewVal ); if( iVal > 0 ) { - HFONT hFont = hb_gt_wvt_GetFont( pWVT->fontFace, iVal, pWVT->fontWidth, pWVT->fontWeight, pWVT->fontQuality, pWVT->CodePage ); - - if( hFont ) - { - pWVT->fontHeight = iVal; - #if 0 - if( pWVT->hWnd ) - { - hb_gt_wvt_ResetWindowSize( pWVT ); - HB_GTSELF_REFRESH( pGT ); - } - #endif - DeleteObject( hFont ); - } + pWVT->fontHeight = iVal; } - #endif break; - + } case HB_GTI_FONTWIDTH: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->fontWidth ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) pWVT->fontWidth = hb_itemGetNI( pInfo->pNewVal ); break; - + } case HB_GTI_FONTNAME: + { pInfo->pResult = hb_itemPutC( pInfo->pResult, pWVT->fontFace ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) { hb_strncpy( pWVT->fontFace, hb_itemGetCPtr( pInfo->pNewVal ), sizeof( pWVT->fontFace ) - 1 ); } break; - + } case HB_GTI_FONTWEIGHT: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->fontWeight ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) pWVT->fontWeight = hb_itemGetNI( pInfo->pNewVal ); break; - + } case HB_GTI_FONTQUALITY: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->fontQuality ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) pWVT->fontQuality = hb_itemGetNI( pInfo->pNewVal ); break; - + } case HB_GTI_SCREENHEIGHT: { RECT rc; @@ -1406,9 +1403,9 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pInfo->pResult = hb_itemPutNI( pInfo->pResult, rc.bottom - rc.top ); iVal = hb_itemGetNI( pInfo->pNewVal ); - if( iVal > 0 ) + if( iVal > 0 && pWVT->hWnd ) { - // Set windows new height + MoveWindow( pWVT->hWnd, 0, 0, rc.right-rc.left, iVal, TRUE ); } break; } @@ -1419,9 +1416,9 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pInfo->pResult = hb_itemPutNI( pInfo->pResult, rc.right - rc.left ); iVal = hb_itemGetNI( pInfo->pNewVal ); - if( iVal > 0 ) + if( iVal > 0 && pWVT->hWnd ) { - //HB_GTSELF_SETMODE( pGT, pWVT->ROWS, ( USHORT ) ( iVal / pWVT->PTEXTSIZE.x ) ); + MoveWindow( pWVT->hWnd, 0, 0, iVal, rc.bottom-rc.top, TRUE ); } break; } @@ -1450,7 +1447,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) hDesk = GetDesktopWindow(); GetClientRect( hDesk, &rDesk ); pInfo->pResult = hb_itemPutNI( pInfo->pResult, - ( rDesk.right - rDesk.left ) / pWVT->PTEXTSIZE.x ); + ( rDesk.right - rDesk.left ) / pWVT->fontWidth ); break; } case HB_GTI_DESKTOPROWS: @@ -1460,10 +1457,11 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) hDesk = GetDesktopWindow(); GetClientRect( hDesk, &rDesk ); pInfo->pResult = hb_itemPutNI( pInfo->pResult, - ( rDesk.bottom - rDesk.top ) / pWVT->PTEXTSIZE.y ); + ( rDesk.bottom - rDesk.top ) / pWVT->fontHeight ); break; } case HB_GTI_WINTITLE: + { if( pWVT->hWnd ) { char * szTitle = NULL; @@ -1475,20 +1473,17 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) hb_gt_wvt_SetWindowTitle( pWVT->hWnd, hb_itemGetCPtr( pInfo->pNewVal ) ); } break; - + } case HB_GTI_CODEPAGE: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->CodePage ); iVal = hb_itemGetNI( pInfo->pNewVal ); if( iVal > 0 && iVal != pWVT->CodePage ) { pWVT->CodePage = iVal; - #if 0 - if( pWVT->hWnd ) - hb_gt_wvt_ResetWindowSize( pWVT ); - #endif } break; - + } case HB_GTI_ICONFILE: { if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) ) @@ -1513,7 +1508,6 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon ); break; } - case HB_GTI_ICONRES: { if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) @@ -1556,22 +1550,29 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon ); break; } - case HB_GTI_VIEWMAXWIDTH: - pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->COLS ); + { + RECT rc; + GetClientRect( pWVT->hWnd, &rc ); + pInfo->pResult = hb_itemPutNI( pInfo->pResult, rc.right - rc.left / pWVT->fontWidth ); break; - + } case HB_GTI_VIEWMAXHEIGHT: - pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->ROWS ); + { + RECT rc; + GetClientRect( pWVT->hWnd, &rc ); + pInfo->pResult = hb_itemPutNI( pInfo->pResult, rc.bottom - rc.top / pWVT->fontHeight ); break; - + } case HB_GTI_KBDSHIFTS: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, hb_gt_w32_getKbdState() ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) hb_gt_w32_setKbdState( hb_itemGetNI( pInfo->pNewVal ) ); break; - + } case HB_GTI_CLIPBOARDDATA: + { if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) { hb_gt_w32_setClipboard( pWVT->CodePage == OEM_CHARSET ? @@ -1597,39 +1598,39 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } } break; - + } case HB_GTI_CURSORBLINKRATE: + { pInfo->pResult = hb_itemPutNI( pInfo->pResult, GetCaretBlinkTime() ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) SetCaretBlinkTime( hb_itemGetNI( pInfo->pNewVal ) ); break; - + } case HB_GTI_SCREENSIZE: { + RECT rc; + GetClientRect( pWVT->hWnd, &rc ); + if( !pInfo->pResult ) { pInfo->pResult = hb_itemNew( NULL ); } hb_arrayNew( pInfo->pResult, 2 ); - hb_arraySetNI( pInfo->pResult, 2, pWVT->PTEXTSIZE.y * pWVT->ROWS ); - hb_arraySetNI( pInfo->pResult, 1, pWVT->PTEXTSIZE.x * pWVT->COLS ); -#if 0 + hb_arraySetNI( pInfo->pResult, 2, rc.bottom - rc.top ); + hb_arraySetNI( pInfo->pResult, 1, rc.right - rc.left ); { int iX, iY; iY = hb_arrayGetNI( pInfo->pNewVal,2 ); iX = hb_arrayGetNI( pInfo->pNewVal,1 ); if( iY > 0 ) { - BOOL bOldCentre = pWVT->CentreWindow; - pWVT->CentreWindow = pWVT->bMaximized ? TRUE : FALSE; - HB_GTSELF_SETMODE( pGT, ( USHORT ) ( iY / pWVT->PTEXTSIZE.y ), ( USHORT ) ( iX / pWVT->PTEXTSIZE.x ) ); - pWVT->CentreWindow = bOldCentre; + MoveWindow( pWVT->hWnd, 0, 0, iX, iY, TRUE ); } } -#endif break; } case HB_GTI_RESIZABLE: + { pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bResizable ); if( pInfo->pNewVal ) { @@ -1662,8 +1663,9 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } } break; - + } case HB_GTI_CLOSABLE: + { pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bClosable ); if( pInfo->pNewVal ) { @@ -1684,9 +1686,10 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } } break; - + } case HB_GTI_SETPOS_XY: case HB_GTI_SETPOS_ROWCOL: + { if( pWVT->hWnd && ( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) && ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) ) { @@ -1696,8 +1699,8 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) if( iType == HB_GTI_SETPOS_ROWCOL ) { - y = hb_itemGetNI( pInfo->pNewVal ) * pWVT->PTEXTSIZE.y; - x = hb_itemGetNI( pInfo->pNewVal2 ) * pWVT->PTEXTSIZE.x; + y = hb_itemGetNI( pInfo->pNewVal ) * pWVT->fontHeight; + x = hb_itemGetNI( pInfo->pNewVal2 ) * pWVT->fontWidth; } else { @@ -1712,7 +1715,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) SWP_NOSIZE | SWP_NOZORDER ) ); } break; - + } case HB_GTI_SPEC: { int iMessage = hb_itemGetNI( pInfo->pNewVal ); @@ -1731,44 +1734,59 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pWVT->CentreWindow = hb_arrayGetL( pInfo->pNewVal2, 1 ); if( hb_arrayGetL( pInfo->pNewVal2, 2 ) ) { - #if 0 if( pWVT->hWnd ) - hb_gt_wvt_ResetWindowSize( pWVT ); - #endif + { + RECT rDesk, rApp; + HWND hDesk; + int iLeft, iTop; + + hDesk = GetDesktopWindow(); + GetClientRect( hDesk, &rDesk ); + + GetWindowRect( pWVT->hWnd, &rApp ); + + iLeft = ( ( rDesk.right - rDesk.left ) - ( rApp.right - rApp.left ) ) / 2; + iTop = ( ( rDesk.bottom - rDesk.top ) - ( rApp.bottom - rApp.top ) ) / 2; + + MoveWindow( pWVT->hWnd, iLeft, iTop, ( rApp.right - rApp.left ), ( rApp.bottom - rApp.top ), FALSE ); + } } } break; } case HB_GTS_PROCESSMESSAGES: + { if( pWVT->hWnd ) hb_gt_wvt_ProcessMessages( pWVT ); break; - + } case HB_GTS_KEYBOARD: + { if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) hb_gt_wvt_AddCharToInputQueue( pWVT, hb_itemGetNI( pInfo->pNewVal2 ) ); break; - + } case HB_GTS_RESETWINDOW: - #if 0 + { if( pWVT->hWnd ) - hb_gt_wvt_ResetWindowSize( pWVT ); - #endif + UpdateWindow( pWVT->hWnd ); // hb_gt_wvt_ResetWindowSize( pWVT ); break; - + } case HB_GTS_SETTIMER: - if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY ) + { + if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY && pWVT->hWnd ) SetTimer( pWVT->hWnd, hb_arrayGetNI( pInfo->pNewVal2, 1 ), hb_arrayGetNI( pInfo->pNewVal2, 2 ), NULL ); break; - + } case HB_GTS_KILLTIMER: + { if( pWVT->hWnd ) { if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) KillTimer( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) ); } break; - + } case HB_GTS_SETPOSITION: { if( pWVT->hWnd && ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY ) ) @@ -1785,18 +1803,28 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) break; } case HB_GTS_SHOWWINDOW: + { + if( !pWVT->hWnd ) + { + hb_gt_wvt_CreateConsoleWindow( pWVT ); + hb_gt_wvt_ProcessMessages( pWVT ); + } if( pWVT->hWnd ) { if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) + { ShowWindow( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) ); + UpdateWindow( pWVT->hWnd ); + } } break; - + } case HB_GTS_UPDATEWINDOW: + { if( pWVT->hWnd ) UpdateWindow( pWVT->hWnd ); break; - + } case HB_GTS_SYSTRAYICON: { if( pWVT->hWnd && ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY ) ) @@ -1923,69 +1951,72 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) break; } case HB_GTI_PRESPARAMS: - if ( ! pWVT->hWnd ) + { + if( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) { - if( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) + int iParam = hb_arrayLen( pInfo->pNewVal ); + if( iParam == HB_GTI_PP_SIZE ) { - int iParam = hb_arrayLen( pInfo->pNewVal ); - if( iParam == HB_GTI_PP_SIZE ) + PHB_ITEM pSome; + + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_EXSTYLE ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) { - PHB_ITEM pSome; - - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_EXSTYLE ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->exStyle = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_STYLE ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->style = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_X ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->x = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_Y ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->y = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_WIDTH ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->width = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_HEIGHT ); - if( hb_itemType( pSome ) & HB_IT_NUMERIC ) - { - pWVT->pPP->height = hb_itemGetNInt( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT ); - if( hb_itemType( pSome ) & HB_IT_POINTER ) - { - pWVT->pPP->pParentGT = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT ) ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_VISIBLE ); - if( hb_itemType( pSome ) & HB_IT_LOGICAL ) - { - pWVT->pPP->bVisible = hb_itemGetL( pSome ); - } - pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_ROWCOLS ); - if( hb_itemType( pSome ) & HB_IT_LOGICAL ) - { - pWVT->pPP->bRowCols = hb_itemGetL( pSome ); - } - - /* Flag that caller configured itself */ - pWVT->pPP->bConfigured = TRUE; - pWVT->CentreWindow = FALSE; + pWVT->pPP->exStyle = hb_itemGetNInt( pSome ); } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_STYLE ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->pPP->style = hb_itemGetNInt( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_X ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->pPP->x = hb_itemGetNInt( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_Y ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->pPP->y = hb_itemGetNInt( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_WIDTH ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->pPP->width = hb_itemGetNInt( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_HEIGHT ); + if( hb_itemType( pSome ) & HB_IT_NUMERIC ) + { + pWVT->pPP->height = hb_itemGetNInt( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT ); + if( hb_itemType( pSome ) & HB_IT_POINTER ) + { + pWVT->pPP->pParentGT = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT ) ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_VISIBLE ); + if( hb_itemType( pSome ) & HB_IT_LOGICAL ) + { + pWVT->pPP->bVisible = hb_itemGetL( pSome ); + } + pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_ROWCOLS ); + if( hb_itemType( pSome ) & HB_IT_LOGICAL ) + { + pWVT->pPP->bRowCols = hb_itemGetL( pSome ); + } + + /* Flag that caller configured itself */ + pWVT->pPP->bConfigured = TRUE; + pWVT->CentreWindow = FALSE; } } + /* Only possible when it is WvgDialog() Window */ + if( pWVT->hWnd && pWVT->pPP->bConfigured ) + { + MoveWindow( pWVT->hWnd, pWVT->pPP->x, pWVT->pPP->y, pWVT->pPP->width, pWVT->pPP->height, TRUE ); + } break; - + } case HB_GTI_ENABLE: { PHB_GT pGTp = hb_gt_ItemBase( pInfo->pNewVal ); @@ -2019,11 +2050,11 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } break; } - default: + { return HB_GTSUPER_INFO( pGT, iType, pInfo ); + } } - return TRUE; } diff --git a/harbour/contrib/gtwvg/wvgsink.c b/harbour/contrib/gtwvg/wvgsink.c index 712f9a3cd1..ff4671d9a7 100644 --- a/harbour/contrib/gtwvg/wvgsink.c +++ b/harbour/contrib/gtwvg/wvgsink.c @@ -117,18 +117,8 @@ HB_EXPORT void hb_oleItemToVariant( VARIANT *pVariant, PHB_ITEM pItem ); HRESULT hb_oleVariantToItem( PHB_ITEM pItem, VARIANT *pVariant ); -static int s_ev_iid_[ 100 ]; -//----------------------------------------------------------------------// -static int ThisThreadId( void ) -{ - PHB_THREADSTATE pThread; +void HB_EXPORT hb_ToOutDebug( const char * sTraceMsg, ... ); - pThread = ( PHB_THREADSTATE ) hb_vmThreadState(); - if( pThread ) - return( ( int ) pThread->th_no ); - else - return( 0 ); -} //----------------------------------------------------------------------// // these 2 functions are required to send parameters by reference // @@ -217,10 +207,9 @@ typedef struct { DWORD dwEventCookie; char* parent_on_invoke; IID device_event_interface_iid; - PHB_ITEM pSelf; // object to handle the events (optional) - EventMap* pEventMap; // event map - int iEventMapLen; // length of the eventMap + PHB_ITEM pSelf; // object to handle the events (optional) PHB_ITEM pEvents; + int iID_riid; } MyRealIEventHandler; //----------------------------------------------------------------------// @@ -244,8 +233,8 @@ static HRESULT STDMETHODCALLTYPE QueryInterface( IEventHandler *this, REFIID vTa if ( IsEqualIID( vTableGuid, &IID_IUnknown ) ) { *ppv = ( IUnknown * ) this; - /* Increment the count of callers who have an outstanding pointer to this object */ +//hb_ToOutDebug( ".................................if ( IsEqualIID( vTableGuid, &IID_IUnknown ) )" ); this->lpVtbl->AddRef( this ); return S_OK; } @@ -253,16 +242,17 @@ static HRESULT STDMETHODCALLTYPE QueryInterface( IEventHandler *this, REFIID vTa if ( IsEqualIID( vTableGuid, &IID_IDispatch ) ) { *ppv = ( IDispatch * ) this; +//hb_ToOutDebug( ".................................if ( IsEqualIID( vTableGuid, &IID_IDispatch ) )" ); this->lpVtbl->AddRef( this ); return S_OK; } if ( IsEqualIID( vTableGuid, &( ( ( MyRealIEventHandler * ) this )->device_event_interface_iid ) ) ) { - if( s_ev_iid_[ ThisThreadId() ] == 0 ) + if( ++( ( MyRealIEventHandler * ) this )->iID_riid == 1 ) { - s_ev_iid_[ ThisThreadId() ]++; *ppv = ( IDispatch* ) this; +//hb_ToOutDebug( ".................................if ( IsEqualIID( vTableGuid, &( ( ( MyRealIEventHandler * ) this )->device_event_interface_iid ) ) )" ); this->lpVtbl->AddRef( this ); } return S_OK; @@ -285,8 +275,8 @@ static ULONG STDMETHODCALLTYPE AddRef( IEventHandler *this ) // Rather they are defined only above in our MyRealIEventHandler // struct. So typecast to that in order to access those data members +//hb_ToOutDebug( "AddRef->count=%i", ( ( MyRealIEventHandler * ) this )->count + 1 ); return( ++( ( MyRealIEventHandler * ) this )->count ); - } //----------------------------------------------------------------------// // @@ -294,19 +284,25 @@ static ULONG STDMETHODCALLTYPE AddRef( IEventHandler *this ) static ULONG STDMETHODCALLTYPE Release( IEventHandler *this ) { +#if 0 +hb_ToOutDebug( "static ULONG STDMETHODCALLTYPE Release( IEventHandler *this )->count = %i", + ( ( MyRealIEventHandler * ) this )->count - 1 ); +#endif if ( --( ( MyRealIEventHandler * ) this )->count == 0 ) { - if( ( ( MyRealIEventHandler * ) this)->pSelf ) + { hb_itemRelease( ( ( MyRealIEventHandler * ) this )->pSelf ); + } - if( ( ( MyRealIEventHandler * ) this )->pEventMap ) - hb_xfree( ( ( MyRealIEventHandler * ) this )->pEventMap ); - - GlobalFree( this ); - return( 0 ); + if( ( MyRealIEventHandler * ) this ) + { + GlobalFree( ( MyRealIEventHandler * ) this ); + } +//hb_ToOutDebug( " ULONG STDMETHODCALLTYPE Release( IEventHandler *this )->this" ); + return( (ULONG) 0 ); } - return( ( ( MyRealIEventHandler * ) this )->count ); + return( ( ( MyRealIEventHandler * ) this )->count < 0 ? ( ( MyRealIEventHandler * ) this )->count : 0 ); } //----------------------------------------------------------------------// // @@ -363,7 +359,7 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII PHB_ITEM pItemArray[ 32 ]; // max 32 parameters? PHB_ITEM *pItems; PHB_ITEM Key; - +//hb_ToOutDebug( "event = %i",(int)dispid ); // We implement only a "default" interface if ( !IsEqualIID( riid, &IID_NULL ) ) { @@ -430,7 +426,8 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII for( i=iArg; i > 0; i-- ) { - if( ( ( &( params->rgvarg[ iArg-i ] ) )->n1.n2.vt & VT_BYREF ) == VT_BYREF ) + //if( ( ( &( params->rgvarg[ iArg-i ] ) )->n1.n2.vt & VT_BYREF ) == VT_BYREF ) + if( HB_IS_BYREF( pItemArray[ iArg-i ] ) ) { hb_oleItemToVariant( &( params->rgvarg[ iArg-i ] ), pItemArray[ iArg-i ] ); @@ -524,7 +521,9 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID { thisobj->lpVtbl = ( IEventHandlerVtbl * ) &IEventHandler_Vtbl; + ( ( MyRealIEventHandler * ) thisobj )->pSelf = NULL; ( ( MyRealIEventHandler * ) thisobj )->count = 0; + ( ( MyRealIEventHandler * ) thisobj )->iID_riid = 0; hr = thisobj->lpVtbl->QueryInterface( thisobj, &IID_IUnknown, (void**) &pIUnknown); if (hr == S_OK && pIUnknown) @@ -538,16 +537,15 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID do { hr = m_pIEnumConnectionPoints->lpVtbl->Next( m_pIEnumConnectionPoints, 1, &m_pIConnectionPoint, NULL ); - if( hr == S_OK ) { hr = m_pIConnectionPoint->lpVtbl->GetConnectionInterface( m_pIConnectionPoint, &rriid ); - if ( hr == S_OK ) { ( ( MyRealIEventHandler* ) thisobj )->device_event_interface_iid = rriid; hr = m_pIConnectionPoint->lpVtbl->Advise( m_pIConnectionPoint, pIUnknown, &dwCookie ); + if ( hr == S_OK ) { ( ( MyRealIEventHandler* ) thisobj )->pIConnectionPoint = m_pIConnectionPoint; @@ -564,15 +562,12 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID } } } while( hr == S_OK ); - m_pIEnumConnectionPoints->lpVtbl->Release( m_pIEnumConnectionPoints ); m_pIEnumConnectionPoints = NULL; } - pIConnectionPointContainerTemp->lpVtbl->Release( pIConnectionPointContainerTemp ); pIConnectionPointContainerTemp = NULL; } - pIUnknown->lpVtbl->Release( pIUnknown ); pIUnknown = NULL; } @@ -583,25 +578,42 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID return hr; } //----------------------------------------------------------------------// -static void ShutdownConnectionPoint( MyRealIEventHandler *this ) -{ - if ( this->pIConnectionPoint ) - { - this->dwEventCookie = 0; - this->pIConnectionPoint->lpVtbl->Release( this->pIConnectionPoint ); - this->pIConnectionPoint = NULL; - } -} -//----------------------------------------------------------------------// HB_FUNC( HB_AX_SHUTDOWNCONNECTIONPOINT ) { - MyRealIEventHandler* hSink = ( MyRealIEventHandler * ) hb_parnl( 1 ); - ShutdownConnectionPoint( hSink ); - hb_itemRelease( hSink->pEvents ); + MyRealIEventHandler* hSink = ( MyRealIEventHandler * ) hb_parnint( 1 ); - s_ev_iid_[ ThisThreadId() ] = 0; +//hb_ToOutDebug( "---------------------------------------------" ); + #if 1 + if ( hSink->pIConnectionPoint ) + { + hSink->dwEventCookie = 0; + hSink->pIConnectionPoint->lpVtbl->Release( hSink->pIConnectionPoint ); + hSink->pIConnectionPoint = NULL; + } + #endif + + #if 1 + if( hSink->pEvents ) + { + hb_itemRelease( hSink->pEvents ); + } + #endif + + #if 0 + if( ( MyRealIEventHandler * ) hSink ) + { + GlobalFree( ( MyRealIEventHandler * ) hSink ); + } + #endif +//hb_ToOutDebug( "=============================================" ); } //----------------------------------------------------------------------// +HB_FUNC( HB_AX_RELEASEOBJECT ) +{ + IDispatch * pDisp = ( IDispatch * ) hb_parnint( 1 ); + s_nOleError = pDisp->lpVtbl->Release( pDisp ); +} +//---------------------------------------------------------------------------// HB_FUNC( HB_AX_SETUPCONNECTIONPOINT ) { HRESULT hr; @@ -609,10 +621,11 @@ HB_FUNC( HB_AX_SETUPCONNECTIONPOINT ) LPIID riid = ( LPIID ) &IID_IDispatch; int n; - hr = SetupConnectionPoint( ( device_interface* ) hb_parnint( 1 ), ( REFIID ) riid, ( void** ) &hSink, &n ) ; + hr = SetupConnectionPoint( ( device_interface* ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( REFIID ) riid, ( void** ) &hSink, &n ) ; hSink->pEvents = hb_itemNew( hb_param( 4, HB_IT_ANY ) ); - hb_stornl( ( LONG ) hSink, 2 ); + + hb_stornint( ( LONG ) hSink, 2 ); hb_storni( n, 3 ); hb_retnl( hr ); } @@ -762,7 +775,7 @@ HB_FUNC( HB_AX_ATLAXGETCONTROL ) // HWND hWnd = handle of control container wind pUnk->lpVtbl->Release( pUnk ); GetClientRect( hParent, &rc ); MoveWindow( GetDlgItem( hParent, ( int ) id ), 0, 0, rc.right-rc.left, rc.bottom-rc.top, TRUE ); - hb_retnl( ( long ) obj ); + hb_retnint( ( long ) obj ); } else { @@ -782,20 +795,11 @@ HB_FUNC( HB_AX_ATLAXGETCONTROL ) // HWND hWnd = handle of control container wind // return the control handle if ISBYREF( 11 ) { - hb_stornl( ( long ) hWnd, 11 ); + hb_stornint( ( long ) hWnd, 11 ); } } //---------------------------------------------------------------------------// // -// (hOleObject) -// -HB_FUNC( HB_AX_AXRELEASEOBJECT ) -{ - IDispatch * pDisp = ( IDispatch * ) hb_parnl( 1 ); - s_nOleError = pDisp->lpVtbl->Release( pDisp ); -} -//---------------------------------------------------------------------------// -// // terminate activex suport, free the library // HB_FUNC( HB_AX_ATLAXWINTERM ) diff --git a/harbour/contrib/gtwvg/wvgwin.c b/harbour/contrib/gtwvg/wvgwin.c index 6fc607e0c0..57712725cf 100644 --- a/harbour/contrib/gtwvg/wvgwin.c +++ b/harbour/contrib/gtwvg/wvgwin.c @@ -509,7 +509,14 @@ HB_FUNC( WIN_ISWINDOW ) HB_FUNC( WIN_DESTROYWINDOW ) { - hb_retl( IsWindow( (HWND) ( HB_PTRDIFF ) hb_parnint( 1 ) ) ); + hb_retl( DestroyWindow( (HWND) ( HB_PTRDIFF ) hb_parnint( 1 ) ) ); +} + +//-------------------------------------------------------------------// + +HB_FUNC( WIN_DESTROYMENU ) +{ + hb_retl( DestroyMenu( (HMENU) ( HB_PTRDIFF ) hb_parnint( 1 ) ) ); } //-------------------------------------------------------------------// @@ -649,3 +656,10 @@ HB_FUNC( WIN_FINDWINDOW ) } //----------------------------------------------------------------------// + +HB_FUNC( WIN_SLEEP ) +{ + Sleep( hb_parni( 1 ) ); +} + +//----------------------------------------------------------------------//