Dlaczego nie czyta IdTCPClient1 w funkcji?

0
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TForm1 = class(TForm)
     IdTCPClient1: TIdTCPClient;
    Label1: TLabel;
    procedure IdTCPClient1Connected(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Responser: string;
var
idtype: integer;
length: integer;
response: string;
begin
idtype := IdTCPClient1.ReadInteger();
length := IdTCPClient1.ReadInteger();

IdTCPClient1.ReadBuffer(response, length);
Result := response;
end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
Label1.caption := Responser();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
IdTCPClient1.Connect();
end;

end.

Dlaczego nie czyta IdTCPClient1 w funkcji responser

0

zamien na:

function TForm1.Responser: string;
0

I jeśli się nie mylę, to można od razu przekazać to co zwróci ReadBuffer do Result. Niepotrzebna dodatkowa zmienna. Jeśłi jednak nadal coś nie działa, to tylko chyba @kAzek ma cierpliwość ogarniać najlepiej tutaj Indy :/

0

@krolarturxd - rozwijając nieco wypowiedź poprzednika, nie możesz odwoływać się do prywatnych składowych klasy z funkcji, która nie jest składową tej klasy (metodą funkcyjną); Możesz skorzystać ze zmiennej z referencją do instancji klasy TForm1; Ty masz zmienną globalną Form1, więc jedynie z niej możesz korzystać w takim przypadku;

Aby więc uzyskać dostęp do IdTCPClient1, albo korzystaj ze zmiennej Form1 i przez nią odwołuj się do IdTCPClient1, albo przekształć funkcję Responser na metodę klasy formularza (czyli zadeklaruj ją w odpowiedniej sekcji klasy formularza), albo zagnieźdź ją w metodzie IdTCPClient1Connected;

Poza tym powinieneś dostać błąd kompilacji o treści Undeclared identifier: 'IdTCPClient1', który jasno mówi, że ten komponent jest dla funkcji Responser niewidoczny; Kłaniają się podstawy obiektowości, więc polecam przestudiować jakiś kurs OOP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1