grazie dell'indicazione.
Ci ho lavorato un po' per trovare quale fosse la strada giusta per assicurarmi che tutto fosse rilasciato nella maniera corretta, il meglio che ho pensato è di inserire tutto nel metodo Free, anche perchè, per abitudine, così libero gli oggetti.
Ti posto il codice della procedura Free della classe TTBase deriva da TXML che deriva da TStringList.
Implementa la creazione di una pagina xml che viene appunto scritta su un file testo quando viene chiamata la procedura Free e trasferita in remoto.
codice:
procedure TTBase.Free;
var
nome_file : string;
locale_adr, remote_adr : string;
host, user, psw : string;
res : boolean;
begin
// lo preleva dalle impostazioni
locale_adr := SetLocaleAdrMacro(IniFile.ReadString('Indirizzi Fisici', 'Root', ''));
with DominiTbl do
begin
remote_adr := FieldByName('adr_root');
remote_adr := SetRemoteAdrMacro(fDominio, remote_adr);
host := FieldByName('ftp_host');
user := FieldByName('ftp_user');
psw := FieldByName('ftp_password');
end;
nome_file := GetFileName;
SaveToFile(locale_adr + '/' + nome_file);
res := FtpPutFile(host, '21', remote_adr + '/' + nome_file, locale_adr + '/' + nome_file, User, psw);
with TLogFile.Create ('gesti.log') do
begin
if not res then
Write('non è stato possibile trasferire il file ' + nome_file)
else
Write('file ' + nome_file + ' correttamente trasferito via ftp');
Free;
end;
with DominiTbl do Free;
inherited;
end;
in questa modo sono sicuro che quando libero la memoria di un oggetto derivato il tutto mi viene scritto su disco e trasferito in remoto semplicamente scrivento oggett.Free.
Una classe figlia che implementa un layout a tre colonne ha il metodo Free
codice:
procedure TLAY3.Free;
begin
Current := 'inside_sx';
AddChild('div');
Attributo('class', 'clear');
AddContent('');
Current := 'inside_dx';
AddChild('div');
Attributo('class', 'clear');
AddContent('');
Current := 'content_tag';
AddChild('div');
Attributo('class', 'clear');
AddContent('');
Current := 'innerColumnContainer';
AddChild('div');
Attributo('class', 'clear');
AddContent('');
inherited;
end;
l'inherited finale mi assicura che tutta la catena venga eseguita prima della distruzione dell'oggetto.
Se ti sembra che sia poco sicuro potrei provare a spostare il codice in Destroy.
ciao e grazie
sergio