Auf bestimmtes Tastenkombi reagieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Auf bestimmtes Tastenkombi reagieren

Beitrag 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?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Fluid

könntest du bitte noch erklären, warum du die 105 gewählt hast?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@Fluid Byte:
Das Programm bleibt auch nach Erstellung eines Buttons bei dieser Zeile hängen:

Code: Alles auswählen

EventID = WaitWindowEvent()
und gibt diese Fehlermeldung aus:

Code: Alles auswählen

At least one window should be opened to use command
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.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Sonst funktioniert es nicht! :twisted:

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]
Zuletzt geändert von Fluid Byte am 09.03.2007 16:54, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag 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.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Danke @bobobo.
Aber jetzt kommt der Hammer.
Ich habe das Original jetzt unter Xp kompiliert und nicht unter WIN2000.
Keine Fehlermeldung.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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! Bild

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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten