Dann schau mal in der Hilfe
Multithread-Anwendungen entwickeln. Wenn man es nach ein paar Jahren dann verstanden hat, ist es sehr einfach und extrem nützlich
In deinem Beispiel als Ansatz (zeigt Mausposition und Cursorhandle in einem Label):
Delphi-Quellcode:
interface ...
type
...
TMausInfo = record
CursorPos : TPoint;
Cursor : HCURSOR;
end;
TMausThread = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
end;
...
var
MausInfo : TMausInfo;
implementation
...
{ TForm1 }
procedure TForm1.bnnMausThreadClick(Sender : TObject);
begin
TMausThread.Create(False);
end;
procedure TForm1.UpdateLabel;
begin
// Hier dann auf evtl. Änderungen reagieren
LabelMausInfo.Caption := Format('%d/%d x%8.8x', [MausInfo.CursorPos.X,MausInfo.CursorPos.Y, MausInfo.Cursor]);
end;
{ TMausThread }
constructor TMausThread.Create(CreateSuspended: Boolean);
begin
inherited Create(True);
FreeOnTerminate := True;
if not CreateSuspended then Resume;
end;
destructor TMausThread.Destroy;
begin
inherited;
end;
procedure TMausThread.Execute;
var
CI : TCursorInfo;
begin
while not Terminated do
begin
CI.cbSize := SizeOf(CI);
if GetCursorInfo(CI) then
begin
MausInfo.CursorPos := ci.ptScreenPos;
MausInfo.Cursor := ci.hCursor;
Synchronize(Form1.UpdateLabel);
end;
// Wartezeit 1/10 Sekunde (NICHT EXAKT!!!)
Sleep(100);
end;
end;