Seite 1 von 1

ComboBoxGadget mit Eintrag

Verfasst: 05.03.2018 19:10
von Velindos
Hallo Leute,
möchte im ComboBoxGadget einen Eintrag mit einer Kennung versehen!
"Autocomplete" verbunden mit "IK250_233". Den zweiten Eintrag
möchte ich ins Stringgaget laden wenn er gewählt wird!

Hab mal was versucht, funzt aber nicht!

Code: Alles auswählen

If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar) 
  If CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0, 10, 10, 200, 20, #PB_ComboBox_Editable) 
    AddGadgetItem(0, -1, "Autocomplete"+Chr(10)+"IK250_233") 
    AddGadgetItem(0, -1, "Bernard"+Chr(10)+"IK250_234") 
    AddGadgetItem(0, -1, "Car"+Chr(10)+"IK250_2333") 
    AddGadgetItem(0, -1, "Explorer"+Chr(10)+"IK250_243") 
    AddGadgetItem(0, -1, "Fantastic"+Chr(10)+"IK250_6733") 
    AddGadgetItem(0, -1, "General protection error"+Chr(10)+"IK250_3433") 
    AddGadgetItem(0, -1, "Purebasic"+Chr(10)+"IK250_1233") 
    AddGadgetItem(0, -1, "Purepower"+Chr(10)+"IK250_3433") 
    AddGadgetItem(0, -1, "Purevisual"+Chr(10)+"IK250_1233") 
    AddGadgetItem(0, -1, "Question"+Chr(10)+"IK250_12433") 
    AddGadgetItem(0, -1, "Zas"+Chr(10)+"IK250_12333") 
  EndIf 
  
  StringGadget(1, 10, 50, 200, 20,"")
EndIf 

Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget 
      If EventGadget() = 0 
        ;AutocompleteComboBox(0) 
      EndIf 
      
    Case 0
      GGADGET_Zeiger$   = (GetGadgetItemText(0,GetGadgetState(0),0))
      Debug GGADGET_Zeiger$
      ; Zweiter
      SetGadgetText(1,GetGadgetText(0))
  EndSelect 
Until Event = #PB_Event_CloseWindow 

End
Kann jemanden sagen ob das geht?

Gruss ... Velindos!

Re: ComboBoxGadget mit Eintrag

Verfasst: 05.03.2018 19:30
von ccode_new
Hallo Velindos,

meinst du so etwas:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar) 
  If CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0, 10, 10, 200, 20, #PB_ComboBox_Editable) 
    AddGadgetItem(0, -1, "Autocomplete"+Chr(10)+"IK250_233") 
    AddGadgetItem(0, -1, "Bernard"+Chr(10)+"IK250_234") 
    AddGadgetItem(0, -1, "Car"+Chr(10)+"IK250_2333") 
    AddGadgetItem(0, -1, "Explorer"+Chr(10)+"IK250_243") 
    AddGadgetItem(0, -1, "Fantastic"+Chr(10)+"IK250_6733") 
    AddGadgetItem(0, -1, "General protection error"+Chr(10)+"IK250_3433") 
    AddGadgetItem(0, -1, "Purebasic"+Chr(10)+"IK250_1233") 
    AddGadgetItem(0, -1, "Purepower"+Chr(10)+"IK250_3433") 
    AddGadgetItem(0, -1, "Purevisual"+Chr(10)+"IK250_1233") 
    AddGadgetItem(0, -1, "Question"+Chr(10)+"IK250_12433") 
    AddGadgetItem(0, -1, "Zas"+Chr(10)+"IK250_12333") 
  EndIf 
  
  StringGadget(1, 10, 50, 200, 20,"")
EndIf 

Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget 
      Select EventGadget()
        Case 0
          GGADGET_Zeiger$ = StringField(GetGadgetText(0),2,Chr(10))
          Debug GGADGET_Zeiger$
          ; Zweiter
          SetGadgetText(1,GGADGET_Zeiger$)
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow 

End
Oder habe ich dich falsch verstanden?

Re: ComboBoxGadget mit Eintrag

Verfasst: 05.03.2018 20:01
von mk-soft
Mir fallen gerade diverse Möglichkeiten ein.

Hier ist eine

Code: Alles auswählen

Global NewMap ComboData.s()

Procedure AddComboData(Gadget)
  Protected item.s, key.s, row.i
  Restore ComboData
  Repeat
    Read.s item
    Read.s key
    If item = ""
      Break
    EndIf
    AddGadgetItem(Gadget, -1, item)
    ComboData(LCase(item)) = key
  ForEver
  
EndProcedure

If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar) 
  If CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0, 10, 10, 200, 25, #PB_ComboBox_Editable) 
    AddComboData(0)
  EndIf 
  
  StringGadget(1, 10, 50, 200, 20,"")
EndIf 

Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget 
      Select EventGadget()
        Case 0
          Select EventType()
            Case #PB_EventType_Change
              If FindMapElement(ComboData(), LCase(GetGadgetText(0)))
                SetGadgetText(1, ComboData())
              Else
                SetGadgetText(1, "?")
              EndIf
          EndSelect
      EndSelect
      
  EndSelect 
Until Event = #PB_Event_CloseWindow 

End

DataSection
  combodata:
  Data.s "Autocomplete", "IK250_233" 
  Data.s "Bernard", "IK250_234" 
  Data.s "Car", "IK250_2333" 
  Data.s "Explorer", "IK250_243" 
  Data.s "Fantastic", "IK250_6733" 
  Data.s "General protection error", "IK250_3433" 
  Data.s "Purebasic", "IK250_1233" 
  Data.s "Purepower", "IK250_3433" 
  Data.s "Purevisual", "IK250_1233" 
  Data.s "Question", "IK250_12433" 
  Data.s "Zas", "IK250_12333" 
  Data.s "", ""
EndDataSection
P.S. Bei Mac werden die Zeichen nach #LF$ (Chr(10)) nicht angezeigt...

Re: ComboBoxGadget mit Eintrag

Verfasst: 06.03.2018 07:22
von Velindos
Hallo Leute,
da hab ich zu viel mit Listicon gearbeitet!

Wieder was dazu gelernt, besten Dank!

Gruss ... Velindos!

Re: ComboBoxGadget mit Eintrag

Verfasst: 08.03.2018 07:55
von Velindos
Hallo Leute,
wie kann man den Buttonpfeil nach LINKS geben?

Code: Alles auswählen

; ComboBoxGadget Pfeilbutton nach LINKS

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget Pfeilbutton nach LINKS", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(0, 10, 10, 250, 21, #PB_ComboBox_Editable)
  AddGadgetItem(0, -1, "ComboBox editable...")
  ; ?????? funzt aber nicht
  SendMessage_(GadgetID(0), #EM_SHOWSCROLLBAR, #SB_LEFT, #True)
  ; set of Line
  SetGadgetState(0, 0)
  ; Events
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Gruss ... Velindos!

Re: ComboBoxGadget mit Eintrag

Verfasst: 08.03.2018 10:19
von RSBasic
Wie meinst du genau? Kannst du einen Screenshot mit deinem Vorhaben posten, wie es am Ende aussehen soll?
Dass #EM_SHOWSCROLLBAR nicht funktioniert, liegt daran, dass diese Message nur für StringGadget und EditorGadget ist. Die Konstante beginnt mit #EM_, also EM > EditMessage > Editcontrol > StringGadget/EditorGadget.
Bei ComboBoxGadgets kannst du nur #CB_-Konstanten verwenden. Das bitte immer berücksichtigen. Sonst ist das nicht korrekt in der WinAPI.
Aber innerhalb des ComboBoxGadgets befindet sich ein EditControl als Kindelement, wenn #PB_ComboBox_Editable angegeben wird. Du kannst mit GetWindow_(GadgetID(0), #GW_CHILD) darauf zugreifen.

Re: ComboBoxGadget mit Eintrag

Verfasst: 08.03.2018 10:51
von hjbremer

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    ComboBoxGadget(2, 10, 70, 250, 21,#PB_ComboBox_Editable)
    
        
    style = GetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE) | #WS_EX_LAYOUTRTL
    
    SetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE, Style)
        
    
      For a = 1 To 55
        AddGadgetItem(2, -1,"ComboBox item " + Str(a))
      Next


    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
    
  EndIf

Re: ComboBoxGadget mit Eintrag

Verfasst: 08.03.2018 10:58
von RSBasic
Danke hjbremer, jetzt weiß ich auch Bescheid, was Velindos haben wollte. Schade, dass ich seine Frage nicht sofort verstanden habe.

Re: ComboBoxGadget mit Eintrag

Verfasst: 08.03.2018 11:10
von Velindos
Hallo Leute,
jetzt habe ich alles versäumt und wegen was?

Na, Klar hab Windows 10 wieder mal probiert und gleich mal die Updates über mich ergehen lassen!

So, DANKE hjbremer! Genau das war´s, somit kann ich links Klicken!

Das mit der Schreibweise muss ich noch verinnerlichen:
style = GetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE) | #WS_EX_LAYOUTRTL
SetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE, Style)
Da kann man auch mal ne Klammer weglassen, ganz was neueS!

Hab die Sache integriert, muss aber das Gadget Resizen weil es nicht die Form behält, egal.

Code: Alles auswählen

; COMBO Pfeil nach LINKS
If OpenWindow(0, 0, 0, 270, 180, "COMBO Pfeil nach LINKS", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ; COMBO 
  ComboBoxGadget(2, 10, 70, 250, 30,#PB_ComboBox_Editable)
  ; COMBO Pfeil nach LINKS
  style = GetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE) | #WS_EX_LAYOUTRTL 
  SetWindowLongPtr_(GadgetID(2), #GWL_EXSTYLE, Style)
  ; COMBO Data
  For a = 1 To 55
    AddGadgetItem(2, -1,"ComboBox item " + Str(a))
  Next
  ; COMBO Resize
  ResizeGadget(2, 10, 70, 250, 30)
  ; COMBO Color
  SetGadgetColor(2, #PB_Gadget_BackColor, $B3FAF8)
  SetGadgetColor(2, #PB_Gadget_FrontColor, $F91A1A)
  
  ;- RUN
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Nachtrag wäre noch warum die SetGadgetColor nicht ansprechen?

Gruss ... Velindos!


Nachtrag: Natürlich DANKE auch an RSBasic! Mach dir nichts daraus, mir geht es "Beim Sinn des Lebens" auch so, etc.. !