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! :lol:

Verfasst: 24.08.2007 15:37
von ts-soft
>> @Kiff, ts-soft, Kaeru Gaman: Schämt euch! :lol:
Wenn jemand PureBasic als unvernünftige Sprache bezeichnet,
gibts keine andere Antwort, als meine obige :mrgreen:
Ausserdem, da bereits hunderte (etwas weniger :mrgreen: )
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 :twisted:

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 ...