Ich würde die Kommunikation asynchron per Thread machen und die graphische Aktualisierung synchronisieren. Das funktioniert auch beim Verschieben eines Fensters problemlos, zumindest unter Windows 8. Testbeispiel von mir eben (nicht schön, nur zum Test):
Delphi-Quellcode:
type
TTest = class(TThread)
protected
procedure Execute; override;
end;
TForm18 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form18: TForm18;
implementation
{$R *.dfm}
procedure TForm18.Button1Click(Sender: TObject);
begin
TTest.Create(False);
end;
{ TTest }
procedure TTest.Execute;
begin
while not Terminated do
begin
TThread.Synchronize(nil, procedure
begin
Form18.Canvas.LineTo(Random(Form18.ClientWidth), Random(Form18.ClientHeight));
end);
Sleep(100);
end;
end;