odwoanie do TIdTCPClient z funkcji

odwoanie do TIdTCPClient z funkcji
MR
  • Rejestracja:około 15 lat
  • Ostatnio:5 dni
0

W moim programie mam 4 IdTCPClient jak odwoac sie do nich z funkcji ( tcpclient:TIdTCPClient to nie dziala)

Kopiuj
form1.IdTCPClient1;
form1.IdTCPClient2;
form1.IdTCPClient3;
form1.IdTCPClient4;

function readTCP(tcpclient:TIdTCPClient): string;

begin
  try
    try
         if form1.tcpclient.Connected then
      begin
           form1.Timer2.Enabled := False;
          form1.tcpclient.IOHandler.WriteLn('READ');
          s := form1.tcpclient.IOHandler.ReadLn();
          form1.Timer2.Enabled := True;
      end;
     except
       end;
  finally
  end;

end;
edytowany 1x, ostatnio: flowCRANE
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 dni
  • Postów:2100
1

Zapomniałeś napisać co nie działa
i po co tutaj jest timer ?


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
CP
i po co tutaj jest timer ? Sporo ludzi robi coś takiego, że zamiast sprawdzać np. po każdym znaku czy hasło jest odpowiednio silne, to dają timer co sekundę, albo timerem sprawdzają co sekundę czy przyszła wiadomość, zamiast poprosić system operacyjny i ten doda przerwanie do wait_queue i obudzi proces jak coś przyjdzie, albo wróci jak nic nie ma i może w tym czasie odświeżyć aplikację i za chwilę znowu się zapytać. Wydaje mi się, że u niektórych timer jest takim narzędziem do wszystkiego.
MR
  • Rejestracja:około 15 lat
  • Ostatnio:5 dni
0

Funkcja jest w timer1 ale to nie jest istotne . Mam problem w tym miejscu '' function readTCP(tcpclient:TIdTCPClient): string; ''
nie wiem jak przypisac IdTCPClient do funkcji

to dziala ale nie chce tak robic:

Kopiuj
function readTCP(): string;
begin
  try
    try
         if form1.IdTCPClient1.Connected then
      begin
               result := form1.IdTCPClient1.IOHandler.ReadLn();
      end;
     except
       end;
  finally
  end;
end;


function readTCP(): string;
begin
  try
    try
         if form1.IdTCPClient2.Connected then
      begin
               result := form1.IdTCPClient2.IOHandler.ReadLn();
      end;
     except
       end;
  finally
  end;
end;

function readTCP(): string;
begin
  try
    try
         if form1.IdTCPClient3.Connected then
      begin
               result := form1.IdTCPClient3.IOHandler.ReadLn();
      end;
     except
       end;
  finally
  end;
end;

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
2

Skoro w funkcji przekazujesz parametr to nie pisz tak jakby tego parametru nie było czyli if form1.tcpclient.Connected then itd. tylko odwołuj się do tego parametru czyli zwyczajnie if tcpclient.Connected then itd.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MR
  • Rejestracja:około 15 lat
  • Ostatnio:5 dni
0
kAzek napisał(a):

Skoro w funkcji przekazujesz parametr to nie pisz tak jakby tego parametru nie było czyli if form1.tcpclient.Connected then itd. tylko odwołuj się do tego parametru czyli zwyczajnie if tcpclient.Connected then itd.

Dzieki Kazek pomoglo, problemem bylo form1.
teraz dziala

Kopiuj
function readTCP(tcpclient:TIdTCPClient): string;

begin
  try
    try
         if tcpclient.Connected then
      begin
          
          tcpclient.IOHandler.WriteLn('READ');
          result := tcpclient.IOHandler.ReadLn();
      
      end;
     except
       end;
  finally
  end;

end;
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 minuty
0

Tak na marginesie.

  1. Funkcja/procedura nie będąca metodą klasy nie powinna się odwoływać do jakieś instancji obiektu(klasy) (u Ciebie "form1"). Do przekazania do procedury/funkcji instancji obiektu służą parametry.
  2. W twoim kodzie sekcja try filnally end jest zupełnie niepotrzebna
Kopiuj
          form1.Timer2.Enabled := False; <=== !!!
          form1.tcpclient.IOHandler.WriteLn('READ'); <=== !!!
Kopiuj

function readTCP(aTcpClient:TIdTCPClient;aTimer:TTimer): string;

begin
  try
    if aTcpClient.Connected then
       begin
           aTimer.enabled:= False;
           aTcpClinet.IOHandler.WriteLn('READ');
           result := aTcpClient.IOHandler.ReadLn();
           aTimer2.Enabled := True;
       end;
  except
    on e:exeption
    begin
      // do something
    end 
  end;

end;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.