Seite 1 von 2
Auf bestimmtes Tastenkombi reagieren
Verfasst: 09.03.2007 14:55
von dysti
Hey,
ich habe ein Eingabefenster mit nur Textfeldern und mit nur einen Button.
Wenn man auf den Button klickt, schließt sich das Fenster.
Jetzt möchte ich, das man die Tastenkombination
Strg-ALTGER-F12
drückt und sich dann das Fenster schließt.
Hinweis: Alt-F4 wird abgefangen.
Habe alles mögliche schon probiert.
Wie wird so etwas gemacht?
Verfasst: 09.03.2007 15:14
von Fluid Byte
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
AddKeyboardShortcut(0,#PB_Shortcut_Alt | #PB_Shortcut_Control | #PB_Shortcut_F12,105)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Menu And EventMenu() = 105
CloseWindow(0)
EndIf
Until EventID = #WM_CLOSE
Verfasst: 09.03.2007 16:36
von Kaeru Gaman
@Fluid
könntest du bitte noch erklären, warum du die 105 gewählt hast?
Verfasst: 09.03.2007 16:49
von dysti
@Fluid Byte:
Das Programm bleibt auch nach Erstellung eines Buttons bei dieser Zeile hängen:
und gibt diese Fehlermeldung aus:
Ich dachte immer, man müßte erst ein Menue erstellen mit dieser ID, z.B. 105 bei deiner Vorgabe und genau das möchte ich nicht.
Wenn es aber so geht wie du es vorgeschlagen hast, ist es auch ok.
Jetzt muß nur noch die Fehlermeldung weg.
Verfasst: 09.03.2007 16:50
von Fluid Byte
Sonst funktioniert es nicht!
Ich benutze nie NULL als ID, jedenfalls nicht im Test-Stadium. Damit kann man prüfen ob sich ein Code mit variablen Angaben wirklich funktioniert oder sich auf NULL als Ausgangs ID verlässt. Somit habe Ich schon diverse Bugs aufgespürt.
[EDIT]
At least one window should be opened to use command
Du musst diesen Befehl benutzen
nachdem du ein Fesnter erstellt hast.
Ich dachte immer, man müßte erst ein Menue erstellen mit dieser ID, z.B. 105 bei deiner Vorgabe und genau das möchte ich nicht.
Nix is'! Du brauchst kein Menü um das zu benutzen.
[/EDIT]
Verfasst: 09.03.2007 16:51
von edel
So kannst du auch das beenden abfangen :
Code: Alles auswählen
Procedure cb(hwnd,msg,wParam,lParam)
If msg = #WM_SYSCOMMAND
If wParam = #SC_CLOSE
result = MessageRequester("","Wirklich schliessen ?",#PB_MessageRequester_YesNo)
If Not result = #PB_MessageRequester_Yes
ProcedureReturn 0
EndIf
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
hwnd = OpenWindow(0,0,0,100,100,"",#WS_OVERLAPPEDWINDOW)
SetWindowCallback(@cb())
Repeat
e = WaitWindowEvent()
Until e = 16
Verfasst: 09.03.2007 18:09
von dysti
@Fluid Byte:
Ich verstehe deine Antwort nicht.
Ich habe dein Code so hieraus kopiert in den PB-Editor. Wenn ich es dann compiliere, bleibt das Prg stehen und gibt die Fehlermeldung aus.
Verstehst du jetzt, warum ich deine Antwort nicht verstehe.
Normal müßte es bei dir auch so sein.
Wenn es aber bei funktioniert, dann verstehe ich es nicht.
Habe PB 4.02.
@Edel: Das sieht gut aus, aber arbeitet mit Callback.
Nun ja, wenn es nicht anders geht, muß ich wohl die Callback-Version nehmen.
Habe es ausprobiert. Es ist da ja gar keine Tastenabfrage vorhanden.
Komme ich also auch nicht weiter.
Verfasst: 09.03.2007 18:21
von bobobo
es fehlt nur ein End hinter closewindow(0)
Da die ShortcutAbfrage nur MIT Fenster funktioniert
es aber genau durch die Tastenkombi geschlossen wird OHNE das
Programm zu Beenden.
Kompiliert sieht man von diesem Fehler allerdings vermutlich nichts mehr.
Verfasst: 09.03.2007 18:42
von dysti
Danke @bobobo.
Aber jetzt kommt der Hammer.
Ich habe das Original jetzt unter Xp kompiliert und nicht unter WIN2000.
Keine Fehlermeldung.
Verfasst: 09.03.2007 19:05
von Fluid Byte
dysti hat geschrieben:Danke @bobobo.
Aber jetzt kommt der Hammer.
Ich habe das Original jetzt unter Xp kompiliert und nicht unter WIN2000.
Keine Fehlermeldung.
Aha, daher stinkts!
Ich habe ebenfalls XP und PB4.02 und es funktioniert tadellos. Das man bei Win2k ein END hinter CloseWindow() packen muss kann ich dir beim besten Willen nicht erklären.