Página 1 de 1

Dibujar Titulo de una columna

Publicado: Jue Feb 13, 2014 3:48 am
por Claudio[1]
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.