I need help finding out what I'm doing wrong with this xbrowse. It is housed on a dialog built from resources. The app is an MDI app. I have been able to reproduce the problem on a reduced self-contained sample as shown below. When you execute the app you must resize the window in order to view the xbrowse. That is not the problem I'm looking to solve. The problem I need help with is that once the xbrowse is visible it responds to keyboard input but not to mouse clicks. Can someone please help?
Thank you,
First the .rc file needed:
- Code: Select all Expand view
GRID_DLG DIALOG 113, 70, 105, 0
STYLE DS_3DLOOK |DS_SETFONT |WS_CHILD |WS_SYSMENU
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
CONTROL "",100,"Txbrowse",WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,2,0,269,207
END
And now the actual .prg that reproduces the problem.
- Code: Select all Expand view
#include "fivewin.ch"
#include "xbrowse.ch"
#include "ads.ch"
STATIC cAlias
FUNCTION Main()
LOCAL oTest
rddRegister( "ADS", 1 )
rddSetDefault( "ADS" )
adsSetServerType( ADS_LOCAL_SERVER )
AdsLocking( .t. ) //NON-compatible locking mode
oTest := Test():New()
RETURN NIL
//------------------------------------------------
procedure RddInit()
REQUEST HB_LANG_EN
REQUEST DBFCDX, DBFFPT
REQUEST OrdKeyCount, OrdKeyNo, OrdKeyGoto
REQUEST ADSKeyNo, ADSKeyCount
REQUEST ADS
RETURN
//------------------------------------------------
CLASS Test
DATA oGridViewDlg
DATA oGrid
DATA oDbf
DATA oWnd, oWndChild
METHOD New()
METHOD End()
METHOD OpenDlg()
METHOD SetSize( nType, nW, nH )
METHOD CreateTables()
END CLASS
//------------------------------------------------
METHOD New() CLASS Test
LOCAL oSelf := SELF
LOCAL oMenu
::CreateTables()
MENU oMenu
MenuItem "hide dlg" action ::oGridViewDlg:hide()
MenuItem "show dlg" action ::oGridViewDlg:show()
ENDMENU
DEFINE WINDOW ::oWnd MDI MENU oMenu
ACTIVATE WINDOW ::oWnd ;
ON INIT oSelf:OpenDlg() ;
ON RESIZE oSelf:SetSize( nSizeType, nWidth, nHeight ) ;
VALID oSelf:End()
RETURN SELF
//------------------------------------------------
METHOD End() CLASS Test
(cAlias)->( dbCloseArea() )
RETURN .T.
//------------------------------------------------
METHOD OpenDlg() CLASS Test
LOCAL oSelf := SELF
// DEFINE WINDOW ::oWndChild MDICHILD OF ::oWnd FROM 5,5 TO 6,6 COLOR "N/W" BORDER NONE NOMAXIMIZE NOMINIMIZE
DEFINE DIALOG ::oGridViewDlg RESOURCE "Grid_Dlg" TRANSPARENT COLOR RGB( 240, 240, 255 ), RGB( 240, 240, 255 ) //OF ::oWndChild
REDEFINE XBROWSE ::oGrid ID 100 OF ::oGridViewDlg ALIAS cAlias ;
COLUMNS 'mrec', 'guid', 'Subject', 'Last_Name', 'First_Name', ;
'schedule', 'insurance' ;
HEADER 'MedRecord', 'guid', 'SubjectLine', 'LastName', 'FirstName', 'Schedule', "Insurance" ;
SIZES 70, 120, 150, 100, 100, 100, 150
WITH OBJECT ::oGrid
:lAllowRowSizing := .T.
:lAllowColSwapping := .T.
:nStretchCol := 2
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:lRecordSelector := .F.
:nHeaderHeight := 25
:MedRecord:bLClickHeader := {|nR, nC, nF, o| SelectOrder( o , "mrec" ) }
:guid:bLClickHeader := {|nR, nC, nF, o| SelectOrder( o , "guid" ) }
:LastName:bLClickHeader := {|nR, nC, nF, o| SelectOrder( o , "Last_Name" ) }
:bPastEof := { || (cAlias)->( dbAppend() ) }
END
SelectOrder( ::oGrid:MedRecord, "mrec" )
::oGridViewDlg:oClient := ::oGrid
::oGridViewDlg:bGotFocus := { || ::oGrid:SetFocus() }
ACTIVATE DIALOG ::oGridViewDlg NOWAIT VALID (.F.) ;
ON INIT ( oSelf:oGridViewDlg:move( oSelf:oWnd:nBottom - oSelf:oGridViewDlg:nheight, ;
oSelf:oWnd:nRight - oSelf:oGridViewDlg:nWidth ) )
//::oWndChild:nWidth := ::oGridViewDlg:nWidth+7
//::oWndChild:nHeight := ::oGridViewDlg:nHeight+32
//ACTIVATE WINDOW ::oWndchild ON INIT ::oWnd:Paint()
RETURN NIL
//------------------------------------------------
METHOD SetSize( nType, nWidth, nHeight ) CLASS Test
LOCAL aClient := GetClientRect ( ::oWnd:hWnd ), i
IF ::oGridViewDlg == NIL ;RETURN NIL ; ENDIF
//::oWndchild:SetSize( ::oWnd:nWidth, ::oWnd:nHeight, .T. )
//::oWndchild:Move( 0, 0, ::oWnd:nWidth, ::oWnd:nHeight )
::oGridViewDlg:Move( 0, 0 , ::oWnd:nWidth, nHeight )
::oGridViewDlg:SetSize( aClient[4] - 1, nHeight, .T. )
::oGridViewDlg:Move( aClient[ 1 ], 0 )
IF ::oGrid == NIL ;RETURN NIL ;ENDIF
::oGrid:Move( 0, 0 )
::oGrid:SetSize( aClient[4], ::oGridViewDlg:nHeight , .T. )
::oGrid:SetFocus()
RETURN NIL
//------------------------------------------------
METHOD CreateTables() CLASS Test
LOCAL cTable := "EvntColl"
LOCAL aStruc := { { "GUID" ,"C", 24, 0 },;
{ "mrec" ,"C", 15, 0 },; //key
{ "Subject" ,"C", 50, 0 },; //key
{ "Last_Name" ,"C", 24, 0 },; //key
{ "First_Name" ,"C", 15, 0 },; //key
{ "eMail" ,"C", 50, 0 },;
{ "Tel" ,"C", 13, 0 },;
{ "More_Info" ,"M", 10, 0 },;
{ "Event" ,"C", 15, 0 },; //FK into events.adt (predifined events)
{ "Schedule" ,"C", 15, 0 },; //FK into Schedules.adt
{ "Label" ,"C", 15, 0 },; //FK into schdl_lbls
{ "isEmail" ,"L", 01, 0 },;
{ "isReminder" ,"L", 01, 0 },;
{ "Reminder" ,"N", 09, 0 },; //in minutes
{ "isNoShow" ,"L", 01, 0 },;
{ "Insurance" ,"C", 20, 0 },;
{ "Contract" ,"C", 20, 0 },;
{ "Group" ,"C", 20, 0 } }
AdsSetFileType( ADS_ADT )
cAlias := "MyAlias"
IF !FILE( cTable )
dbCreate( cTable, aStruc,, .T., cAlias )
( cAlias )->( OrdCreate( cTable, "guid", "guid" ) )
( cAlias )-> (OrdCreate( cTable, "mrec", "mrec" ) )
( cAlias )->( OrdCreate( cTable, "Last_Name", "Last_Name" ) )
( cAlias )->( dbAppend() )
IF ( cAlias )->( rLock() )
( cAlias )->Guid := "1234567890"
( cAlias )->mRec := "00000001"
( cAlias )->Subject := "Test subject"
( cAlias )->Last_Name := "Doe"
( cAlias )->First_Name := "John"
ENDIF
( cAlias )->( dbUnlock() )
( cAlias )->( dbAppend() )
IF ( cAlias )->( rLock() )
( cAlias )->Guid := "4567890123"
( cAlias )->mRec := "00000002"
( cAlias )->Subject := "Test subject 2"
( cAlias )->Last_Name := "Doe"
( cAlias )->First_Name := "Joann"
ENDIF
( cAlias )->( dbUnlock() )
ELSE
Dbusearea( .T., "ADSADT", cTable , cAlias , .T. , .F. )
ENDIF
RETURN NIL
//------------------------------------------------------------------------------
FUNCTION selectOrder( oCol, cOrd )
AEVAL( oCol:oBrw:aCols, {|o| o:bClrHeader := {|| { CLR_BLUE, } } } )
oCol:bClrHeader := {|| {CLR_HRED, } }
(oCol:oBrw:cAlias) -> ( OrdSetFocus( cOrd ) )
oCol:oBrw:refresh()
RETURN( NIL )
Notice how the xbrowse does responde to keyboard input but not to mouse clicks.
Can someone shed some light?
Thank you,
Reinaldo.