Error GRAVE en xbrowse 18.05

Error GRAVE en xbrowse 18.05

Postby Ariel » Sat Jul 14, 2018 8:24 pm

Hola,
tengo un xbrowse sobre un DIALOG, que con 18.04 se ve asi :

[img]
http://www.mediafire.com/view/iouc8qxz6 ... rw1804.jpg
[/img]

al solo compilar con la nueva 18.05 (sin cambiar nada) sale asi :
[img]
http://www.mediafire.com/view/97a48dwtp ... rw1805.jpg
[/img]
si vuelvo a la 18.04 y recompilo, funcionar correctamente como la imagen1

HAY Q CAMBIAR ALGO EN EL CODIGO????!!!!
Ariel
 
Posts: 374
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Error GRAVE en xbrowse 18.05

Postby nageswaragunupudi » Sat Jul 14, 2018 10:44 pm

Please provide important parts of your source code please.
In particular, I would like to know the datasouce, i.e., dbf, ado, dolphin, tmysql, etc. and how the browse is created.
This information helps where did we commit mistake in our recent changes.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Error GRAVE en xbrowse 18.05

Postby Ariel » Sun Jul 15, 2018 11:29 am

Mr. Rao,
uso mysql con tdolphin y el codigo es :

Code: Select all  Expand view

     
    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.
Ariel
 
Posts: 374
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Error GRAVE en xbrowse 18.05

Postby nageswaragunupudi » Sun Jul 15, 2018 11:38 am

Mr. Ariel

So you are using a class derived from XBrowse.
Right?

We made some changes to all Set... methods and they are all working correctly (to the extent we tested), including SetDolphin() and retain full backward compatibility.

Your xGrid class overrides parent class's method SetDolphin(). So any changes made to method SetDolphin() in the parent class should not affect your program. Am I right? Please let me know.

I request you to please check the changes in xbrowse and see the compatibility of your inherited class with the parent class. You may feel free to ask us for any clarification or explanation.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests