Mein Vorschlag : Vergiß einfach die ganzen Postfixe wie $ bei PB. Klar, es gibt sie bei manchen
Basicsprachen auch heute noch. War halt dafür gedacht, daß man z.b. am $ am Ende des Funktionsnamens
erkennen konnte, daß die Funktion einen String zurück gibt. Ich verwende das $ auch nicht bei selber
geschriebenen Funktionen. Nur noch die Hexzahlen bekommen eines als Prafix.
ESC Taste gedrückt ?
Re: ESC Taste gedrückt ?
PB 6.10
Re: ESC Taste gedrückt ?
Hallo Franz54,
wenn es sich nicht um ein Konsolenprogramm handelt, würde ich folgende Prozedur empfehlen, die ich mir dafür gebaut habe (funktioniert nur mit Windows, da die Windows-API benutzt wird):
Dann kannst Du im Hauptprogramm wie folgt abfragen:
Damit kann man beliebige Tasten abfragen, auch kombiniert mit Shift, Ctrl, Alt und AltGr. Auch so seltsame Sache wie: IsKey(#VK_SHIFT,2) - das fragt Shift zusammen mit Ctrl ab, ohne irgendeine andere Taste.
Gruß, Jens-Arne
wenn es sich nicht um ein Konsolenprogramm handelt, würde ich folgende Prozedur empfehlen, die ich mir dafür gebaut habe (funktioniert nur mit Windows, da die Windows-API benutzt wird):
Code: Alles auswählen
Procedure IsKey(vk.l,Alternator.b=0,hForegroundWindow.i=0) ;Alternator: 0=nichts, 1=Shift, 2=Ctrl, 4=Alt, 8=AltGR (kann mit "|" kombiniert werden; 8 muss für sich allein stehen); hForegroundWindow: WindowID des Fensters, das aktiv sein muss, damit der Tastendruck als gültig angesehen wird
protected Ergebnis.b=0,*KeyboardState,Shift.b=1,Ctrl.b=1,Alt.b=1,AltGr.b=1,fgw.b=1,korrekt.b=1
*KeyboardState=AllocateMemory(256)
GetKeyboardState_(*KeyboardState) ;128=Taste gedrückt, 0=Taste nicht gedrückt
if Alternator<>0 ;dient der Codebeschleunigung (wenn kein Alternator, keine Prüfungen)
if ((Alternator & 1)=1) and ((PeekB(*KeyboardState+#VK_SHIFT) & 128)<>128)
Shift=0
endif
if ((Alternator & 2)=2) and ((PeekB(*KeyboardState+#VK_CONTROL) & 128)<>128) or ((PeekB(*KeyboardState+#VK_RMENU) & 128)=128)
Ctrl=0
endif
if ((Alternator & 4)=4) and ((PeekB(*KeyboardState+#VK_MENU) & 128)<>128) or ((PeekB(*KeyboardState+#VK_RMENU) & 128)=128) ;Menu=Alt
Alt=0
endif
if ((Alternator & 8)=8) and ((PeekB(*KeyboardState+#VK_RMENU) & 128)<>128) ;RMenu=AltGr
AltGr=0
endif
endif
if hForegroundWindow<>0
if GetForegroundWindow_()<>hForegroundWindow
fgw=0
endif
endif
if (Shift=korrekt) and (Ctrl=korrekt) and (Alt=korrekt) and (AltGr=korrekt) and (fgw=korrekt) and ((PeekB(*KeyboardState+vk) & 128)=128)
Ergebnis=1
WindowEvent() ;sonst wird der Tastendruck nicht zurückgesetzt, wenn die Taste losgelassen wird
endif
FreeMemory(*KeyboardState)
ProcedureReturn Ergebnis
EndProcedure ;IsKey
Code: Alles auswählen
if IsKey(27)
while IsKey(27)
delay(25) ;so lange warten, bis Escape nicht mehr gedrückt wird, damit andere Programme, die ebenfalls hierauf reagieren, nicht auch geschlossen werden
wend
;Programm beenden, Dialog schließen, was auch immer
endif
Gruß, Jens-Arne