Newsgroup: it.comp.lang.delphi
Titolo: Ini file - creazione e gestione.

Saluti al gruppo.
Potreste gentilmente spiegare ad un principiante che sta
 smanettando con d2 come creare e soprattutto gestire
gli Ini files?
Dall'Help leggo che una funzione come questa mi crea
un file ini col nome dato da me all'applicazione:
{ le var sono:
var
  Form1: TForm1;
   itini: TIniFile;
   it:string;
giorscelto:string;
   ittxt:Integer;}
function INIFileName: string;
begin
  Result := ChangeFileExt(ParamStr(0), '.INI');
end;
poi io ho fatto:
procedure TForm1.FormCreate(Sender: TObject);
begin
it:=INIFileName;
edit1.Text:=it;{Messa per vederne apparire il nome, come 
controllo}
ittxt:=FileCreate(it);
itini:= TIniFile.Create(it);
itini.Free;
Il fiele Ini vien creato, così, ma non 
mi pare la soluzione migliore.
E poi come evito che al riavvio del programma il file Ini mi
venga ricreato ex-novo, cancellandomi i dati inseriti nelle
varie sezioni nelle sedute precedenti??
Ma poi come diavolo creo le section del file Ini?
Ho provato:
itini.WriteString('Dati', giorscelto, edit2.text);
{Dove su giorscelto dovrebbe andare una var data trasformata
in stringa e sull' edit2 una
nota di testo}. Ma qui ho un errore, non in compilazione, 
ma sull'evento
associato A RUN TIME. Il bello è che se ho già un file
ini nella cartella con le sezioni pronte, il tutto funziona.
POTRESTE poi spigarmi la convenienza o meno dell'uso del 
file ini anzichè del
registro di win (vantaggi, svantaggi).
Io preferisco il file ini, che non mi sporca il registro. 
Sbaglio?
Grazie infinite per l'attenzione.
PS
Ho chiesto in passato sui decompilatori, e vedo dai messaggi
sul Ng che la cosa interressa parecchie persone. Potete 
comunque
confermare che per delphi non esistono
validi decompilatori, soprattutto per
quanto riguarda la lettura del codice?

>
Potreste gentilmente spiegare ad un principiante che sta
 smanettando con d2 come creare e soprattutto gestire
gli Ini files?
Dall'Help leggo
[...]
E poi come evito che al riavvio del programma il file Ini mi
venga ricreato ex-novo, cancellandomi i dati inseriti nelle
varie sezioni nelle sedute precedenti??
Ma poi come diavolo creo le section del file Ini?
[...]
POTRESTE poi spigarmi la convenienza o meno dell'uso del
file ini anzichè del
registro di win (vantaggi, svantaggi).
Io preferisco il file ini, che non mi sporca il registro.
Sbaglio?
[...]
<<
Consentimi di suggerirti una lettura un po' più approfondita dell'help.
detto questo:
a) non serve che ti crei un file di testo; TIniFile gestisce lo streaming
su disco in modo 'trasparente'; l'unico metodo che faccia riferimento
_diretto_ al disco è UpdateFile (che flusha le informazioni lette o scritte
su TIniFile).
b) all'avvio del programma controlli se esiste il file ini; se esiste,
carichi le informazioni con i metodi ReadXxxx del TCustomIniFile; se non
esiste, lo crei con le informazioni di default (e poi lo rileggi) oppure
carichi le info di default mediante ReadInteger, ReadString...(v. help).
c) per la creazione di Sezioni o valori (coppie chiave=valore) all'interno
di una sezione usi WriteString, WriteBool, WriteInteger... o
Dall'Esempio di WriteInteger (TCustomIniFile):
var  GameIni: TIniFile;
begin
  Gameini := TIniFile.Create('FUNGAME.INI');
  with GameIni do begin
    WriteBool('Options', 'Sound', True);
    WriteInteger('Options', 'Level', 3);
    WriteBool('Configuration', 'ShowToolBar', True);
    Free;
  end;
end;
Se la sezione (o la chiave, o il valore) non esiste, viene creata:
Attempting to write a data value to a non-existent section or attempting to
write data to a non-existent key are not errors. In these cases,
WriteInteger creates the section and key and sets its initial value to
Value.
d) il registro (che andrebbe usato con TRegistry o con TRegIniFile) è lo
standard per mantenere informazioni relative alla configurazione della
applicazione per Win95, 98 e NT4. Vantaggi: più difficilmente l'utente
medio ci ficca le mani. Svantaggi: ?
A quanto ho sentito, Win2000 sarebbe tornato ai file. Personalmente uso sia
l'uno che l'altro metodo.
hth
Paolo Arosio