2012-01-29 5 views
5

Tengo un TListView (en el modo de informe) que estoy usando en modo virtual (OwnerData: = True). Todo funciona bien, excepto por las dos situaciones que conozco que autoescalan columnas automáticamente. Ellos son:Cómo manejar autosizing columna predeterminado en TListView con OwnerData cierto

  1. doble clic en el separador de encabezado de columna para autoSize una sola columna
  2. de teclas Ctrl-KeypadPlus a autosizes todas las columnas.

El modo predeterminado de estos eventos cuando se encuentra en modo virtual no funciona muy bien (parece autoSize en la primera fila de datos.) Me gustaría enlazar en el comportamiento y hacer mi propia autosizing columna. ¿Alguien sabe cómo hacer eso? ¿O quizás me falta algo obvio? Estoy usando Delphi XE. Gracias por cualquier sugerencia.

+0

Algo similar aquí http://stackoverflow.com/q/9255540/960757 – TLama

Respuesta

1

columnas automática de tamaño para los controles virtuales de vista de lista se realiza utilizando todos los elementos que son visibles en el momento en que se acciona el funcionamiento de tamaño automático. Ese es el comportamiento del control Delphi TListView. Intente realizar la misma operación en el explorador y puede ver fácilmente que este es el estándar del sistema operativo.

Cuando se opera una vista de lista en modo no virtual, el contenido de todas las filas se contabilizan cuando se realiza automáticamente el tamaño.

no estoy seguro de por qué se observa el automóvil de tamaño única que representa la primera fila de datos. Si eso es realmente lo que está sucediendo para ti, entonces creo que debe haber algo mal en tu código que necesitaríamos ver.


Su problema parece ser un error de Windows XP. Las vistas de lista virtual no realizan el cambio de tamaño automático correctamente en XP hasta donde puedo ver. Creo que el explorador pasó de no virtual a virtual entre XP y Vista y no me importaría apostar a que el equipo del explorador tenía suficiente influencia interna para solucionar el problema.

Por lo que soy consciente de que no se le notifica que un automóvil de tamaño se lleva a cabo por lo que creo que podría ser difícil para usted para solucionar el problema. Si desea seguir adelante con esto, puede intentar responder a la notificación HDN_DIVIDERDBLCLICK para el control del encabezado y la lista para CTRL +. Sin embargo, no estoy seguro de si ese enfoque produciría alguna alegría.

+0

Gracias David. No estoy seguro de qué método está usando, pero en mi sistema XP no parece usar las filas visibles para hacer el autosizing (o mide incorrectamente, aparentemente configurándolo para que sea más pequeño de manera que obtengo muchas elipses, a veces por unos pocos caracteres, a veces por más.) En cualquier caso, mi pregunta es realmente cómo controlar el comportamiento ya que el predeterminado no satisface mis necesidades. – MarkF

+0

Experimenté en Windows 7. Echaré un vistazo en una máquina XP. para ver cómo se comporta. –

+0

Gracias, le agradezco su actualización. Mi principal máquina de desarrollo es XP, pero por supuesto estoy planeando actualizar a Win 7 de 64 bits para poder jugar con XE2. Vi algunas publicaciones en el foro para C++ que mencionaban que tenían que usar su propio control de encabezado para solucionar este problema, así que creo que puedes estar en lo cierto acerca de la falta de alegría ... Estoy sorprendido de que parezca algo que Sería útil anular. – MarkF

Cuestiones relacionadas