Das Suchen läuft ja in 'nem Thread ab ... in der Schleife wird ja "nur" auf das Ende des Suchthreads gewartet.
So, hab nun mal tief gesucht und so... *schweißabwisch*
CM_MOUSEENTER (CM_BASE + 19) und CM_MOUSELEAVE (CM_BASE + 20) wird in TApplication.DoMouseIdle ausgelöst, welches über TApplication.Idle aufgerufen wird.
TApplication.Idle wird aber leider nur in TApplication.HandleMessage aufgerufen, wenn sonst keine Messages vorhanden waren.
Da ich nur Application.ProcessMessages regelmäßig aufrufe und wärend die Buttonprozedur abgearbeitet wird von der
VCL kein TApplication.HandleMessage ausgeführt wird, kann es leider nicht funktionieren.
Delphi-Quellcode:
procedure TApplication.ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;
procedure TApplication.HandleMessage;
var
Msg: TMsg;
begin
if not ProcessMessage(Msg) then Idle(Msg);
end;
TApplication.HandleMessage kann ich nicht selber aufrufen, da sonst der Hauptthread Aufgrund mangelnder Messages einfrieren kann.
Im Anhang mal eine Datei mit Application.ProcessMessages und Application.HandleMessage in der Schleife ... leider bleibt da Anzeige stehen, wenn keine Messages (z.B. durch das Bewegen der Maus über die Form) mehr empfangen werden.
> der Zähler unterm Stopp-Button steht, wenn z.B. keine Maus über der Form bewegt wird.
Da Idle den Haupthtread schlafen legt, ich DoMouseIdle nicht direkt aufrufen kann
und es unschön wäre, wenn ich z.B. vom Thread aus ständig den Hauptthread mit (Blind)Nachrichten bombadiere, nur damit der nicht einschlaft,
werd' ich wohl damit Leben müssen. (z.B. auf 'nen Timer umzustellen wollt' ich halt nich)