wird erst 7 - 12 Sekunden später angezeigt.
Entweder du machst was falsch, oder du hast den Code nicht ganz verstanden.
Kann man da irgendwie was machen, dass der Dialog nahezu zeitgleich angezeigt wird?
Ja, du drückst sofort ESC und somit kommt der Dialog auch sofort.
Und nicht die ESC-Taste zu lange drücken.
-> Wenn Taste gedrückt, dann zeige den Dialog an und frag nach, ob wirklich abgebrochen werden soll.
Was könnte da falsch sein?
Delphi-Quellcode:
Unit1
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
ResetEscPressed;
for i := 0
to 10000000
do
begin
Caption := inttostr(i);
if EscPressed('
Schleife abbrechen ?')
then break;
end;
end;
...
...
...
unit Tastendruck;
interface
uses
Windows, Dialogs, Controls;
function EscPressed(
const Msg:
string):Boolean;
procedure ResetEscPressed;
implementation
function EscPressed(
const Msg:
string):Boolean;
begin
// Aus der WinAPI-Doku zu GetAsyncKeyState:
// if the function succeeds, the return value specifies whether the key was pressed
// since the last call to GetAsyncKeyState, and whether the key is currently up or down.
// If the most significant bit is set, the key is down, and if the least significant bit is set,
// the key was pressed after the previous call to GetAsyncKeyState.
// The return value is zero if a window in another thread or process currently has the keyboard focus
Result := ((GetAsyncKeyState(VK_ESCAPE)
and $8001) <> 0)
or
((GetAsyncKeyState(VK_PAUSE)
and $8001) <> 0);
if Result
then
begin
Result := (MessageDlg(Msg, mtConfirmation, [mbYes,mbNo], 0) = mrYes);
end;
end;
// muss vor dem Benutzen von EscPressed() aufgerufen werden
procedure ResetEscPressed;
begin
GetAsyncKeyState(VK_ESCAPE);
GetAsyncKeyState(VK_PAUSE);
end;
Also ich drücke den Button, die Schleife wird ausgeführt und im Form1.Caption wird das Hochzählen der Schleife angezeigt. Wenn ich jetzt ESC drücke, hört das Hochzählen sofort auf, aber der 'Schleife abbrechen' Dialog wird erst nach weiteren ~7 Sekunden angezeigt. Merkwürdig... Liegt es an Windows 7 64bit?
Während der 7 Sekunden geht am Rechner nichts anderes mehr.