Keyboard auf Gadget

Anfängerfragen zum Programmieren mit PureBasic.
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Keyboard auf Gadget

Beitrag 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]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Keyboard auf Gadget

Beitrag von Kiffi »

SuFu benutzen!

Hatten wir erst vor einer Woche: http://www.purebasic.fr/german/viewtopic.php?t=13867

Grüße ... Kiffi
a²+b²=mc²
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Beitrag 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 ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> In fast jeder "vernünftigen" Sprache
würde ich dann einfach nutzen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Beitrag 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 ...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

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