Piszę aplikację która w tle co jakiś czas pobierać będzie informacje z serwera i wyświetlać je w TLabel. Musi to dziać się jednak w osobnym wątku który nie przeszkadza aplikacji (w tle).
Mam coś takiego:
unit MainFrmU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, IdMultipartFormData;
type
TMainFrm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
type
TConnect = class(TThread)
private
{}
protected
procedure Execute; override;
public
function Connect(url, param: string): string;
end;
var
MainFrm: TMainFrm;
implementation
{$R *.dfm}
procedure TConnect.Execute;
begin
FreeOnTerminate := true;
end;
function TConnect.Connect(url, param: string): string;
begin
{
Ta funkcja łączy sie z serwerem i zwraca otrzymane informacje
}
end;
end.
ale nie mam pojęcia jak z klasy TMainFrm wywołać funkcję CONNECT (wątek TConnect) i w głównej klasie otrzymać wynik tej funkcji. Teorytycznie coś takiego:
procedure TMainFrm.Button2Click(Sender: TObject);
var
con: TConnect;
begin
con := TConnect.create(nil);
label1.caption := con.Connect('http://www.strona.pl', 'parametry dla serwera');
end;
Niby coś tam udało mi się zrobić aby działało ale nie wyglądało to na wielowątkowość bo blokowało formę i w trakcie przesuwania okienka nic się nie działo do czasu puszczenia kursora. Jak to powinno wyglądać aby działało "tak na prawdę w tle"?