Seite 1 von 1

Combobox Event

Verfasst: 01.06.2007 15:06
von double7
Hi,

gibt es ein Combobox Event mit dessen Hilfe
ich feststellen kann, ob der Benutzer ein neues Element
ausgewählt hat, wie zum Beispiel #PB_EventType_Change ?

ich dachte da an sowas:

Code: Alles auswählen

[...]
if EventGadget() = #Combobox AND EventType()=#PB_EventType_Change
[...]
Meine Suche im Forum hat leider nichts ergeben. :cry:

Verfasst: 01.06.2007 15:37
von ts-soft
Merkwürdigerweise EventType: #PB_EventType_RightClick :wink:

Verfasst: 01.06.2007 19:21
von al90
@double7

EventType() = #CBN_SELCHANGE :wink:

Verfasst: 04.06.2007 10:31
von double7
Ich danke euch, werde ich gleich mal beides testen. :D

Nachtrag:

hmm, scheint nicht zu funktionieren.
Das Comboboxgadget wird zwar erkannt, doch als Eventtype bekomme ich
nichts anderes als -1 zurück /:->
(pb 4.00 und pb 4.02)

ok, vielleicht bin ich die Fehlerquelle... Hier mal ein Codeauszug:

Code: Alles auswählen

[...]
Procedure comboB(type.l)
    
  If type=#CBN_SELCHANGE or #PB_EventType_RightClick
    MessageRequester("Debug","Neuer Eintrag Selektiert")
  EndIf  
  
EndProcedure


[...]
Repeat 
  
  Event     = WaitWindowEvent() 
  WindowID  = EventWindow() 
  GadgetID  = EventGadget() 
  EventType = EventType() 
   
  ; gadget events
  If Event = #PB_Event_Gadget AND GadgetID = #comboB
      comboB(EventType)
  EndIf 
  
Until Event = #PB_Event_CloseWindow
[...]

Verfasst: 04.06.2007 23:08
von al90
Musst du in etwa so machen.:

Code: Alles auswählen

Case #PB_Event_Gadget

  Select EventGadget()

    Case GadgetID.l

      If EventType()=#CBN_SELCHANGE
        ; Eintrag wurde geändert!
        ; Hier jetzt darauf reagieren.
      EndIf

Und nimm bitte das #PB_EventType_RightClick raus. Das brachst Du dafür nicht. :wink:

Verfasst: 04.06.2007 23:26
von ts-soft
al90 hat geschrieben: Und nimm bitte das #PB_EventType_RightClick raus. Das brachst Du dafür nicht. :wink:
Genau das benötigt er, wenn er auf API verzichten möchte!

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable)
  AddGadgetItem(0, -1, "ComboBox editable...")
  ComboBoxGadget(1, 10, 40, 250, 100)
  For a = 1 To 5 : AddGadgetItem(1, -1,"ComboBox item " + Str(a)) : Next a
  SetGadgetState(1, 2)    ; wir setzen (beginnend bei 0) den dritten Eintrag als aktiven

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0, 1
            If EventType() = #PB_EventType_RightClick
              Debug "Eintrag wurde geändert"
            EndIf
        EndSelect
    EndSelect
  ForEver
EndIf

Verfasst: 04.06.2007 23:34
von al90
ts-soft hat geschrieben:Genau das benötigt er, wenn er auf API verzichten möchte!
Davon hatte er aber nichts erwähnt. Und wenn's so wäre dann würde ich
lieber #True oder gleich 1 benutzen. #PB_EventType_RightClick
ist doch irgendwie unlogisch und verwirrt doch nur unnötig.

Verfasst: 04.06.2007 23:35
von Kaeru Gaman
es ist aber wohl eher unpraktisch, dort #PB_EventType_RightClick zu verwenden,
nur weil es unter windows zufällig den selben wert hat wie #CBN_SELCHANGE.

damit erreicht man genausowenig kompatibilität, als wenn man gleich die API-konstante benutzt.

Verfasst: 04.06.2007 23:47
von ts-soft
Kaeru hat geschrieben:damit erreicht man genausowenig kompatibilität, als wenn man gleich die API-konstante benutzt.
Meine Version funktioniert aber mit der Demo :mrgreen:

Verfasst: 06.06.2007 12:53
von double7
Wenn zwei sich streiten freut sich der Dritte. :mrgreen:

Danke vielmals, es läuft genau so, wie ich es mir gewünscht habe . :roll:

:allright: