Ho una casella combinata disegnata dal proprietario che visualizza le stringhe nelle colonne. La routine di disegno può essere condivisa tra combo se posso in qualche modo passare le specifiche della colonna all'evento OnDrawItem. Un modo naturale per farlo sarebbe passare la matrice di larghezze di colonna nella proprietà ComboBox.Tag e quindi ricondurla a un array.Come lanciare un array al puntatore e tornare in Delphi?
Quando definisco la matrice colonna come:
const arrWidth :array[1..4] of integer = (100,100,100,70);
e impostare la proprietà Tag a:
ComboBox.Tag := integer(@arrWidth);
e poi in caso OnDrawItem, gettò di nuovo a un array:
Widths :array of integer;
Widths := pointer(ComboBox.Tag);
Posso vedere bene gli elementi dell'array, ma l'array non conosce la sua lunghezza. Sembra essere molto più lungo con tutti i tipi di valori casuali.
Ho provato a utilizzare un array dinamico, ma non riesco nemmeno a ottenere i valori di colonna corretti.
alternative che non comportano memorizzare i puntatori array nel tag includono crei una discendente che memorizza i valori in una struttura dedicata al compito, e memorizzare la larghezza delle colonne in un array associativo (come TDictionary) che associa combo- istanze box a matrici di larghezza. –
Grazie per il commento. Avevo pensato di creare un discendente, ma lo consideravo troppo impegnativo. Forse renderebbe la forma più manutenibile in futuro, ma questa era la prima volta in 15 anni che volevo una casella combinata con colonne, quindi non pensavo che avrei riutilizzato molto. –