Hi,
ich hab mir deine eingefügten Komentare sowie deinen Link angeschaut.
Folgende Lösung:
Schreibe einen Thread in dem Du die Aktionen deines
nicht modalen Überwachungsfensters steuerst (Fenster auch in diesem Thread kreieren und aufrufen).
An den entsprechenden Stellen deines Hauptprogrammes setzt du eine Abfrage über eine eigene Function für Warten (in dieser ein Sleep und Application.ProcessMessages). Mit dem Thred kannst du ein Ereignis senden, mit dem eine globale Variable deines Hauptprogrammes gesetzt wird.
Das alles so etwa nach dem Schema
Delphi-Quellcode:
Function MyWeiter: Boolean;
begin
Result := False;
sleep(50);
Application.ProcessMessages;
if not isWait then Result := True;
end;
// laufend im Hauptprogramm
// ab hier warten
repeat
until MyWeiter
isWait := False;
// und weiter zum nächsten Wartepunkt
Die Variable isWait wird durch das Ereignis des Thread für das Anzeigefenster gesetzt. So liegt das Fenster aus dem Thread heraus immer oben und der Programmablauf wird durch die Schalter gesteuert.
Gruß oki