Zitat von
Robert:
Der Ansatz ist falsch.
Lagere das Senden in einen Thread aus und die Oberflaeche friert nicht ein.
Ich denke angestrengt darüber nach,
aber eigener Thread hilft mir wohl auch nicht weiter.
Die Anwendung arbeitet mit ActionLists; ich könnte also die Action vorher disablen.
Allerdings arbeiten die Benutzer wie am Fliessband.
Solange der Dialog mit der ser. Schnittstelle läuft, würden der Shortcut F6 der mit der Action verbunden ist,
zu nichts führen.
Dann müsste er nochmals F6 drücken...
Irgendwie muss ich Keyboard Messages solange verzögern, bis mein lang dauernder Vorgang abgeschlossen ist.
Von meiner Anwendung heraus rufe ich ein VB-Script auf; dieses VB-Script startet nun den
lang dauernder Vorgang (Automatisierungschnittstelle).
Das macht die Sache noch komplizierter.
Im Moment sieht meine Warteschleife so aus:
Delphi-Quellcode:
...
ClearKeyBoardBuffer; // KEY-Messages einfach schlucken
Application.ProccessMessage;
Irgenwie müsste global für die Anwendung alle Keyboard-Events abfangen und in einer eigenen Queue zwischenspeichern.
[Edit]
Inzwischen habe ich eine eigene Message Queue gebaut.
Damit werden Key-Messages zwischengespeichert:
Delphi-Quellcode:
// Test Procedure
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to 100 do
begin
// alle Messages ausser KEY-Messages verarbeiten
ProccessMessagesNoKey;
Sleep(100);
end;
// jetzt alle Key-Messages aus der Vergangenheit abspielen
PlaybackMessageQueue;
end;
[/Edit]