Ho aggiornato anche questo codice:
Codice:procedure TForm1.ConnettiClick(Sender: TObject); var client: TIdTCPClient; begin client := TIdTCPClient.Create; client.Port := 2630; client.Host := edit3.text; client.ReadTimeout := 10000; Writeln('Starting client...'); while True do begin try if not client.Connected then begin client.Connect; Writeln('Connected!'); SendHello(client.IOHandler); end; while client.Connected do if not HandleResponse(client.IOHandler) then break; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end; Writeln('Closing'); end;
Il problema sta qui, hai copiato il codice della console application in un bottone di una VCL application. L'errore probabilmente è causato da ogni singola chiamata a
Writeln
per cui basta toglierle o sostituirle con un assegnazione a una label o su una memo. L'altro problema: il codice è disegnato per lavorare in modo blocking su un thread, significa che una volta risolto l'errore succederà che dopo aver cliccato il bottone il programma funzionerà, ma l'interfaccia grafica verrà congelata, crashando se provi a cliccare da qualche parte.Se vuoi continuare ad usare un form VCL e risolvere il problema del freeze sposta il codice in un thread separato e sincronizzalo quando vuoi leggere/scrivere qualcosa nel form.
Credo ti sia stato fornito sufficiente supporto su quest'argomento, sul forum non è la regola dare esempi già pronti, a questo punto dovresti approfondire ciò che ti ho suggerito per conto tuo per comprendere meglio ed essere in grado di continuare da solo. Se hai nuovi problemi a cui non vieni a capo apri pure un nuovo thread, in tal modo avrà un titolo più coerente con ciò che stai chiedendo ed altri utenti potranno usufruirne, cosa che non accadrebbe in questo thread visto che la domanda iniziale era una e dopo vari problemi-soluzioni si è arrivato a tutt'altro.