Mr. Rao,
Code: Select all | Expand
if ( ::lModal )
DEFINE DIALOG ::oDlg RESOURCE cDlg ;
TITLE ::cTitle COLOR ::nFrontColor, ::nBackColor
REDEFINE TASKPANEL ::oTaskPanel ID 100 OF ::oDlg PLAIN
if ::nTypeAbm>0 .and. ::lModal
::oStBar:= TC5StBar():Redefine( 101, ::oDlg, oApp:nStBarColor1, oApp:nStBarColor2, .f., ::oFont1 )
::oStBar:lBorder:= oApp:BarC5StBorder
REDEFINE XBROWSE ::oBrw ;
COLUMNS aFld ;
HEADERS aHdr;
FIELDSIZES aSz ;
JUSTIFY aJustifyDat ;
PICTURES aPic ;
ID 4001 ;
OF ::oDlg ;
DATASOURCE ::oSql
FOR n:= 1 TO Len(::oBrw:aCols) // aField)
cPicture:= nSize:= nHeadAlign:= nDataAlign:= NIL
if VALTYPE( ::aField[n,01] ) == "A"
oCol:= ::oBrw:InsCol(n)
xTitle:= ::aField[n,01]
oCol:Cargo:= xTitle[01]
if LEN( ::aField[n] ) > 4
cPicture:= ::aField[ n,05 ]
else
cPicture:= Nil
endif
nSize:= ::aField[ n,04 ]
if LEN( ::aField ) > 5
if ::aField[ n,06 ] # Nil
if VALTYPE( ::aField[ n,06] ) == "A"
xTitle:= ::aField[ n,06]
if VALTYPE( ::aField[ n,01] ) == "A"
nHeadAlign:= xTitle[ 01 ]
nDataAlign:= AL_LEFT
else
nHeadAlign:= xTitle[ 01 ]
nDataAlign:= xTitle[ 02 ]
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= ::aField[ n,06 ]
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= AL_LEFT
endif
else
oCol := ::oBrw:aCols[n]
oCol:Cargo:= ::aField[n,01]
if LEN( ::aField[n] ) > 5
if ::aField[ n,06 ] # Nil
if VALTYPE( ::aField[ n,06] ) == "A"
xTitle:= ::aField[ n,06]
if VALTYPE( ::aField[ n,01] ) == "A"
nHeadAlign:= xTitle[ 01 ]
else
nHeadAlign:= xTitle[ 01 ]
endif
else
nHeadAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
endif
/*
cPicture := oCol:cEditPicture
nSize := oCol:nWidth
nHeadAlign:= oCol:nHeadStrAlign
nDataAlign:= oCol:nDataStrAlign
*/
endif
WITH OBJECT oCol
if nDataAlign # NIL
:nHeadStrAlign:= nHeadAlign
:nDataStrAlign:= nDataAlign
:cEditPicture := cPicture
:nWidth := nSize
else
:nHeadStrAlign:= nHeadAlign
endif
if VALTYPE( ::aField[n,01] ) == "A"
AEval( ::aField[n,01], { |cBmp| :AddResource(cBmp) }, 2 )
:bBmpData := SetBmpData( ::oBrw, oCol:Cargo )
:bStrData := { || "" }
cOrder:= ""
else
cOrder:= ::aField[ n,01 ]
endif
if LEN( ::aField[n] ) > 6 .AND. LEN(::aField[n])#10
:nFooterType:= AGGR_TOTAL
endif
if LEN( ::aField[n] ) == 10
:cTooltip:= ::aField[ n,10 ]
endif
IF !EMPTY( cOrder )
:cSortOrder:= cOrder
endif
END
NEXT
WITH OBJECT ::oBrw
if ::nIdent == ABMArticulos
:bClrStd:= { || If( ::oSql:oferta==1, { CLR_BLACK, CLR_OFERTA }, If( ::oSql:apedido==1, { CLR_BLACK, CLR_HGREEN }, { CLR_BLACK, GetSysColor( COLOR_WINDOW )} )) }
endif
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
:lMultiSelect := .f.
END WITH
::lRedefine:= .f.
endif
ACTIVATE DIALOG ::oDlg ;
ON INIT ( this:body(), this:elxbrowse(), /*this:wSplitter(),*/ this:movedgrid(),;
if(this:lModal.and.this:nTypeAbm>0,,If(this:oBrwRb#Nil,BringWindowToTop( this:oPanel:hWnd ),BringWindowToTop( this:oBrw:hWnd ) )),;
if(this:lModal.and.this:nTypeAbm>0,,if(this:oBrwRb#Nil.and.this:oSplit#Nil,this:oSplit:Adjust( .f., .t., .f., .t. ),)),;
if(this:lFocusxRubro, oSetFocus(this:oBrwRb), if( this:oSql:LastRec()>0,;
( if(this:oBrwRb#Nil,this:oBrwRb:PostMsg(WM_KILLFOCUS),),;
this:oBrw:PostMsg(WM_SETFOCUS)),;
oSetFocus(this:aGet[1]) ) ),; // this:aGet[1]:PostMsg(WM_SETFOCUS) )),;
.F. ) ; // ,oSetFocus(this:oBrw)
VALID this:lExit
// if(this:oBrwRb#NIL,this:oSqlRb:Seek(),),;
// if(this:oBrwRb#NIL,oSetFocus(this:oBrwRb), if(this:oSql:LastRec()>0,this:oBrw:PostMsg(WM_SETFOCUS),oSetFocus(this:aGet[1]))),;
// oSetFocus(this:aGet[1]))),;
else
DEFINE WINDOW ::oDlg MDICHILD;
FROM 0, 0 TO 400, 800 PIXEL ;
TITLE ::cTitle COLOR ::nFrontColor, ::nBackColor ;
ICON ::oWnd:oIcon ;
OF ::oWnd
::hLays["MAIN"] = TLayout():new( ::oDlg )
::hLays["H1"] = ::hLays["MAIN"]:addHLayout(240)
::hLays["H2"] = ::hLays["MAIN"]:addHLayout()
DEFINE DIALOG ::oDlg RESOURCE cDlg ; // OF ::oWnd ;
TITLE ::cTitle COLOR ::nFrontColor, ::nBackColor
REDEFINE TASKPANEL ::oTaskPanel ID 100 OF ::oDlg PLAIN
if ::nTypeAbm>0 .and. ::lModal
::oStBar:= TC5StBar():Redefine( 101, ::oDlg, oApp:nStBarColor1, oApp:nStBarColor2, .f., ::oFont1 )
::oStBar:lBorder:= oApp:BarC5StBorder
REDEFINE XBROWSE ::oBrw ;
COLUMNS aFld ;
HEADERS aHdr;
FIELDSIZES aSz ;
JUSTIFY aJustifyDat ;
PICTURES aPic ; // SIZE 148,60 PIXEL OF oDlg ;
ID 4001 ;
OF ::oDlg ;
DATASOURCE ::oSql
FOR n:= 1 TO Len(::oBrw:aCols) // aField)
cPicture:= nSize:= nHeadAlign:= nDataAlign:= NIL
if VALTYPE( ::aField[n,01] ) == "A"
oCol:= ::oBrw:InsCol(n)
xTitle:= ::aField[n,01]
oCol:Cargo:= xTitle[01]
if LEN( ::aField[n] ) > 4
cPicture:= ::aField[ n,05 ]
else
cPicture:= Nil
endif
nSize:= ::aField[ n,04 ]
if LEN( ::aField ) > 5
if ::aField[ n,06 ] # Nil
if VALTYPE( ::aField[ n,06] ) == "A"
xTitle:= ::aField[ n,06]
if VALTYPE( ::aField[ n,01] ) == "A"
nHeadAlign:= xTitle[ 01 ]
nDataAlign:= AL_LEFT
else
nHeadAlign:= xTitle[ 01 ]
nDataAlign:= xTitle[ 02 ]
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= ::aField[ n,06 ]
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
nDataAlign:= AL_LEFT
endif
else
oCol := ::oBrw:aCols[n]
oCol:Cargo:= ::aField[n,01]
if LEN( ::aField[n] ) > 5
if ::aField[ n,06 ] # Nil
if VALTYPE( ::aField[ n,06] ) == "A"
xTitle:= ::aField[ n,06]
if VALTYPE( ::aField[ n,01] ) == "A"
nHeadAlign:= xTitle[ 01 ]
else
nHeadAlign:= xTitle[ 01 ]
endif
else
nHeadAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
endif
else
nHeadAlign:= AL_LEFT
endif
/*
cPicture := oCol:cEditPicture
nSize := oCol:nWidth
nHeadAlign:= oCol:nHeadStrAlign
nDataAlign:= oCol:nDataStrAlign
*/
endif
WITH OBJECT oCol
if nDataAlign # NIL
:nHeadStrAlign:= nHeadAlign
:nDataStrAlign:= nDataAlign
:cEditPicture := cPicture
:nWidth := nSize
else
:nHeadStrAlign:= nHeadAlign
endif
if VALTYPE( ::aField[n,01] ) == "A"
AEval( ::aField[n,01], { |cBmp| :AddResource(cBmp) }, 2 )
:bBmpData := SetBmpData( ::oBrw, oCol:Cargo )
:bStrData := { || "" }
cOrder:= ""
else
cOrder:= ::aField[ n,01 ]
endif
if LEN( ::aField[n] ) > 6 .AND. LEN(::aField[n])#10
:nFooterType:= AGGR_TOTAL
endif
if LEN( ::aField[n] ) == 10
:cTooltip:= ::aField[ n,10 ]
endif
IF !EMPTY( cOrder )
:cSortOrder:= cOrder
endif
END
NEXT
#else
REDEFINE XBROWSE ::oBrw ;
ID 4001 ;
OF ::oDlg ;
DATASOURCE ::oSql
#endif
WITH OBJECT ::oBrw
if ::nIdent == ABMArticulos
:bClrStd:= { || If( ::oSql:oferta==1, { CLR_BLACK, CLR_OFERTA }, If( ::oSql:apedido==1, { CLR_BLACK, CLR_HGREEN }, { CLR_BLACK, GetSysColor( COLOR_WINDOW )} )) }
endif
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
:lMultiSelect := .f.
END WITH
::lRedefine:= .f.
endif
ACTIVATE DIALOG ::oDlg ;
ON INIT ( this:body(), this:elxbrowse(),;
.F. ) ;
VALID this:lExit
else
DEFINE WINDOW ::oDlg MDICHILD;
FROM 0, 0 TO 400, 800 PIXEL ;
TITLE ::cTitle COLOR ::nFrontColor, ::nBackColor ;
ICON ::oWnd:oIcon ;
OF ::oWnd
::hLays["MAIN"] = TLayout():new( ::oDlg )
::hLays["H1"] = ::hLays["MAIN"]:addHLayout(240)
::hLays["H2"] = ::hLays["MAIN"]:addHLayout()
::body() // TASKPANEL A.Reyes
::elxbrowse()
::oDlg:bGotFocus:= { || ::oDlg:Maximize() }
ACTIVATE WINDOW ::oDlg MAXIMIZED ;
ON INIT if(this:lLanzoQuery,this:Lanzar(),) ;
VALID this:lExit
endif
RETURN NIL
/*
::lModal: .T.-> Dialog, .f. -> WndChild
::aFields:=
1. Field/Array({field,bmp1,bmp2,etc})
2. Text Header
3. sin uso
4. nWidth
5. Picture
6. Numeric/Array, if is Numeric :nDataStrAlign, is Array Pos[1]:nHeadStrAlign, Pos[2]: nDataStrAlign
7. sin uso
8. sin uso
9. sin uso
10. Tooltip
Ej.: { { {"field","bmp1","bmp2","bmp3"},' ',, 30,, AL_CENTER,,,, 'Producto en Oferta' },;
{ 'codart', 'Codigo',, 90 },;
{ 'cArticulo', "Descripcion",, ii },;
{ {"moneda","flag_peso","flag_eeuu","flag_euro"}, " ",, 30,, AL_CENTER },;
{ 'precos', "Costo",, 75, oApp:PrecioPict, {AL_CENTER,AL_RIGHT} },;
{ 'stock', "Stock",, 90,, {AL_CENTER,AL_RIGHT} },;
{ 'cProveedor', "Proveedor",,150 },;
{ 'cRubro', "Rubro",,150 } }
*/
static function elxbrowse(
LOCAL oWnd := if(::lModal,::oTaskPanel:oWnd,if(::lSplitter,::oPanel,::oDlg)), oDlg
IF !( ::lModal )
::hLays["H2"]:addVLayout()
endif
if ( ::lRedefine )
::oBrw:= TXBrowse():new( if(::lModal,oWnd,::hLays["H2"]:aVLayout[nPag]) )
endif
lAddCol:= !::lModal
WITH OBJECT ::oBrw
:SetDolphin( ::oSql, lAddCol, .t., ::aField, {| xField, oBrw | ::SetDolphin( xField, oBrw ) } )
:l2007 := .t.
if ::nIdent == ABMArticulos
:bClrStd:= { || If( ::oSql:oferta==1, { CLR_BLACK, CLR_OFERTA }, If( ::oSql:apedido==1, { CLR_BLACK, CLR_HGREEN }, { CLR_BLACK, GetSysColor( COLOR_WINDOW )} )) }
endif
if ( ::lStrech )
ADD oCol TO ::oBrw HEADER " "
oCol:bStrData:= { || " " }
:nStretchCol := STRETCHCOL_LAST
endif
:lHScroll := .t.
:lVScroll := .t.
:lAllowColSwapping := .t. // !( ::lModal )
:lRecordSelector := .f.
:lAllowRowSizing := .f.
:lFooter := ::lFooter
:nFreeze := ::nFreeze
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
:lMultiSelect := .f.
:nColDividerStyle := LINESTYLE_INSET
if ::aGHead # NIL
:nHeaderLines:= 2
FOR EACH xItem IN ::aGHead
:SetGroupHeader( xItem[1], xItem[2], xItem[3] )
NEXT
elseif nGroupIni+nGroupFin # 0
:nHeaderLines:= 2
:SetGroupHeader( cGroupTxt, nGroupIni, nGroupFin )
endif
if ( ::lFooter )
:MakeTotals()
endif
:bLDblClick := {|| ::pulsekey( VK_RETURN )}
:bKeyDown := {|nKey| ::pulsekey( nKey )}
if ( ::lRedefine )
:CreateFromCode()
else
:Refresh()
endif
END
AEval( ::oBrw:aCols, { |o| o:bLClickHeader := { |r,c,f,oCol| if(::nident==EmisionChequesPropios, ::ReOrdeno( oCol:cHeader ),) } } )
if !( ::lModal )
::hLays["H2"]:aVLayout[if(nPag==1,1,2)]:oClient:= ::oBrw
nPag++
endif
if ( ::lModal ) .AND. ::nTypeAbm == 0
oWnd:oLeft := ::oTaskPanel
oWnd:oClient:= ::oBrw
oWnd:Resize()
endif
RETURN NIL
//
//----------------------------------------------------------------------------//
METHOD SetDolphin( xfield, oBrw, lSeek, lView ) CLASS TWGrid
Local oSelf:= Self
local aLast:= {}, aItem:= {}
local oCol, cCol, cHeader, xTitle, cOrder
DEFAULT lSeek:= .f.,;
lView:= .f.
IF xfield # NIL // aField
if xfield[1] # NIL
if VALTYPE( xfield[1] ) == "A"
cCol := xfield[1,1]
cOrder:= ""
else
cCol := xfield[ 1 ]
cOrder := xfield[ 1 ]
endif
cHeader := xfield[ 2 ]
oCol:= oBrw:SetColFromMySQL( cCol, cHeader, .t. )
if VALTYPE( xfield[1] ) == "A"
AEval( xfield[1], { |cBmp| oCol:AddResource(cBmp) }, 2 )
oCol:bBmpData := SetBmpData( oBrw, cCol )
oCol:bStrData := { || "" }
endif
oCol:nWidth:= xfield[ 4 ]
if LEN( xfield ) > 4
oCol:cEditPicture:= xfield[ 5 ]
endif
if LEN( xfield ) > 5
if xfield[ 6 ] # NIL
if VALTYPE( xfield[6] ) == "A"
xTitle:= xfield[6]
if VALTYPE( xfield[1] ) == "A"
oCol:nHeadStrAlign:= xTitle[ 1 ]
else
oCol:nHeadStrAlign:= xTitle[ 1 ]
oCol:nDataStrAlign:= xTitle[ 2 ]
endif
else
oCol:nDataStrAlign:= xfield[ 6 ]
endif
endif
if LEN( xfield ) > 6 .AND. LEN(xfield)#10
oCol:nFooterType:= AGGR_TOTAL
endif
if LEN( xfield ) == 10
oCol:cTooltip:= xfield[ 10 ]
endif
IF !EMPTY( cOrder )
oCol:cSortOrder := cOrder
endif
endif
else
ADD oCol TO oBrw HEADER " "
oCol:bStrData:= { || " " }
endif
else
cCol := xfield[ MYSQL_FS_NAME ]
cHeader := xfield[ MYSQL_FS_NAME ]
oCol = SetColFromMySQL( cCol, cHeader, ::oSql, oBrw )
oCol:bLClickHeader:= Build_CodeBlock_Order( oSelf:oSql )
endif
RETURN NIL
//--------------------------------------------------------------------------------------------------------------------------------------------------------//
function SetBmpData( oBrw, cCol )
return {|| oBrw:oMySql:FieldGet( cCol ) }
//----------------------------------------------------------------------------//
FUNCTION Build_CodeBlock_Order( oQry )
RETURN {| nMRow, nMCol, nFlags, oCol | SetOrderDolphin( oCol, oQry ) }
//--------------------------------------//
FUNCTION SetColFromMySQL( cnCol, cHeader, oQry , oBrw )
LOCAL nType, cType, nLen, nDec, cName
LOCAL oCol, nCol
IF ValType( cnCol ) == "C"
nCol := oQry:FieldPos( cnCol )
ENDIF
cName := oQry:FieldName( nCol )
DEFAULT ;
nCol := cnCol
oCol := oBrw:AddCol()
oCol:cHeader := cHeader
cType := oQry:FieldType( nCol )
nLen := 0
nDec := 0
DO CASE
CASE cType == 'N'
nLen := oQry:FieldLen( nCol )
nDec := oQry:FieldDec( nCol )
oCol:cEditPicture := NumPict( nLen, nDec, .F., .f. )
CASE cType == 'C'
nLen := MIN( 100, oQry:FieldLen( nCol ) )
CASE cType == 'M'
nLen := MIN( 100, Len(AllTrim(oQry:FieldGet( nCol ))) )
nLen := IF(nLen < 30, 30, nLen )
CASE cType == 'D'
oCol:nHeadStrAlign := 2
oCol:nDataStrAlign := 0
CASE cType == NIL
oCol:bEditValue := { || "..." }
OTHERWISE
// just in case. this will not be executed
oCol:bEditValue := { || "..." }
ENDCASE
oCol:bEditValue := { || oQry:FieldGet( nCol ) }
oCol:cDataType := If( cType == nil, 'C', cType )
oCol:bOnPostEdit := { |o,x,n| If( n == VK_RETURN, oBrw:onedit( o, x, n, cType, nCol ), NIL ) }
RETURN oCol
Saludos.