// Getestet mit D4 unter WinME

// Durch Abfrage des Tastenstatus wird eine Schleife beendet; z.B. bei
// drücken der Strg-Taste:

procedure schleife(lbl: TLabel); 
var dummy: shortint; 
begin 
  dummy := GetAsyncKeyState(VK_CONTROL); 
  lbl.caption := 'Schleife gestartet'; 
  repeat 
    // hier geschieht, was eben in der Schleife geschehen soll 
    application.processmessages; 
    if application.terminated then exit; 
  until GetAsyncKeyState(VK_CONTROL) <> 0; // <---- hier passierts
  lbl.caption := 'Schleife beendet'; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  schleife(Label1); 
end;


//------------------------------------------------------------

//Die ganze Sache geht auch mit der Maus, z.B. mit der rechten Maustaste:

procedure schleife(lbl: TLabel); 
var dummy: shortint; 
begin 
  dummy := GetAsyncKeyState(VK_RBUTTON); 
  lbl.caption := 'Schleife gestartet'; 
  repeat 
    // hier geschieht, was eben in der Schleife geschehen soll 
    application.processmessages; 
    if application.terminated then exit; 
  until GetAsyncKeyState(VK_RBUTTON) <> 0; 
  lbl.caption := 'Schleife beendet'; 
end;


//------------------------------------------------------------

// Alles funktioniert natürlich auch ohne "Virtual-Key Codes",
// z.B. durch drücken der Taste "A":

procedure schleife(lbl: TLabel); 
var dummy: shortint; 
begin 
  dummy := GetAsyncKeyState(ord('A')); 
  lbl.caption := 'Schleife gestartet'; 
  repeat 
    // hier geschieht, was eben in der Schleife geschehen soll 
    application.processmessages; 
    if application.terminated then exit; 
  until GetAsyncKeyState(ord('A')) <> 0; 
  lbl.caption := 'Schleife beendet'; 
end;


//------------------------------------------------------------

// Da durch den abgesetzten Nummernblock manche Tasten zweimal vorhanden
// sind, muss man evtl. eine doppelte Abfrage einrichten, beispielsweise
// bei "0":

procedure schleife(lbl: TLabel); 
var dummy: shortint; 
begin 
  dummy := GetAsyncKeyState(ord('0')); 
  dummy := GetAsyncKeyState(VK_NUMPAD0); 
  lbl.caption := 'Schleife gestartet'; 
  repeat 
    // hier geschieht, was eben in der Schleife geschehen soll 
    application.processmessages; 
    if application.terminated then exit; 
  until (GetAsyncKeyState(ord('0')) <> 0) or (GetAsyncKeyState(VK_NUMPAD0) <> 0); 
  lbl.caption := 'Schleife beendet'; 
end;

// P.S.
// Die "Virtual-Key Codes" findet man in der Datei WINDOWS.PAS

Zugriffe seit 6.9.2001 auf Delphi-Ecke