FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql, lModal, lNumber, lCenter ) LOCAL cFormName, oBrw, nSaveSelect, cDbf, cAlias, lEdit, cTable //, o LOCAL lbSetUp := ! Empty( bSetUp ), lRec, nY, nX, bAfter, lCellBrw := .F. LOCAL oApp := oDlu4Font( _HMG_DefaultFontSize ) LOCAL nGw := oApp:GapsWidth LOCAL nGh := oApp:GapsHeight LOCAL uParam, bRecord, nClr, oCol, nWrec, nHrec LOCAL aWinType := { "M", "C", "S" }, nWinType, cWinType LOCAL lParam, cNam, nW, nH IF HB_ISARRAY( nWidth ) nWrec := nWidth[ 2 ] nWidth := nWidth[ 1 ] ENDIF IF HB_ISARRAY( nHeight ) nHrec := nHeight[ 2 ] nHeight := nHeight[ 1 ] ENDIF IF HB_ISARRAY( cTitle ) uParam := cTitle[ 2 ] cTitle := cTitle[ 1 ] ENDIF IF HB_ISARRAY( bSetUp ) bRecord := iif( Len( bSetUp ) > 2, bSetUp[ 3 ], NIL ) bAfter := bSetUp[ 2 ] bSetUp := bSetUp[ 1 ] ENDIF IF HB_ISLOGICAL( bSetUp ) lCellBrw := bSetUp bSetUp := NIL ENDIF DEFAULT uAlias := Alias(), ; cTitle := iif( ValType( uAlias ) == "C", uAlias, "SBrowse" ), ; bSetUp := {|| .F. }, ; aCols := {}, ; nWidth := GetSysMetrics( 0 ) * .75, ; nHeight := GetSysMetrics( 1 ) / 2, ; lSql := .F., ; lModal := .F., ; lCenter := .T. DEFAULT uParam := oHmgData() IF ( lParam := uParam:ClassName != "TSBROWSE" ) DEFAULT uParam:uSelector := 20, uParam:cBrw := "oBrw" ENDIF SWITCH ValType( lModal ) CASE 'L' nWinType := iif( lModal, 1, 2 ) EXIT CASE 'N' nWinType := iif( lModal > Len( aWinType ), Len( aWinType ), lModal ) EXIT CASE 'C' lModal := Upper( Left( lModal, 1 ) ) nWinType := AScan( aWinType, lModal ) nWinType := iif( nWinType == 0, 2, nWinType ) EXIT DEFAULT nWinType := 2 END cWinType := aWinType[ nWinType ] lModal := ( cWinType == "M" ) IF ValType( uAlias ) == 'C' .AND. Select( uAlias ) == 0 nSaveSelect := Select() IF lSql cTable := HMG_GetUniqueName( "SqlTable" ) dbUseArea( .T.,, "SELECT * FROM " + uAlias, cTable,,, "UTF8" ) SELECT &cTable cAlias := cTable uAlias := cAlias ELSE cDbf := uAlias cAlias := uAlias TRY dbUseArea( .T., NIL, cDbf, cAlias, .T. ) uAlias := cAlias CATCH uAlias := { { uAlias } } END ENDIF ELSEIF ValType( uAlias ) == 'N' IF ! Empty( Alias( uAlias ) ) uAlias := Alias( uAlias ) ELSE uAlias := { { uAlias } } ENDIF ELSEIF ValType( uAlias ) $ 'BDLP' uAlias := { { uAlias } } #ifdef __XHARBOUR__ ELSEIF ValType( uAlias ) == "H" uAlias := aHash2Array( uAlias ) #endif ENDIF cFormName := HMG_GetUniqueName( "SBrowse" ) lRec := HB_ISARRAY( uAlias ) .AND. ; Len( uAlias[ 1 ] ) == 2 .AND. Len( aCols ) == 2 .AND. ; aCols[ 1 ] == "Key" .AND. aCols[ 2 ] == "Value" IF lRec .OR. lModal _HMG_InplaceParentHandle := GetActiveWindow() IF lRec nWidth *= .67 ENDIF DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle ; MODAL ; BACKCOLOR RGB( 191, 219, 255 ) ELSEIF cWinType == 'S' DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle ; WINDOWTYPE STANDARD TOPMOST ; BACKCOLOR RGB( 191, 219, 255 ) ; ON INIT {|| This.Topmost := .F. } ELSE DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle ; CHILD TOPMOST ; BACKCOLOR RGB( 191, 219, 255 ) ; ON INIT {|| This.Topmost := .F. } ENDIF This.Cargo := iif( lParam, uParam, oHmgData() ) nY := nGh nX := nGw nWidth := This.ClientWidth - nX * 2 nHeight := This.ClientHeight - nY * 2 - oApp:H1 - nGh IF lParam .and. IsBlock(uParam:bWindow) ; EVal( uParam:bWindow ) ENDIF DEFINE TBROWSE oBrw AT nY, nX Alias ( uAlias ) WIDTH nWidth HEIGHT nHeight ; HEADER aCols ; AUTOCOLS SELECTOR 20 ; ON INIT {| ob | ob:nColOrder := 0, ; ob:lNoGrayBar := .F., ; ob:lNoLiteBar := .F., ; ob:lNoResetPos := .F., ; ob:nStatusItem := 0, ; ob:lNoKeyChar := .T., ; ob:nWheelLines := 1, ; ob:nCellMarginLR := 1, ; ob:nLineStyle := LINES_ALL, ; ob:nClrLine := COLOR_GRID, ; ob:lCheckBoxAllReturn := .T. } oBrw:Cargo := uParam lEdit := Eval( bSetUp, oBrw ) lEdit := iif( ValType( lEdit ) == "L", lEdit, .F. ) WITH OBJECT oBrw :lEditable := lEdit :lCellBrw := ( lEdit .OR. lCellBrw ) :lUpdate := .T. :bRClicked := {|| _SetThisFormInfo( oBrw:cParentWnd ), ; SBrowse_Record( oBrw, , bRecord, , nWrec, nHrec ), ; _SetThisFormInfo() } :lRecLockArea := .T. IF lEdit AEval( :aColumns, {| o | o:lEdit := !( o:cFieldTyp $ "+=^" ) } ) ENDIF nClr := :GetColumn( 1 ):nClrHeadBack IF lRec :lNoHScroll := .T. ELSEIF ! Empty( lNumber ) :lFooting := .T. :lDrawFooters := .T. :nHeightFoot := :nHeightHead :InsColNumber() cNam := iif( :lIsArr, "ARRAYNO", "ORDKEYNO" ) :GetColumn( cNam ):cFooting := hb_ntos( :nLen ) :GetColumn( cNam ):lNoHilite := .T. :nFreeze := :nColumn( cNam ) :lLockFreeze := .T. ENDIF :nCell := :nFreeze + 1 nH := iif( :hFontHead == NIL, :hFont, :hFontHead ) FOR EACH oCol IN :aColumns nH := iif( oCol:hFontHead == NIL, nH, oCol:hFontHead ) nW := GetTextWidth( NIL, oCol:cHeading, nH ) IF nW > oCol:nWidth ; oCol:nWidth := nW + 8 ENDIF NEXT END WITH END TBROWSE This.Cargo:oBrw := oBrw cNam := iif( oBrw:lIsArr, "ARRAYNO", "ORDKEYNO" ) IF oBrw:nColumn( cNam, .T. ) > 0 oBrw:GetColumn( cNam ):nClrBack := nClr oBrw:GetColumn( cNam ):nClrHeadBack := nClr oBrw:GetColumn( cNam ):nClrFocuBack := oBrw:nClrPane ENDIF nY := This.ClientHeight - nGh - oApp:H1 nX := nGw @ nY, nX BUTTON Btn_1 CAPTION oBrw:aMsg[ 44 ] WIDTH oApp:W1 HEIGHT oApp:H1 ; ACTION {|| oBrw:Report( cTitle,,,, .T. ), oBrw:GoTop() } nX += oApp:W1 + nGw @ nY, nX BUTTON Btn_2 CAPTION "Excel" WIDTH oApp:W1 HEIGHT oApp:H1 ; ACTION oBrw:ExcelOle() nX := This.ClientWidth - ( oApp:W1 + nGw ) @ nY, nX BUTTON Btn_3 CAPTION oBrw:aMsg[ 45 ] WIDTH oApp:W1 HEIGHT oApp:H1 ; ACTION {|| iif( oBrw:IsEdit, oBrw:SetFocus(), ThisWindow.RELEASE ) } ON KEY ESCAPE ACTION {|| iif( oBrw:IsEdit, oBrw:SetFocus(), ThisWindow.RELEASE ) } IF lRec nY := Len( oBrw:aColumns ) oBrw:aColumns[ nY - 1 ]:nWidth += 50 oBrw:aColumns[ nY - 1 ]:cName := "KEY" oBrw:aColumns[ nY - 1 ]:lEdit := .F. oBrw:aColumns[ nY ]:lEdit := .F. oBrw:aColumns[ nY ]:cName := "VALUE" oBrw:lPickerMode := .T. nW := 16 FOR EACH oCol IN oBrw:aColumns oCol:cPicture := NIL oCol:nAlign := iif( oCol:cName == "KEY", DT_CENTER, DT_LEFT ) nW += iif( hb_enumindex(oCol) == nY, 0, oCol:nWidth ) NEXT oBrw:aColumns[ nY ]:nWidth := _GetClientRect( oBrw:hWnd )[3] - nW //oBrw:AdjColumns( nY ) IF HB_ISOBJECT( oBrw:Cargo ) .AND. oBrw:ClassName == "TSBROWSE" .AND. oBrw:Cargo:lIsDbf oBrw:Cargo:lRecLockArea := .T. oCol := oBrw:GetColumn( "VALUE" ) oCol:lEdit := .T. oCol:bPrevEdit := ; < | uv, obr | LOCAL lRet := .T., cn, oc, ob, xv LOCAL oDlu := oDlu4Font( _HMG_DefaultFontSize ) LOCAL nLen := oDlu:W( 1.5 ) cn := obr:GetValue( "KEY" ) xv := obr:GetValue( "VALUE" ) obr:GetColumn( "VALUE" ):Cargo := NIL ob := obr:Cargo IF ! HB_ISOBJECT( ob ) .OR. ! ob:lIsDbf RETURN .F. ENDIF oc := ob:GetColumn( cn ) IF Empty( oc:cFieldTyp ) .OR. oc:cName == "SELECTOR" .OR. oc:cName == "ORDKEYNO" lRet := .F. ELSEIF oc:cFieldTyp $ "T=@+^" lRet := .F. ENDIF IF lRet IF ValType( xv ) $ "DNL" obr:GetColumn( "VALUE" ):nEditWidth := nLen ENDIF obr:GetColumn( "VALUE" ):Cargo := uv ENDIF RETURN lRet > oCol:bPostEdit := ; < | uv, obr | LOCAL cn, oc, ob, uo, nm cn := obr:GetValue( obr:nColumn( "KEY" ) ) uo := obr:GetColumn( "VALUE" ):Cargo obr:GetColumn( "VALUE" ):nEditWidth := 0 IF uo != NIL .AND. uo == uv RETURN NIL ENDIF ob := obr:Cargo IF ! HB_ISOBJECT( ob ) .OR. ! ob:lIsDbf RETURN NIL ENDIF oc := ob:GetColumn( cn ) nm := oc:nEditMove oc:nEditMove := 0 ob:PostEdit( uv, ob:nColumn( oc:cName ) ) oc:nEditMove := nm RETURN NIL > ENDIF ENDIF IF ! lbSetUp .OR. lRec oBrw:SetNoHoles() oBrw:SetFocus() IF lRec oBrw:GoRight() ENDIF ENDIF IF HB_ISBLOCK( bAfter ) ; Eval( bAfter, oBrw, .T. ) ELSE ; Eval( bSetUp, oBrw, .T. ) ENDIF IF lParam .and. IsBlock(uParam:bWindow) ; EVal( uParam:bWindow, .T. ) ENDIF END WINDOW IF lCenter CENTER WINDOW &cFormName ENDIF ACTIVATE WINDOW &cFormName _HMG_InplaceParentHandle := 0 IF ! Empty( cAlias ) ( cAlias )->( dbCloseArea() ) ENDIF IF ! Empty( nSaveSelect ) Select( nSaveSelect ) ENDIF RETURN NIL
|