Luknij na przykład jak mniej więcej coś takiego powinno wyglądać a jak czegoś nie zrozumiesz to pytaj
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;
type
TOnAvailUserCountChange = procedure (Sender: TObject; ACount: Integer) of Object;
TCheckThread = class(TThread)
private
fIdHTTP: TIdHTTP;
fAvailUserCount: Integer;
fOnAvailUserCountChange: TOnAvailUserCountChange;
procedure DoOnAvailUserCountChange;
protected
procedure Execute; override;
public
property OnAvailUserCountChange: TOnAvailUserCountChange read fOnAvailUserCountChange
write fOnAvailUserCountChange;
property AvailUserCount: Integer read fAvailUserCount;
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
ListBox1: TListBox;
btnStart: TButton;
btnStop: TButton;
procedure FormCreate(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
fCheckThread: TCheckThread;
procedure AvailUserCountChange(Sender: TObject; ACount: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TCheckThread.DoOnAvailUserCountChange;
begin
fOnAvailUserCountChange(Self, fAvailUserCount);
end;
procedure TCheckThread.Execute;
const
GOOGLE_URL = 'http://google.pl';
var
html: String;
fActualUserCount: Integer;
begin
while not Terminated do
begin
try
//tu cos co ma watek robic ja dla jaj pobiore strone google
html:= fIdHTTP.Get(GOOGLE_URL);
//a tu przyklad zdarzenia widzialem ze tam cos grzebierz w kodzie
//i pobierasz ilosc sostepnych ludzi ja nie wnikam w to tylko wezme
//losowoa wartosc
fActualUserCount:= Random(11);;
if fActualUserCount <> fAvailUserCount then
begin
fAvailUserCount:= fActualUserCount;
if Assigned(fOnAvailUserCountChange) then
Synchronize(DoOnAvailUserCountChange);
end;
Sleep(1000);
except
//tu reakcja na bledy (ja je zwyczajnie olewam)
end;
end;
end;
constructor TCheckThread.Create;
const
UA = 'Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1';
begin
inherited Create(True);
Self.FreeOnTerminate:= True;
fOnAvailUserCountChange:= nil;
fAvailUserCount:= 0;
fIdHTTP:= TIdHTTP.Create;
fIdHTTP.Request.UserAgent:= UA;
fIdHTTP.HandleRedirects:= True;
end;
destructor TCheckThread.Destroy;
begin
if Assigned(fIdHTTP) then
fIdHTTP.Free;
end;
procedure TForm1.AvailUserCountChange(Sender: TObject; ACount: Integer);
begin
ListBox1.Items.Add(IntToStr(ACount));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
fCheckThread:= nil;
end;
procedure TForm1.btnStartClick(Sender: TObject);
begin
if not Assigned(fCheckThread) then
fCheckThread:= TCheckThread.Create;
fCheckThread.OnAvailUserCountChange:= AvailUserCountChange;
fCheckThread.Resume;
end;
procedure TForm1.btnStopClick(Sender: TObject);
begin
if Assigned(fCheckThread) then
fCheckThread.Terminate;
fCheckThread:= nil;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
btnStop.Click;
end;
end.