Seite 1 von 1
Keyboard auf Gadget
Verfasst: 13.08.2007 09:18
von Schlingel
Hallo,
gibt es eine Möglichkeit keyboard ereignisse die auf Objekten(Gadgets: ListIconGadget) angewendet werden zu "lesen" ?
Da bei Tastendruck bei mir kein Event ausgelöst wird...
z.b. ich habe eine gefülle Liste und will per Enter,Space o.ä. in einer selectieren Zeile mir den Inhalt anzeigen lassen um Änderungen durchzuführen.
(Gibt es Enter als Konstante im Zusammenhang mit KeyboardExamine() ?)[/code]
Re: Keyboard auf Gadget
Verfasst: 13.08.2007 09:31
von Kiffi
SuFu benutzen!
Hatten wir erst vor einer Woche:
http://www.purebasic.fr/german/viewtopic.php?t=13867
Grüße ... Kiffi
Verfasst: 13.08.2007 09:50
von Schlingel
Ja habe ich genutzt...
Aber ich finde damit eh nie was.... vielleicht geb ich zuviel ein ...
-------------
Aber das bezieht sich doch eher auf OpenScreen usw.
Ich brauch das doch für Windows Anwendungen...
Code: Alles auswählen
Repeat
ExamineKeyboard()
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget
Case ListIconGadget
if eventtype = KeyboardReleased(#pb_key_space)
; bzw. if keyboardreleased(#pb_key_space)
....
....
....
Funzen nicht.... es kann ja wohl nicht nur diese Api als Lösung existieren... Wieso funzt das nicht mit irgend Eventtype oder Event kram... wenn ich irgend ne Taste auf irgendwas "wirke" dann wird ja wohl ein Event ausgelöst. In fast jeder "vernünftigen" Sprache gibts sogar Events wie KeyboardPress() bzw. Down oder Up() die sich auf sogut wie jedes Objekt anwenden lassen.
Oder ist sowas in PB wieder nicht von Haus aus eingebaut ?
Verfasst: 13.08.2007 10:02
von ts-soft
>> In fast jeder "vernünftigen" Sprache
würde ich dann einfach nutzen
Verfasst: 13.08.2007 10:15
von Kaeru Gaman
> wenn ich irgend ne Taste auf irgendwas "wirke" dann wird ja wohl ein Event ausgelöst.
eben nur bei wenigen objekten, jedenfalls platform-übergreifend.
Fred baut nicht unbedingt absolut Windows-spezifische geschichten als native befehle ein,
eben weil die komplette API sich ohne irgendwelchen zusatzaufwand ansprechen läßt.
wenn du veränderungen in einem Gadget registrieren willst,
gibt es den EventType() #PB_EventType_Change.
wirklich einzelne tastendrücke auf irgendeinem gadget registrieren zu wollen,
ist in keiner sprache trivial, eben weil man es nicht braucht.
...oder wozu sollte man das brauchen?
und wenn man dann wirklich so nen ausnahmefall hat, dann greift man halt auf Get(Async)Keystate zurück.
Verfasst: 24.08.2007 15:14
von Schlingel
Hallo,
mir ging es "damals" ja nur darum die Entertaste für die Gadgets(Buttons) fähig zu machen.
Darum dachte ich, ich poste mal den Code damit andere vielleicht das ebenso nutzen können und vorallem das man mich zurecht weißen kann und mir meine "Fehler" vor die Augen führen kann.
Das folgende ist doch sicher nur Windows tauglisch oder weil das #WM_Keyup zur Windows Api gehört ?!
Code: Alles auswählen
If key_enter = 0
Event = WaitWindowEvent()
EndIf
Select Event
Case #WM_KEYUP
If EventwParam() = 13
EventGadget = GetActiveGadget()
If GetActiveGadget() > 0
key_enter = 1
Event = #PB_Event_Gadget
EndIf
EndIf
Case #PB_Event_Gadget
If key_enter = 0
EventGadget = EventGadget()
EndIf
EventType = EventType()
key_enter = 0
Select EventGadget
Case Button1
;.........
Case Button2
;.........
Case Button3
;.........
Case #PB_Event_Menu
EventMenu = EventMenu()
key_enter = 0
...
...
Habe das jetzt so aufgebaut um doppelten Code zu vermeiden oder Proceduren einbauen zu müssen.
Wollte mal Fragen obs bessere Methoden gibt. Da ich ja quasi einen Schleifendurchlauf warte ...
Verfasst: 24.08.2007 15:24
von NicTheQuick
AddKeyboardShortcut()
Return zum Anzeigen eines Eintrags, Escape zum Beenden.
Code: Alles auswählen
If OpenWindow(0, 0, 0, 320, 240, "Keyboard-Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
ListViewGadget(0, 0, 0, 320, 240)
For a = 1 To 100
AddGadgetItem(0, a - 1, Str(a))
Next
AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
Select EventMenu()
Case 0 ;Return
If GetActiveGadget() = 0
a = GetGadgetState(0)
If a >= 0
MessageRequester("Info", GetGadgetItemText(0, a, 0))
SetActiveGadget(0)
EndIf
EndIf
Case 1 ;Escape
Break
EndSelect
EndSelect
ForEver
CloseWindow(0)
EndIf
EndIf
@Kiff, ts-soft, Kaeru Gaman: Schämt euch!

Verfasst: 24.08.2007 15:37
von ts-soft
>> @Kiff, ts-soft, Kaeru Gaman: Schämt euch!
Wenn jemand PureBasic als unvernünftige Sprache bezeichnet,
gibts keine andere Antwort, als meine obige

Ausserdem, da bereits hunderte (etwas weniger

)
Beispiele mit AddKeyboardShortcut gepostet wurden, gehe
ich also davon aus, diese Lösung ist nicht akzeptabel ist, weils in "vernünftigen"
Sprachen auch anders geht
Werde mich keinesfalls schämen!
Verfasst: 24.08.2007 16:07
von Schlingel
Wenn jemand PureBasic als unvernünftige Sprache bezeichnet
Problem ist nur das ich diese Sprache nicht als unvernüftig bezeichnet habe...
Ich habe nur gesagt: "In fast jeder (anderen) "vernünftigen" Sprache..."
Da steht weder das PB schlecht oder unvernünftig ist ...
Außerdem wer etwas mag der "meckert" darüber ...
--------------
Ausserdem, da bereits hunderte (etwas weniger Mr. Green )
Beispiele mit AddKeyboardShortcut gepostet wurden ..
Auch wenn ich fündig geworden bin poste ich trotzdem.. weil ich dann einen "eigenen" Theard habe indem ich alle Fragen über z.b. Keyboard reinschreiben kann. Dafür eröffne ich theards wirklich nur, wenn mein wissen nicht ausreicht im moment oder ich die anderen nicht verstehe (oder ich mal auf dem schlauch stehe)...
Außerdem steht es nicht umsonst in der Anfänger Ecke ... und ich bin einer der das relativ getrennt haben will also keine GadgetTastaturEvents in einem EventMenu... Das ist für mich wie Schnee und Feuer...
Aber trotzdem danke NicTheQuick nun weiß ich wie ...