Cita:
Empezado por Lepuke
¿ Cual es el problema ?
|
No estoy seguro al 100%, pero yo diría que no asignas correctamente el evento.
En primer lugar, no tienes que usar TMethod. En segundo lugar, asignas el manejador del evento
después de abrir el socket, así que normal que no lo llame porque no le das oportunidad.
Mira a ver si lo siguiente funciona (no tengo Delphi [ni Windows] en este momento, así que no puedo comprobarlo yo):
Código Delphi
[-]
program chat;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Win.ScktComp, idContext, idGlobal;
TYPE
TMiAplicacion = CLASS (TObject)
PUBLIC
PROCEDURE leer_datos (Sender: TObject);
END;
Procedure TMiAplicacion.leer_datos(Sender: TObject);
Begin
WriteLn (TCustomWinSocket (Socket).ReceiveText)
End;
var
MiApp: TMiAplicacion;
ClientSocket1: TCustomWinSocket;
begin
try
MiApp := TMiAplicacion.Create;
ClientSocket1 := TClientSocket.Create(nil);
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 123;
ClientSocket1.OnRead := @MiApp.leer_datos;
ClientSocket1.Open;
while '1'='1' do
begin
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
FreeAndNil (ClientSocket1);
FreeAndNil (MiApp)
end.
En cualquier caso, quizá te venga bien echarle un vistazo a la biblioteca
Synapse.
Y una pregunta, ¿Delphi no tiene una clase TCustomApplication, como Lazarus? Si es así, también te recomiendo que la uses porque te facilitará las cosas. En cualquier caso, un objeto "Aplicacion" casi siempre es útil, sobre todo en aplicaciones complejas.