ComboBoxGadget mit Eintrag

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

ComboBoxGadget mit Eintrag

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ComboBoxGadget mit Eintrag

Beitrag 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?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3902
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ComboBoxGadget mit Eintrag

Beitrag 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...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ComboBoxGadget mit Eintrag

Beitrag von Velindos »

Hallo Leute,
da hab ich zu viel mit Listicon gearbeitet!

Wieder was dazu gelernt, besten Dank!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ComboBoxGadget mit Eintrag

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ComboBoxGadget mit Eintrag

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: ComboBoxGadget mit Eintrag

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ComboBoxGadget mit Eintrag

Beitrag von RSBasic »

Danke hjbremer, jetzt weiß ich auch Bescheid, was Velindos haben wollte. Schade, dass ich seine Frage nicht sofort verstanden habe.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ComboBoxGadget mit Eintrag

Beitrag 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.. !
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten