Página 2 de 2

Re: Avanzando con TBrowseMod

Publicado: Lun Feb 08, 2021 4:10 pm
por ignacio
Desde el IDE?

Gracias

Re: Avanzando con TBrowseMod

Publicado: Lun Feb 08, 2021 4:26 pm
por ignacio
gabo1 escribió: Vie Feb 05, 2021 9:10 pm Duda
Como puedo cambiar el Font de las columnas??
Saludos
El anterior Browse tenía la posibilidad de establecer un font por cada columna. No obstante, era muy poco útil, porque no suele ser habitual que todos los elementos de una columna se pinten con un font distinto. Lo normal es que se cambie el font cuando se produce alguna condición en los datos que se muestran. Por dicho motivo y en aras a no consumir recursos innecesariamente, decidí no incluir la propiedad oFont en las columnas.

La forma más sencilla de cambiar el font de una columna es utilizando el evento OnDrawCell() que recibe como penúltimo parametro el hDC con el cual vamos a poder cambiar el font que está seleccionado. Pasos:

1) Cree un componente de forma manual en el formulario:

Código: Seleccionar todo

CLASS TForm1 FROM TForm
   component oFontBold AS TFont
   .....
2) Cree el font en el evento OnInitialize:

Código: Seleccionar todo

METHOD FormInitialize( oSender ) CLASS TForm1
   ::oFontBold := ::oFont:Clone()
   ::oFontBold:lBold := .T.
3) En el evento TBrowseMod:OnDrawCell cambie el font cuando sea necesario:

Código: Seleccionar todo

   SelectObject( hDC, ::oFont:Handle ) // selecciona font por defecto

   with object oCol
      if :nDataCol == 5 .AND. xValue > 0
         cValue := :aEditListText[ xValue ]
         if cValue != "uno"
            SelectObject( hDC, ::oFontBold:Handle ) // cambio el font en casos especificos
         ENDIF
      endif
   end with
4) Es buena práctica destruir el font al salir:

Código: Seleccionar todo

METHOD FormDestroy( oSender ) CLASS TForm1
   ::oFontBold:End()
RETURN Nil

Saludos

Re: Avanzando con TBrowseMod

Publicado: Mié Feb 10, 2021 4:20 pm
por gabo1
Ignacio, gracias por responder..
El propósito de cambiar el font, en mi aplicación uso regularmente fuentes grandes 12 a 18px, pero el titulo del browse con fuentes grandes se pierden por que no caben, ese el motivo (y estéticamente también pierde vista).
Quizás si sea posible si así usted lo considera viable poder cambiar la fuente del titulo del browse.
Saludos!

Re: Avanzando con TBrowseMod

Publicado: Jue Feb 11, 2021 11:12 am
por ignacio
gabo1 escribió: Mié Feb 10, 2021 4:20 pm Ignacio, gracias por responder..
El propósito de cambiar el font, en mi aplicación uso regularmente fuentes grandes 12 a 18px, pero el titulo del browse con fuentes grandes se pierden por que no caben, ese el motivo (y estéticamente también pierde vista).
Quizás si sea posible si así usted lo considera viable poder cambiar la fuente del titulo del browse.
Saludos!
No le entiendo. En el browse no existe ningún título como tal. No sé a que se refiere. Lo siento

Saludos

Re: Avanzando con TBrowseMod

Publicado: Jue Feb 11, 2021 4:27 pm
por gabo1
Ignacio,
Tiene usted razón no hay ningún titulo en el browsemod, pero me refiero a los Headers de cada columna
Saludos!
.

Re: Avanzando con TBrowseMod

Publicado: Jue Feb 11, 2021 4:36 pm
por ignacio
gabo1 escribió: Jue Feb 11, 2021 4:27 pm Ignacio,
Tiene usted razón no hay ningún titulo en el browsemod, pero me refiero a los Headers de cada columna
Saludos!
.
Exactamente igual, pero con otro evento:

Código: Seleccionar todo

METHOD BrowseMod1DrawHeader( oSender, oItem, cText, nImage, nClrText, nClrPane, hDC, aRect ) CLASS TForm1

   REDECLARE oItem as THeaderItemMod

   SelectObject( hDC, ::oFont:Handle )

   with object oItem
      if :cHeader == "Street"
         SelectObject( hDC, ::oFontBold:Handle )
      endif
   end with

RETURN Nil
Saludos

Re: Avanzando con TBrowseMod

Publicado: Vie Feb 12, 2021 4:29 pm
por MarceloAR
ignacio escribió: Jue Feb 11, 2021 4:36 pm
gabo1 escribió: Jue Feb 11, 2021 4:27 pm Ignacio,
Tiene usted razón no hay ningún titulo en el browsemod, pero me refiero a los Headers de cada columna
Saludos!
.
Exactamente igual, pero con otro evento:

Código: Seleccionar todo

METHOD BrowseMod1DrawHeader( oSender, oItem, cText, nImage, nClrText, nClrPane, hDC, aRect ) CLASS TForm1

   REDECLARE oItem as THeaderItemMod

   SelectObject( hDC, ::oFont:Handle )

   with object oItem
      if :cHeader == "Street"
         SelectObject( hDC, ::oFontBold:Handle )
      endif
   end with

RETURN Nil
Saludos
Buenas tardes, lo he probado y va bien, de esta forma podemos personalizar el font en el header.
Por otro lado, tengo un combo en el browse, como hago para que las opciones del combo me siga usando la fuente que definí en el browse?
Gracias

Re: Avanzando con TBrowseMod

Publicado: Mar Feb 16, 2021 11:39 am
por ramonzea
me sale este error al intentar ajustar las columnas

With Object ::oDBBrowse1
For nCol := 1 To Len(:aCols)
:AdjustColWidth(:aCols[nCol])
Next
End With


Versión Xailer: Xailer 7.0.0
Compilador: Harbour 3.2.0dev (r1912031042)
Compilador C/C++: MinGW GNU C 7.3 (32-bit)
Plataforma: Windows 10 10.0

----------------------- Información detallada del error -----------------------

Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Message not found
Operación: TDbBrwColMod:OGRIDCOL
Argumentos: [ 1] = Tipo: O Valor:
Fichero:
Código error SO: 0

Saludos

Re: Avanzando con TBrowseMod

Publicado: Mar Feb 16, 2021 12:16 pm
por ignacio
Forma correcta:

Código: Seleccionar todo

   local oCol

   WITH OBJECT ::oBrowseMod1
      FOR EACH oCol IN :aDisplayCols
         :AdjustColWidth( oCol:oHeaderCol )
      NEXT
   END WITH
No obstante, se incluirá código para que funcione sin necesidad de indicar el THeaderItemMod

Saludos

Re: Avanzando con TBrowseMod

Publicado: Mar Feb 16, 2021 7:13 pm
por ramonzea
Gracias.
Tengo otro detalle, tengo un proceso de lectura de archivos de text con SQLText, y en el browse los campos que me traen Nil, los deja como texto en blanco, pero con el BrowseMod me deja los Nil. Tengo que correr otro proceso para eliminarlos? o hay alguna propiedad para validarlo?

Saludos.

Re: Avanzando con TBrowseMod

Publicado: Mar Feb 16, 2021 8:34 pm
por ignacio
Ya está corregido.

Un saludo