Pregunta

Me estoy poniendo temas de dibujo utilizando OnAfterItemPaint evento cuando se realiza el desplazamiento horizontal.

Básicamente lo que quiero lograr es la fusión de células de efecto seleccionado, digamos por ejemplo 1 de texto para la columna 1 y 2, otro texto de la columna 3 y 4, etc ... Hasta ahora VT no tiene ningún apoyo para fusión de columna, por lo que tengo que dibujar manualmente.

¿Hay una solución alternativa u otro evento que debo utilizar en su lugar?

Uso: Delphi 7 + VirtualTreeview 4.8.5

fuente Evento:

begin
  TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
    '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;

Antes de desplazamiento:

texto alternativo http://a.imagehost.org/0869/screen1.gif

Después de desplazamiento (Desplazamiento a la derecha, luego de desplazamiento izquierda):

texto alternativo http://a.imagehost.org/0645/screen2.gif

¿Fue útil?

Solución

Es difícil decir lo que quiere lograr, pero al ver que usted tiene un largo texto que abarca varias columnas que no estoy seguro de que utiliza el evento adecuado - por lo general desea que el texto se truncará si es demasiado largo para su columna .

De todos modos, lo mejor es leer la sección 5.2 "ciclos de pintura y etapas" en el VirtualTreeView.pdf archivo de documentación, y encontrar el evento adecuado para ser utilizado para lo que se quiere pintar. Para OnAfterItemPaint afirma:

  

La etapa de pintura artículo después se utiliza para agregar cosas específicas nodo como marcos y similares   que se refieren a todas las columnas de ese nodo y se llama una vez por nodo.

así que supongo que es probablemente no el que desea utilizar.

Editar

OK, si vas por la fusión de células sólo tiene que quitar la adición de VT1.OffsetX (y añadir VT1.TextMargin vez) para obtener el comportamiento correcto. Esto supone, por supuesto, que desea iniciar la salida de texto en la primera columna (índice 0), de lo contrario hay que calcular la posición horizontal del texto a partir de los anchos de columna.

Pero a partir de la descripción de las etapas de pintura Todavía prefiero utilizar el evento BeforeItemPaint y establecer el parámetro CustomDraw var a True saltarse cualquier pintura por defecto.

Otros consejos

¿Has probado esto:

TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];

Es más o menos hace lo que necesita. Ellos único problema podría ser que no se puede especificar las columnas que se habilita para. Probablemente se puede evitar esto mediante la limitación estableciendo el CellText a un espacio en blanco para las columnas que no desea dividir en.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top