Dibujar Titulo de una columna
Publicado: Jue Feb 13, 2014 3:48 am
Estimados:
Tengo la necesidad de dibujar en el título de una columna de un arraybrowse.
Estoy implementando un diagrama GANTT. En las 'celdas' de la columna lo
logre sin problemas ( aunque con mucho trabajo )
El inconveniente es cómo dibujar en el título de la columna.
Mis intentos hasta ahora fueron:
1) Realizar el dibujo sobre un tpanel que se ubica en el lugar del
encabezado de la columna. Con esto el Tpanel dibujado 'parece' el header
de la columna. ( inhabilite el header en el arraybrowse )
Esto en principio 'funciona' pero el problema es que se requiere
utilizar los filtros del header en la aplicacion ( de manera similar a
los autofiltros de excel ).
Por la necesidad del filtro se descarta esta primera opción.
2) Habilité el header del arraybrowse y trate de interceptar el método
que dibuja el encabezado de la columna.
THeaderItem no tiene un método para dibujar WMPaint() ( o equivalente )
Al menos que yo conozca.
Si pude 'sobrecargar' WMPaint() en la clase THeader. Este metodo dibuja
'todo' el encabezado ( todos los encabezados de todas las columnas).
//----------------------------------------------------
METHOD WMPaint() CLASS THeader
LOCAL ps, hDC
hDC := BeginPaint( ::Handle, @ps )
::oBrush:nColor := ::nClrPane
FillRect( hDC, { 0, 0, ::nWidth, ::nHeight }, ::oBrush:Handle )
::oBrush:nColor := CLR_RED
FillRect( hDC, { 0, 0, ::nWidth/2, ::nHeight/2 }, ::oBrush:Handle )
EndPaint( ::Handle, ps )
RETURN 0
Con esto logro dibujar en el encabezado ( en esta prueba un rectangulo
rojo). Se presentan dos problemas.
Problema a) Hay que dibujar todos los encabezados ( no solo el de la
columna que necesito) De todas maneras esto podría salvarse dibujando el
resto de los encabezados con texto.
Problema b) No aparecen los campos de autofiltro con lo cual estoy en un
punto similar al 1) ( en realidad están y funcionan pero no seven, hay
que imaginarlos)
El ultimo intento fue, antes de hacer 'mi' grafico, llamar
::super:WMPaint() para que dibuje todos los encabezados del header y
luego hacer mi grafico: no funciono ( Mi grafico NO se ve )
En resumen: no encuentro la forma de poder dibujar sobre el encabezado
de 'una' columna y mantener los campos de filtro en un arraybrowse.
Espero se entienda el problema y aguardo sugerencia.
De antemano gracias por su tiempo.
Claudio.
Tengo la necesidad de dibujar en el título de una columna de un arraybrowse.
Estoy implementando un diagrama GANTT. En las 'celdas' de la columna lo
logre sin problemas ( aunque con mucho trabajo )
El inconveniente es cómo dibujar en el título de la columna.
Mis intentos hasta ahora fueron:
1) Realizar el dibujo sobre un tpanel que se ubica en el lugar del
encabezado de la columna. Con esto el Tpanel dibujado 'parece' el header
de la columna. ( inhabilite el header en el arraybrowse )
Esto en principio 'funciona' pero el problema es que se requiere
utilizar los filtros del header en la aplicacion ( de manera similar a
los autofiltros de excel ).
Por la necesidad del filtro se descarta esta primera opción.
2) Habilité el header del arraybrowse y trate de interceptar el método
que dibuja el encabezado de la columna.
THeaderItem no tiene un método para dibujar WMPaint() ( o equivalente )
Al menos que yo conozca.
Si pude 'sobrecargar' WMPaint() en la clase THeader. Este metodo dibuja
'todo' el encabezado ( todos los encabezados de todas las columnas).
//----------------------------------------------------
METHOD WMPaint() CLASS THeader
LOCAL ps, hDC
hDC := BeginPaint( ::Handle, @ps )
::oBrush:nColor := ::nClrPane
FillRect( hDC, { 0, 0, ::nWidth, ::nHeight }, ::oBrush:Handle )
::oBrush:nColor := CLR_RED
FillRect( hDC, { 0, 0, ::nWidth/2, ::nHeight/2 }, ::oBrush:Handle )
EndPaint( ::Handle, ps )
RETURN 0
Con esto logro dibujar en el encabezado ( en esta prueba un rectangulo
rojo). Se presentan dos problemas.
Problema a) Hay que dibujar todos los encabezados ( no solo el de la
columna que necesito) De todas maneras esto podría salvarse dibujando el
resto de los encabezados con texto.
Problema b) No aparecen los campos de autofiltro con lo cual estoy en un
punto similar al 1) ( en realidad están y funcionan pero no seven, hay
que imaginarlos)
El ultimo intento fue, antes de hacer 'mi' grafico, llamar
::super:WMPaint() para que dibuje todos los encabezados del header y
luego hacer mi grafico: no funciono ( Mi grafico NO se ve )
En resumen: no encuentro la forma de poder dibujar sobre el encabezado
de 'una' columna y mantener los campos de filtro en un arraybrowse.
Espero se entienda el problema y aguardo sugerencia.
De antemano gracias por su tiempo.
Claudio.