In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Error en TBrowseMod AdjustColWidth()

Foro de Xailer profesional en español
Responder
Israel Solis
Mensajes: 164
Registrado: Mié Nov 03, 2004 12:42 pm
Ubicación: Cancún, México
Contactar:

Error en TBrowseMod AdjustColWidth()

Mensaje por Israel Solis »

Equipo Xailer:

Existe un error en el método AdjustColWidth() en la clase tBrowseMod... Puedes reproducirlo con "\Samples\Modern\Browses\ArrayBrowse\ArrayBrowse.xpj"

Ejecuta y haz DOBLE CLIC en la división de la columna Married (columna que muestra imagen) para que se autoajuste el ancho...

Código: Seleccionar todo

  /* Este codigo se movió mas abajo, aqui marcaba error
   IF oItem:oGridCol:lDataImageUsed
      nMax += ::oImageList:nWidth
   ENDIF*/

   nData += ( ::oDataGrid:nMargin * 2 )
   nMax  := Max( nHeader, nData )
   nMax  := Min( nMax, ::nClientWidth - 50 )

   // El codigo se movio aqui..
   IF oItem:oGridCol:lDataImageUsed
      nMax += ::oImageList:nWidth
   ENDIF
Saludos :D

Israel
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9445
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Error en TBrowseMod AdjustColWidth()

Mensaje por ignacio »

Muchas gracias,

Visto el error. No obstante, la solución no es correcta porque el ancho de la imagen cuando hay imagen en los datos debe afectar sólo al cálculo del ancho de ese apartado y no al total. Adjunto solución más correcta:

Código: Seleccionar todo

METHOD AdjustColWidth( oCol, lCalc ) CLASS xBrowseMod

   LOCAL oItem, oFont
   LOCAL aRow
   LOCAL xValue
   LOCAL cPicture
   LOCAL nDataCol, nWidth, nHeader, nData, nMax, nImg
   LOCAL lImgData

   DEFAULT lCalc TO .F.

   oFont := ::oFont

   IF oCol:IsKindOf( "TBrwColMod" )
      oItem := oCol:oHeaderCol
   ELSE
      oItem := oCol
   ENDIF

   WITH OBJECT oItem:oGridCol
      nDataCol := :nDataCol
      cPicture := :cPicture
      IF :nImage > 0
         nImg := ::oImageList:nWidth
      ELSE
         nImg := 0
      ENDIF
      lImgData := :lDataImageUsed
   END WITH

   nHeader := oFont:GetTextWidth( oItem:cHeader, Self )
   nHeader += ( ::oDataGrid:nMargin * 2 ) + nImg
   nHeader := MulDiv( nHeader, 120, 100 )
   nData   := 0

   FOR EACH aRow IN ::aGridData
      xValue := aRow[ nDataCol ]
      IF !Empty( xValue )
         nWidth := oFont:GetTextWidth( Transform( xValue, cPicture ), Self )
         IF nWidth > nData
            nData := nWidth
         ENDIF
      ENDIF
   NEXT

   nData += ( ::oDataGrid:nMargin * 2 ) + IIF( lImgData, nImg, 0 )
   nMax  := Max( nHeader, nData )
   nMax  := Min( nMax, ::nClientWidth - 50 )

   IF !lCalc
      oItem:oGridCol:nWidth := nMax
   ENDIF

RETURN nMax
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder