TextFile
file ini I file INI rappresentano ancora oggi una soluzione semplice, veloce ed efficace per salvare le impostazioni di un'applicazione desktop. Grazie alla classe TIniFile di Free Pascal e Lazarus è possibile creare, leggere e modificare questi file con poche istruzioni, mantenendo il codice pulito e facilmente comprensibile.
home page
 

Come creare file INI per salvare le impostazioni del programma.

Pubblicato il: 30-6-2026

Ultima Modifica: 30-6-2026

Come creare file INI per salvare le impostazioni del programma ⚙️📄

Quasi tutte le applicazioni desktop permettono all'utente di personalizzare alcune impostazioni, come la dimensione della finestra, il colore dell'interfaccia, il percorso della cartella di lavoro o l'ultimo documento aperto. Per evitare di dover configurare tutto ogni volta che il programma viene avviato, è necessario salvare queste informazioni in modo permanente.

Uno dei metodi più semplici e utilizzati consiste nell'impiego dei file INI. Si tratta di file di testo leggibili anche con un normale editor come Blocco Note o Gedit, facili da creare e da gestire. Nonostante esistano formati più moderni come XML o JSON, i file INI rimangono una scelta eccellente per applicazioni desktop di piccole e medie dimensioni.

In questo articolo vedremo come creare, leggere e modificare file INI utilizzando Free Pascal e Lazarus.


📖 Cosa sono i file INI?

Un file INI è un semplice file di testo organizzato in sezioni e chiavi.

Un esempio:

[Generale]
Nome=Il Mio Programma
Lingua=Italiano
Tema=Chiaro

[Finestra]
Larghezza=900
Altezza=600
Massimizzata=False

[Database]
Percorso=/home/utente/database.db

Come si può notare:

  • ogni sezione è racchiusa tra parentesi quadre;

  • ogni impostazione è composta da una coppia Nome=Valore;

  • il file è facilmente leggibile anche da un essere umano.


✅ Vantaggi dei file INI

L'utilizzo dei file INI offre numerosi vantaggi:

  • 📄 sono semplici da creare;

  • 👀 possono essere letti con qualsiasi editor di testo;

  • ⚡ sono molto veloci da elaborare;

  • 🧩 non richiedono database;

  • 🔧 sono ideali per salvare le impostazioni del programma.


📂 Dove salvare il file INI?

Una pratica comune consiste nel salvare il file nella stessa cartella del programma.

Ad esempio:

IlMioProgramma/

├── IlMioProgramma.exe
├── Config.ini
└── Dati/

Su Linux, tuttavia, è consigliabile utilizzare la cartella personale dell'utente, ad esempio:

/home/paolo/.config/IlMioProgramma/config.ini

In questo modo le impostazioni rimangono separate dai file dell'applicazione.


🛠️ L'unità IniFiles

Free Pascal mette a disposizione una comoda unità chiamata:

IniFiles

Per utilizzarla basta aggiungerla nella clausola uses:

uses
  Classes, SysUtils, IniFiles;

Questa unità contiene la classe TIniFile, che semplifica tutte le operazioni di lettura e scrittura.


📝 Creare un file INI

La creazione del file è molto semplice.

uses
  IniFiles;

var
  Config: TIniFile;

begin
  Config := TIniFile.Create('config.ini');

  Config.Free;
end;

Se il file non esiste, verrà creato automaticamente.


✍️ Scrivere una stringa

Per salvare una stringa si utilizza:

WriteString

Esempio:

Config.WriteString('Generale', 'Nome', 'Mario');

Il file diventerà:

[Generale]
Nome=Mario

🔢 Scrivere un numero intero

Per salvare un valore numerico:

Config.WriteInteger('Finestra', 'Larghezza', 1024);

Risultato:

[Finestra]
Larghezza=1024

🔘 Scrivere un valore booleano

Per salvare un valore vero/falso:

Config.WriteBool('Finestra', 'Massimizzata', True);

Nel file comparirà:

Massimizzata=1

oppure:

Massimizzata=True

a seconda della piattaforma e dell'implementazione.


📖 Leggere una stringa

La lettura è altrettanto semplice.

var
  Nome: String;

Nome := Config.ReadString('Generale', 'Nome', 'Sconosciuto');

L'ultimo parametro rappresenta il valore predefinito da utilizzare se la chiave non esiste.


🔢 Leggere un numero

var
  Larghezza: Integer;

Larghezza := Config.ReadInteger('Finestra', 'Larghezza', 800);

Se il valore non è presente verrà restituito 800.


✔️ Leggere un valore booleano

var
  Massimizzata: Boolean;

Massimizzata := Config.ReadBool('Finestra', 'Massimizzata', False);

💾 Salvare la posizione della finestra

Un utilizzo molto frequente consiste nel memorizzare la posizione della finestra.

Alla chiusura del programma:

Config.WriteInteger('Finestra', 'Left', Left);
Config.WriteInteger('Finestra', 'Top', Top);
Config.WriteInteger('Finestra', 'Width', Width);
Config.WriteInteger('Finestra', 'Height', Height);

🖥️ Ripristinare la posizione

All'avvio:

Left   := Config.ReadInteger('Finestra', 'Left', 100);
Top    := Config.ReadInteger('Finestra', 'Top', 100);
Width  := Config.ReadInteger('Finestra', 'Width', 800);
Height := Config.ReadInteger('Finestra', 'Height', 600);

L'utente ritroverà il programma esattamente come lo aveva lasciato.


🌙 Salvare il tema grafico

Ad esempio:

Config.WriteString('Aspetto', 'Tema', 'Scuro');

Successivamente:

Tema := Config.ReadString('Aspetto', 'Tema', 'Chiaro');

📁 Ricordare l'ultima cartella utilizzata

Molti programmi aprono automaticamente l'ultima cartella visitata.

Per salvarla:

Config.WriteString(
  'Cartelle',
  'Ultima',
  '/home/utente/Documenti'
);

Per leggerla:

Percorso :=
Config.ReadString(
  'Cartelle',
  'Ultima',
  ''
);

🧹 Eliminare una chiave

Per cancellare un'impostazione:

Config.DeleteKey('Generale', 'Nome');

🗑️ Eliminare un'intera sezione

Config.EraseSection('Database');

Tutta la sezione verrà rimossa.


🔍 Verificare se una chiave esiste

È possibile controllare l'esistenza di una chiave.

if Config.ValueExists('Generale', 'Nome') then
  ShowMessage('Chiave trovata');

📚 Verificare se una sezione esiste

if Config.SectionExists('Database') then
  ShowMessage('Sezione presente');

🔒 Liberare la memoria

Una volta terminato l'utilizzo del file INI bisogna sempre liberare l'oggetto.

Il metodo migliore consiste nell'utilizzare un blocco try...finally:

var
  Config: TIniFile;

begin
  Config := TIniFile.Create('config.ini');

  try
    Config.WriteString('Utente', 'Nome', 'Paolo');
    Config.WriteInteger('Finestra', 'Width', 1024);
  finally
    Config.Free;
  end;
end;

In questo modo l'oggetto viene liberato anche se durante l'esecuzione si verifica un errore.


💡 Creare una classe dedicata alle impostazioni

Nei programmi più complessi è consigliabile racchiudere tutta la gestione del file INI in una classe dedicata, ad esempio:

TImpostazioni
│
├── Carica()
├── Salva()
├── LeggiTema()
├── SalvaTema()
├── LeggiPercorso()
└── SalvaPercorso()

Questa soluzione rende il codice più ordinato, riutilizzabile e semplice da mantenere.


⚠️ Buone pratiche

Quando si utilizzano i file INI è consigliabile seguire alcune semplici regole:

  • 📂 utilizzare nomi di sezione descrittivi;

  • 📝 scegliere nomi di chiavi chiari e coerenti;

  • 🛡️ prevedere sempre valori predefiniti durante la lettura;

  • 🧹 eliminare le impostazioni obsolete;

  • 📦 centralizzare la gestione del file INI in un'unica unità del progetto;

  • 🔒 usare sempre try...finally per garantire il rilascio delle risorse.


🚀 Un esempio completo

Un possibile file di configurazione per un editor di testo potrebbe essere:

[Generale]
Lingua=Italiano
Tema=Scuro

[Finestra]
Width=1024
Height=768
Left=120
Top=80
Massimizzata=False

[Editor]
Font=Consolas
Dimensione=12
MostraNumeriRiga=True
Tabulazione=4

[Documenti]
UltimoFile=/home/paolo/Documenti/Articolo.txt

Con una struttura di questo tipo, il programma potrà ripristinare automaticamente tutte le preferenze dell'utente all'avvio.

🎯 Conclusione

Pur non essendo adatti a gestire grandi quantità di dati, sono perfetti per memorizzare preferenze, percorsi, dimensioni delle finestre, temi grafici e altre configurazioni dell'utente. Adottando una buona organizzazione delle sezioni e delle chiavi e seguendo le buone pratiche illustrate in questo articolo, sarà possibile realizzare applicazioni più professionali, pratiche e piacevoli da utilizzare.