Puisque votre principal problème est la fréquence de mise à jour, vous devez la réduire. Pour cela, vous pouvez simplement enregistrer la dernière mise à jour du document HTML et, au prochain changement de données, vérifier si une certaine période s'est écoulée depuis ce moment.
Voici le code qui montre comment faire. Le site FUpdatePeriod
dans l'exemple suivant est la période de mise à jour en millisecondes. Ensuite, si vous appelez la fonction UpdateChanges
périodiquement, le innerHTML
(pseudo-code ici) ne sera mis à jour que lorsqu'au moins 1000 ms se seront écoulées depuis sa dernière modification.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MSHTML, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
FLastUpdate: Cardinal;
FUpdatePeriod: Cardinal;
procedure UpdateChanges(const AData: WideString);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FUpdatePeriod := 1000;
end;
procedure TForm1.UpdateChanges(const AData: WideString);
begin
if (GetTickCount - FLastUpdate > FUpdatePeriod) then
begin
(WebBrowser1.Document as IHTMLDocument2).body.innerHTML := AData;
FLastUpdate := GetTickCount;
end;
end;
// now remains to call the UpdateChanges periodically
end.