Einzelnen Beitrag anzeigen

Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#3

AW: Schleifenabbruch durch Esc Taste...

  Alt 1. Nov 2014, 21:49
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.
  Mit Zitat antworten Zitat