HotKeyEvent, Event $105

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

judos

Betreff: HotKeyEvent, Event $105

BeitragSa, Sep 04, 2010 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend zusammen,

Ein weiteres Thema zu dem ich eben so wenig mit der Suche wie in der Hilfe gefunden habe.

Das Beispiel zu Hotkeyevent geht bei mir bestens. Allerdings funktioniert es in meinem bereits bestehenden Programm überhaupt nicht.

;Hotkey events
HotKeyEvent 49, 1, $5000,0

Also mit dem Code sollte es möglich sein über Shift+N ein Event $5000 auszulösen. Wenn ich das Programm starte geht das aber leider überhaupt nicht. Komischerweise funktioniert es aber sobald ich das Programm einmal minimiert habe und wieder zurückgeholt habe. Das macht für mich soweit überhaupt keinen Sinn.

Hat jemand irgend ein Anhaltspunkt woran das liegen kann?

Vielen Dank für die Hilfe!

mfg judos


/edit1:
Mit einigen anderen Events scheint es ebenfalls Probleme zu geben. $101,$102,$103 funktionieren nicht solange ich das Programm nicht kurz minimiere und wieder herstelle.

Zudem kriege ich ein undokumentiertes Event $105 zurück wenn ich ESC drücke. Passiert auch wenn ich kein HotKeyEvents reintue...

ozzi789

BeitragSo, Sep 05, 2010 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du deinen Code posten?
Welches OS?
Neustes B+ Update?

mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

judos

BeitragSo, Sep 05, 2010 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
OS: Windows XP SP3 Version 2002
Blitzplus Version: IDE V1.42 Linker V1.10 Runtime V1.42

Ok Code ist ein bisschen lange also hab ich nur das herauskopiert was eigentlich eine Rolle spielt.
Sonst bitte nachfragen dann poste ich noch mehr...
BlitzBasic: [AUSKLAPPEN]

;Fenster erstellen
Global gui_window=CreateWindow(gui_title$,configGet("window_x"),configGet("window_y"),
configGet("window_width"),configGet("window_height"),0,15)
SetMinWindowSize gui_window,400,300
[...]
;Toolbar
Global gui_panel=CreatePanel(-1,0,GadgetWidth(gui_window)-7,
GadgetHeight(gui_window),gui_window,1)
SetGadgetLayout gui_panel,1,1,1,1
Global gui_toolbar=CreateToolBar("Data\toolbar.png",0,0,288,16,gui_panel)

;Tabbs
Global gui_tabber=CreateTabber(0,28,GadgetWidth(gui_window)-10,
GadgetHeight(gui_window)-93,gui_panel,0)
SetGadgetLayout gui_tabber,1,1,1,1
AddGadgetItem gui_tabber,"Hilfe"
[...]
;HTML-View im Hilfe Tab
Global gui_html_view=CreateHtmlView(-1,0,GadgetWidth(gui_tabber),
GadgetHeight(gui_tabber)-23,gui_tabber)
SetGadgetLayout gui_html_view,1,1,1,1
HtmlViewGo gui_html_view,CurrentDir$()+"Help\index.html"

;Panel und Canvas in allen anderen Tabs
Global tab_panel=CreatePanel(-1,0,GadgetWidth(gui_tabber),
GadgetHeight(gui_tabber)-23,gui_tabber,1)
SetGadgetLayout tab_panel,1,1,1,1
Global tab_canvas
Global tab_slider=CreateSlider(GadgetWidth(gui_tabber)-200,0,17,
GadgetHeight(gui_tabber)-27,tab_panel,2)
SetGadgetLayout tab_slider,0,1,1,1
SetSliderRange tab_slider,100,100

;Mausdaten
Global img_cursor=LoadImage("Data\beam_r.png")
Global mouse_mx,mouse_my,mouse_globalx,mouse_globaly,mouse_draw=0

;Timer
Global timer=CreateTimer(10)

;HotkeyEvents
HotKeyEvent 49,2,$5000 ;Bei Ctrl+N Event $5000 auslösen

Tab_select(0)
;Hauptschleife aufrufen
main()

;Hauptschleife
;Wenn frames >0 ist wird die Schleife nur frames Mal durchgegangen.
;Mit event kann angegeben werden ob events behandelt werden sollen oder nicht
Function main(frames=0,event=1)
Repeat

If tab_aktuell>0 Then
canvas_draw()
canvas_mouse()
FlipCanvas tab_canvas,0
Cls
EndIf

If event Then events()
window_resize()

If frames>0 Then
frames=frames-1
If frames=0 Then Exit
EndIf

DebugLog KeyDown(29)
Forever
End Function

;Nachdem das Fenster vergrössert / verkleinert wurde muss jeder Canvas neu erstellt werden
; um die Skalierung des Inhaltes zu verhindern.
Function window_resize()
If window_resize=1 Then
If MilliSecs()-window_last_resize>500 Then
window_last_resize=MilliSecs()
window_resize=0
canvas_resize()
EndIf
EndIf
End Function

Function canvas_draw()
End Function

Function canvas_mouse()
mx=MouseX(tab_canvas)
my=MouseY(tab_canvas)
gx=MouseX()
gy=MouseY()
If mx<>mouse_mx Or my<>mouse_my Then
mouse_draw=1
mouse_mx=mx
mouse_my=my
ElseIf mx=mouse_mx And my=mouse_my And
(gx<>mouse_globalx Or gy<>mouse_globaly) Then
mouse_draw=0
EndIf
mouse_globalx=gx
mouse_globaly=gy
If mouse_draw=1 Then DrawImage img_cursor,mx-10,my-10
End Function

;Zeichenoberfläche erneuern, falls Fenster vergrössert/verkleinert wurde
; verhindert Skalierung vom Inhalt im Canvas
Function canvas_resize()
If tab_canvas<>0 Then FreeGadget tab_canvas
tab_canvas=CreateCanvas(0,0,GadgetWidth(tab_panel),
GadgetHeight(tab_panel),tab_panel)
SetGadgetLayout tab_canvas,1,1,1,1
HidePointer tab_canvas
SetBuffer CanvasBuffer(tab_canvas)
ClsColor 192,192,192
Cls
FlipCanvas tab_canvas
End Function

Function events()
Repeat
Select WaitEvent(timer)
;Case $101 ;Keydown
;Case $102 ;Keyup
;Case $103 ;Keystroke
;Case $105 ;unbekanntes Event, hat wohl mit Tastendruck was zu tun
;Case $201 ;Mousedown
;Case $202 ;Mouseup
Case $203 ;MouseMove
Exit
;Case $204 ;MouseWheel
;Case $205 ;MouseEnter
;Case $206 ;MouseLeave
Case $401 ;Ein Gadget wurde angeklickt
Select EventSource()
Case gui_toolbar ;Toolbar Item ausgewählt
Toolbar_select(EventData())
Case gui_tabber ;Tab wurde angeklickt
Tab_select(EventData())
Case tab_slider
tab_aktuelle_zeile(tab_aktuell)=EventData()
main(1,0) ;canvas update
Default
DebugLog "unbearbeitetes gadget angeklickt: "+EventSource()+", data:"+EventData()
End Select
Case $801 ;Fenster wird verschoben
Case $802 ;Fenster vergrössern/verkleinern
window_resize=1
Case $803 ;Fenster schliessen
ende()
;Case $804 ;Fenster aktivieren
;Case $1001 ;Menü angeklickt
; Select EventData()
;
; End Select
;Case $2001 ;App Suspend
;Case $2002 ;App Resume
;Case $2004 ;Fenster im veränderungsmodus
;Case $2005 ;Fenster nicht mehr im veränderungsmodus
Case $4001 ;Timer tickt
Exit
Default
DebugLog "Unbearbeitetes Event: $"+Hex(EventID())
End Select
Forever
End Function



Grüsse judos

Thunder

BeitragSo, Sep 05, 2010 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ich nehme an, das Problem liegt im HTML-View. Da soll es viele Probleme geben und anscheinend kann man, während er aktiv ist, keine Hotkey-Events abfangen.

2. Wieso verwendest du den Handle, den du von CreateTimer zurückbekommst als Parameter für WaitEvent ?

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

judos

BeitragSo, Sep 05, 2010 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Stimmt das könnte ich mir ganz gut vorstellen dass das HTML-View Probleme macht.. Crying or Very sad

2. Hmm gute Frage, jetzt wo ich die Hilfe anschaue sehe ich, dass man bei WaitEvent ja eigentlich die Zeit direkt in ms angeben kann. Ich denke das war früher mal so beschrieben, dass man dort den Timer angibt Wink
Wenn ich allerdings einfach 100ms angebe, dann tritt das Event $0000 auf, also die abgelaufenen 100ms... Könnte man auch noch in der Dokumentation einfügen ^^
Und ich glaube dann wird das $4001 nicht mehr vorkommen.

Grüsse judos

/edit1: Habe es soeben ausprobiert. Wenn ich das HTML-View auskommentiere gehen die HotkeyEvents ohne Probleme ^^ Das Event $105 kommt dann auch nichtmehr vor. Vielleicht hat das was mit dem HTML-View zu tun... Also vielen Dank für den Tip. Werde jetzt schauen wie ich damit weiter arbeiten kann Rolling Eyes

Mfg judos

/edit2:
Das Problem tritt nur auf wenn das HTML-View Objekt fokusiert ist. Also wenn ich nach einer Aktion den Befehl "ActivateGadget tab_canvas" ausführe, dann funktionieren die Events wieder ohne Probleme.
Also wäre das Ziel immer dies auszuführen nachdem auf dem HTML-View Objekt herumgeklickt wurde.
Allerdings bin ich mir nicht sicher wie ich das herausfinden kann.
Zudem da das Problem ist, dass nicht jeder Klick eine Änderung der aktuellen URL im HTML-View zur Folge hat.

Silver_Knee

BeitragSo, Sep 05, 2010 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
zum timer:
einfach Waitevent() dann kommen nur noch die TimerTicks durch und kein 0.Event
 

judos

BeitragSo, Sep 05, 2010 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann krieg ich aber das Programm nicht mehr durch die Schlaufe wenn nicht gerade etwas passiert Wink
Ich brauch schon ca alle 50-100ms ein Durchlauf durch die Hauptschlaufe.


Also beim Tabwechseln ruf ich einfach ActivateGadget tab_canvas auf, dann geht das mit den Events.
Und mit MouseDownAbsolute kann ich prüfen ob im Hilfetab auf der Html-View oder halt sonstwo (egal) geklickt wird. 300ms später ruf ich dann ActivateGadget tab_canvas wieder auf. Dann funktionieren die Events auf im Hilfetab 300ms nach einem Klick wieder.

Jetzt habe ich aber ein neues Problem. Das Scrollen mit dem Mausrad geht nicht mehr sobald der Fokus nicht mehr im HTML-View liegt. Was ja logisch ist.
Also probiere ich falls Event $204 auftritt, den Fokus wieder auf das HTML-View zu setzen. Dass geht aber komischerweise noch nicht Confused

/edit1:
Gibts sonst noch irgendeine Möglichkeit den Fokus wieder auf das HTML-View zu setzen? (Userlibs z.B.) mit ActivateGadget funktioniert das nicht. Oder genützt zum scrollen jedenfalls nicht... Crying or Very sad

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group