AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifenabbruch durch Esc Taste...

Ein Thema von Codix32 · begonnen am 1. Nov 2014 · letzter Beitrag vom 9. Nov 2014
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz