Newsgroup: it.comp.lang.delphi
Titolo: Problema di visibilità

Ciao a tutti gente, tornando sulla questione dell'OOP, mi trovo col fare una
classe TFserve, che dovrebbe inglobalizzare un Socket ed un Thread. Il
problema č questo: Come faccio a rendere visibili il socket all'altra
classe? Per adesso ho provato cosě, ma ovviamente non funziona. Qlc dritta?
Praticamente i Metodi e le Proprietň dekka classe TFserve, devono essere
visibili anche alla classe TThreadSocket...
type
   TThreadSocket = class(TThread)
     FCmd : String;
     procedure Execute; override;
     procedure UpdateForm();
    end;
    TFServe = class
     FSocket : TIdTcpClient;
     FThread : TThreadSocket;
      constructor Create();
    end;
implementation
{ TThreadSocket }
procedure TThreadSocket.Execute;
begin
     Sleep(50);
     while FSocket.Connected do
     begin
     FCmd := FSocket.ReadLn();
     Synchronize(UpdateForm);
     end;
end;

 
 type
     TFServe = class;
    TThreadSocket = class(TThread)
// private, protected, public, published dove sono?
      FCmd : String;
      procedure Execute; override;
      procedure UpdateForm();
     end;
 
     TFServe = class
      FSocket : TIdTcpClient;
      FThread : TThreadSocket;
       constructor Create();
     end;
 
Saluti.
-- 
I'am what I'am, I do what I can

Beh, veramente io avevo provato anche mettendo i vari "TAG" chiave (private,
public, ecc...) però il problema è nella visibilità all'interno delle
procedure delle classi;
procedure TThreadSocket.Execute;
begin
     Sleep(50);
     while FSocket.Connected do
     begin
     FCmd := FSocket.ReadLn();
     Synchronize(UpdateForm);
     end;
end;
L'esempio qua sopra esegue il thread finchè il Socket, relativo alla classe
TFserve è connesso. Però non riesco a farlo vedere.

 all'interno delle procedure delle classi;
E' evidente che ti mancano delle solide basi di OO.
Ti suggerisco un buon libro.
<--------- begin code --------->
type
  TThreadSocket = class(TThread)
  private
    FCmd: string;
    FSocket: TIdTcpClient;
  public
    procedure Execute; override;
    procedure UpdateForm();
    property Socket: TIdTcpClient read FSocket write FSocket;
  end;
  TFServe = class
    FSocket: TIdTcpClient;
    FThread: TThreadSocket;
    constructor Create();
  end;
implementation
{ TThreadSocket }
procedure TThreadSocket.Execute;
begin
  Sleep(50);
  while FSocket.Connected do
  begin
    FCmd := FSocket.ReadLn();
    Synchronize(UpdateForm);
  end;
end;
procedure TThreadSocket.UpdateForm;
begin
//
end;
{ TFServe }
constructor TFServe.Create;
begin
  inherited;
  FSocket := TIdTcpClient.Create(nil);
  FThread := TThreadSocket.Create(True);
  FThread.Socket := FSocket;
  FThread.Resume;
end;
<--------- end code --------->


Ehm, in verità io dovevo avere UN SOLO socket, che gestivo con un thread...
Non posso utilizzare 2 socket


 Non posso utilizzare 2 socket
Tu vedi due riferimenti ad un solo socket e non due socket!
FSocket := TIdTcpClient.Create(nil);
Viene creato un solo socket
FSocket e FThread.Socket puntano alla stessa struttura!
Acqua
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3f42994f054840e8a76...@mygate.mailgate.org...
