Però, a run-time il compilatore mi dà errore di access violation sul casting di "comando"; immagino sia perchè non è stato istanziato come stream. Allora ho creato anche una variabile temporanea di tipo TStream e l'ho inizializzata, ma mi dà sempre access violation.codice:type TCommand = class(TObject) cmd : string[10]; opt : string; data: TList; end; TRubrica = class(TObject) Nome, Cognome: string[15]; Azienda: string[30]; NumTel, NumCell: string[20]; Email, Notes : string[30]; end; // omissis procedure TForm1.Button1Click(Sender: TObject); begin comando: TCommand.Create; // la variabile comando è dichiarata "private" nella classe del form comando.cmd := 'GetList'; comando.opt := 'A'; // secondo il mio protocollo questo comando con quest'opzione chiede al server di fare una lista di contatti che comincino per A IdTcpClient1.WriteStream(TStream(comando)); IdTcpClient1.ReadStream(TStream(comando)); // il client riceve risposta dal server ed inizia l'interpretazione dello stream. // omissis end;