1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
TMonThread = class(TThread)
private
Target: TStrings;
List : TStrings;
procedure Done;
public
constructor Create(ATarget: TStrings);
destructor Destroy; override;
procedure Execute; override;
end;
constructor TMonThread.Create(ATarget: TStrings);
begin
Target := ATarget;
List := TStringList.Create;
inherited Create(False);
FreeOnTerminate := True;
end;
destructor TMonThread.Destroy;
begin
List.Free;
inherited;
end;
procedure TMonThread.Execute;
var
i, Index, alive, position_saut_de_ligne : Integer;
boucle_infinie : boolean;
recuperation_source, ligne_en_en_cours : string;
dernier_id : string;
begin
dernier_id := '567169'; // pour mes testes je le saisie manuellement, mais je ferai la récupération auto par la suite
boucle_infinie := true;
alive := 0;
while boucle_infinie = true do
begin
sleep(1000);
inc(alive);
form1.Label1.Text := 'Thread lancé depuis : ' + inttostr(alive); // afin de m'assurer que le thread tourne toujours
recuperation_source := UTF8ToString(GetURLAsString('http://mon.site/script.php?id=' + dernier_id));
recuperation_source := AnsiReplaceText(recuperation_source,'',''); // caractère bizarre que je supprime
// je travaille la source de la page afin de mettre dans ma liste les entrées de la BDD sans les retours chariots
if length(recuperation_source) > 0 then
begin
position_saut_de_ligne := Pos('<br>', recuperation_source);
List.clear;
// toutes les entrées récupérées dans la bdd seront dans ma list
while position_saut_de_ligne > 0 do
begin
ligne_en_en_cours := Gauche('<br>', recuperation_source);
recuperation_source := Droite('<br>', recuperation_source);
position_saut_de_ligne := Pos('<br>', recuperation_source);
List.Add(ligne_en_en_cours);
end;
// je parcours ma liste pour ajouter les instructions à mon Memo ET JE RECUPERE LE DERNIER ID
for i := 0 to List.Count-1 do
begin
ligne_en_en_cours := List[i];
dernier_id := Gauche('|', ligne_en_en_cours);
instruction := Droite('|', ligne_en_en_cours);
form1.memo1.Lines.Add(instruction);
end;
form1.Memo1.GoToTextEnd;
Synchronize(Done);
end;
end;
end;
procedure TMonThread.Done;
begin
Target.Assign(List);
end;
function GetURLAsString(const aURL: string): string;
var
lHTTP: TIdHTTP;
begin
lHTTP := TIdHTTP.Create(nil);
try
Result := lHTTP.Get(aURL);
finally
lHTTP.Free;
end;
end;
function droite(substr: string; s: string): string;
begin
if pos(substr,s)=0 then result:='' else
result:=copy(s, pos(substr, s)+length(substr), length(s)-pos(substr, s)+length(substr));
end;
function gauche(substr: string; s: string): string;
begin
result:=copy(s, 1, pos(substr, s)-1);
end; |
Partager