Tengo un cuadro combinado dibujado por el propietario que muestra las cadenas en columnas. La rutina de dibujo se puede compartir en combos si de alguna manera puedo pasar las especificaciones de columna al evento OnDrawItem. Una forma natural de hacerlo sería pasar el conjunto de anchuras de columna en la propiedad ComboBox.Tag y luego convertirlo a una matriz.Cómo lanzar una matriz al puntero y viceversa en Delphi?
Cuando defino la matriz columna como:
const arrWidth :array[1..4] of integer = (100,100,100,70);
y establecer la propiedad Tag a:
ComboBox.Tag := integer(@arrWidth);
y luego en caso OnDrawItem, lo arrojó de nuevo a una matriz:
Widths :array of integer;
Widths := pointer(ComboBox.Tag);
Puedo ver los elementos de la matriz bien, pero la matriz no sabe su longitud. Parece ser mucho más largo con todo tipo de valores aleatorios.
He intentado utilizar una matriz dinámica, pero ni siquiera obtengo los valores de columna adecuados.
alternativas que no implican el almacenamiento de los punteros de la matriz en la etiqueta incluyen la redacción de un descendiente que almacena los valores de una propiedad dedicada a la tarea, y el almacenamiento de los anchos de columna en una matriz asociativa (como TDictionary) que mapea combo- instancias de caja a matrices de ancho. –
Gracias por el comentario. Consideré crear un descendiente, pero lo consideré demasiado esfuerzo. Tal vez haría la forma más fácil de mantener en el futuro, pero esta era la primera vez en 15 años que quería un cuadro combinado con columnas, así que no pensé que volvería a usarlo mucho. –