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;
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.