Argomento decisamente molto vasto e abbastanza articolato dal punto di vista pratico.

I modi per ottenere il salvataggio di ordine e larghezza delle colonne sono molteplici.

Puoi ad esempio memorizzare (alla chiusura del form o alla pressione di un apposito pulsante) le larghezze delle colonne iterando la proprietà Columns del controllo DBGrid interessato.

Le larghezze di ciascuna colonna si ottengono ispezionando la proprietà Width di ciascun elemento della Collection Columns.

I valori reperiti possono essere memorizzati poi all'interno del Registro di Configurazione di Windows usando la classe TRegistry (unit Registry.pas) oppure all'interno di file INI (usando la classe TIniFile o una delle sue discendenti).

Per quanto riguarda l'ordine delle colonne, puoi memorizzare all'interno del mezzo persistente scelto le informazioni sui campi da visualizzare sulla colonna 0, 1, 2, 3 e così via.

Affinchè tutto il meccanismo funzioni, credo sia necessario definire la quasi totalità delle caratteristiche delle colonne a runtime.

Io l'ho fatto per un'applicazione gestionale in cui una classe base contenente griglia e pulsanti di ordinamento definisce un set di colonne da visualizzare con caratteristiche predefinite modificabili ottenendo i valori di larghezza e ordine dal Registro; le classi discendenti da questa si ritrovano un'interfaccia già completa che deve essere solo regolata in termini di colonne da mostrare e proprietà predefinite di queste, ma la classe base fornisce già tutto il codice necessario - e scritto solo una volta - per permettere a qualsiasi classe discendente di memorizzare nel Registro le proprie impostazioni.

Se desideri maggiori informazioni in merito all'uso di file INI, posso suggerirti la lettura di un articolo che ho scritto io stesso sul sito Programmazione.it.

Ciao!