Publicar Propriedades de objetos privados da classe

Delphi

04/06/2009

Pessoal, estou criando uma classe que incorpora varios outros objetos do delphi. ex:


type TConnector = class
     private
       HTTP : TIdHTTP;
       Temp : TStrings;
     public
       constructor create
       destructor destroy; override;
end;



Até aí tudo bem, vou criando os procedimentos para manipular os objetos.

o problema é que eu preciso ´exteriorizar´ por exemplo a propriedade Request do HTTP, mas sem declarar a variável HTTP : TIDHTTP no public, para que o componente todo não fique liberado para uso fora da classe.

Sei que a declaração de propriedades usando variaveis internas funciona assim:

type TConnector = class
     private
       HTTP : TIdHTTP;
       Temp : TStrings;
==>    testeRequest : TIdHTTPRequest;
     public
==>    Property Request : TIdHTTPRequest read testeRequest write testeRequest;
       constructor create
       destructor destroy; override;
end;



Tentei aplicar este mesmo conceito na variavel http, mas ele da um erro declarei desta maneira:
type TConnector = class
     private
       HTTP : TIdHTTP;
       Temp : TStrings;
     public
==>    property Request : TIdHTTPRequest read HTTP.Request write HTTP.Request;
       constructor create
       destructor destroy; override;
end;


mas quando vou compilar o delphi me retorna o erro [i:57ca905958] [Pascal Error] Un_DBIWebConnector.pas(16): E2467 Record or object type required[/i:57ca905958]

alguém sabe como posso fazer para liberar essa propriedade de uma maneira mais simples? sem ter que criar procedimentos para atualização?


Prgdelphi

Prgdelphi

Curtidas 0

Respostas

Woinch

Woinch

04/06/2009

  type TConnector = class 
    private 
      HTTP : TIdHTTP; 
      Temp : TStrings; 
      procedure: SetRequest(Value: TIdHTTPRequest);
      function GetRequest: TIdHTTPRequest;
    public 
      Property Request : TIdHTTPRequest GetRequest write SetRequest; 
      constructor create 
      destructor destroy; override; 
    end;

    {...}

    procedure TConnector.SetRequest(Value: TIdHTTPRequest)
    begin
      HTTP.Request := Value;
    end;

    function TConnector.GetRequest: TIdHTTPRequest;
    begin
      Result := HTTP.Request;
    end;


Acho que é isso que você quer né?
PS: Não testei o código. Mas acho que vai funcionar.

Espero ter ajudado...


GOSTEI 0
Woinch

Woinch

04/06/2009

*Faltou um read antes do GetRequest na Property.


GOSTEI 0
Prgdelphi

Prgdelphi

04/06/2009

Muito bom!!!
Funcionou perfeitamente. Aprendi mais uma.

Muito obrigado amigo.


GOSTEI 0
Woinch

Woinch

04/06/2009

Que bom que lhe foi util! ;)


GOSTEI 0
POSTAR