Ottimizzare l’utilizzo dei combobox

Capita spesso di utilizzare maschere di inserimento/variazione dati in cui si devono selezionare dei valori provenienti da alcune tabelle in condizioni di carenza di spazio sulle form. Per ovviare a questo problema esistono i ComboBox, ed il componente data-aware dbComboBox.
Le selezioni da ComboBox precaricati con i valori contenuti in una tabella non presentano difficoltà se la riga di testo della selezione è costituita da un solo campo che è poi anche una chiave (o un indice univoco) per la tabella sorgente dei dati. Occorre scrivere un po’ di codice se invece la riga di testo visualizzata dal ComboBox deve contenere i dati di due o più campi, e se, in base ad un altro valore presente nella tabella, si desidera cambiare il colore del testo di visualizzazione.
Tip fornito dal sig. P.Peri

L’idea semplice che sta dietro a questa soluzione è quella di utilizzare un carattere non stampabile che separi i campi all’interno della stringa di testo che viene utilizzata come riga del ComboBox. - ho scelto di utilizzare il carattere CR (#13) – e rendere visibili solo i campi desiderati, mentre quelli necessari alla ricerca univoca nella tabella vengono nascosti. In fase di cambiamento dell’indice attivo del ComboBox occorre procedere all’operazione inversa, ovvero ricostruire i campi necessari alla ricerca univoca.
Per esempio (esempio che non ha nessuna attinenza con le applicazioni reali) ho costruito una tabella Access la cui struttura è la seguente:

Tabella_Persone
ID			Contatore		Chiave primaria
Cognome		Testo (20)		Indicizzato (duplicati ammessi)
Nome			Testo (20)		Indicizzato (duplicati ammessi)
Data_di_nascita	Data/Ora
Luogo_di_nascita	Testo (40)
Codice_fiscale	Testo (16)		Indicizzato (duplicati non ammessi)
Attivo			Sì/No

Il campo privilegiato per la ricerca è ID, ma la selezione da parte dell’utente avviene in base ai campi Cognome e Nome che saranno i soli visualizzati nel ComboBox. Il campo Attivo determinerà invece se il colore con cui vengono scritti i nomi nel ComboBox è nero (o un qualunque altro colore di default) oppure rosso (o un qualunque altro colore di evidenziazione).
Per poter scrivere nell’oggetto canvas del controllo ComboBox occorre poter “bypassare” il drawing di default dello stesso, cosa che si ottiene impostando la proprietà Style a csOwnerDrawFixed. Infine per poter eseguire la selezione in ordine alfabetico sul controllo occorre impostare la proprietà Sorted a True.
Il codice è presente in UnitComboBoxPluricolonna.pas ed è presente, insieme ad un’applicazione di esempio, nel cd-rom allegato alla rivista e/o sul sito web di ioProgrammo (www.ioprogrammo.it)