// 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

|