Combo Gadget editable...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Combo Gadget editable...

Beitrag von jpd »

Hallo,

wenn ich ein Combo gadget editable habe und änderungen am text vornehme,
kann ich leider der neue text nicht auslesen ..
sondern nur der alte eintrag,

wie kann ich änderungen im combogadget direkt benutzen?

Grüße
jpd

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Combo_0
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 220, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ComboBoxGadget(#Combo_0, 90, 60, 180, 30, #PB_ComboBox_Editable)
    ButtonGadget(#Button_0, 70, 210, 60, 30, "zero")
  EndIf
EndProcedure

Open_Window_0()

 AddGadgetItem(#Combo_0, -1, "ComboBox editable...")
 SetGadgetState(#Combo_0, 0)    
Repeat 
  
  Event = WaitWindowEvent()   
  WindowID = EventWindow()   
  GadgetID = EventGadget()   
  EventType = EventType()   
    If Event = #PB_Event_Gadget
    
    If GadgetID = #Combo_0
     ; AddGadgetItem(#Combo_0, -1, "ComboBox editable...")
      
    ElseIf GadgetID = #Button_0
      Debug GetGadgetItemText(#Combo_0,0)
      
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow 
End
PB 5.10 Windows 7 x64
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 »

Mit

Code: Alles auswählen

GetGadgetText(#Combo_0)
Ohne API ist das ComboBoxGadget bisher sehr schlecht unterstüzt, gottsei-
dank nutze ich das kaum :mrgreen:

Hab Dein Beispiel mal so erweitert, das der Editierte Eintrag übernommen wird, sobald Return gedrückt wird:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Combo_0
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 220, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ComboBoxGadget(#Combo_0, 90, 60, 180, 30, #PB_ComboBox_Editable)
    ButtonGadget(#Button_0, 70, 210, 60, 30, "zero")
  EndIf
EndProcedure

Open_Window_0()

AddGadgetItem(#Combo_0, -1, "ComboBox editable...")
SetGadgetState(#Combo_0, 0)
Repeat

  Event     = WaitWindowEvent()
  WindowID  = EventWindow()
  GadgetID  = EventGadget()
  EventType = EventType()
  
  If Event = #PB_Event_Menu
    If EventMenu() = 1
      AddGadgetItem(#Combo_0, -1, GetGadgetText(#Combo_0))
    EndIf
    
  EndIf
  
  If Event = #PB_Event_Gadget

    If GetActiveGadget() = #Combo_0
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1)
    Else
      RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return)
    EndIf

    If GadgetID = #Combo_0
      
    ElseIf GadgetID = #Button_0
      Debug GetGadgetItemText(#Combo_0, 0)


    EndIf

  EndIf

Until Event = #PB_Event_CloseWindow
End
Ansonsten mußte API Ereignisse 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
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hallo ts-soft,

ne ist nicht so was ich mir vorstelle,

zum beispiel wenn ich in der combo box den text ändere und dann ohne weiteres auf den button drucke, dann würde ich gerne den text das gerade sichtbar ist auslesen...
dass ist nicht der fall.

Ich versuche es gleich mit eine combination Listview/StringGadget vielleicht ist das besser,
API verwenden möchte ich nicht, da es auch unter Linux funzionieren soll.


Vielen Dank

jpd
PB 5.10 Windows 7 x64
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 »

Vielleicht meinste es ja so:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Combo_0
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 220, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ComboBoxGadget(#Combo_0, 90, 60, 180, 30, #PB_ComboBox_Editable)
    ButtonGadget(#Button_0, 70, 210, 60, 30, "zero")
  EndIf
EndProcedure

Open_Window_0()

 AddGadgetItem(#Combo_0, -1, "ComboBox editable...")
 SetGadgetState(#Combo_0, 0)   
Repeat
 
  Event = WaitWindowEvent()   
  WindowID = EventWindow()   
  GadgetID = EventGadget()   
  EventType = EventType()   
    If Event = #PB_Event_Gadget
   
    If GadgetID = #Combo_0
     ; AddGadgetItem(#Combo_0, -1, "ComboBox editable...")
     
    ElseIf GadgetID = #Button_0
      SetGadgetItemText(#Combo_0, 0,  GetGadgetText(#Combo_0))
      Debug GetGadgetItemText(#Combo_0, 0)
     
     
    EndIf
   
  EndIf
 
Until Event = #PB_Event_CloseWindow
End
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
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Vielen Dank,

das hilft mir auf jeden fall weiter! :-)

Danke
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Probiere es mal so:

[Edit]
Oha, sorry ich hab da wohl was überlesen:
>>API verwenden möchte ich nicht, da es auch unter Linux funzionieren soll.

Naja, ich lass es trotzdem drin (theoretisch sollte eine Linux ComboBox doch auch verschiedene Eventtypes absenden, oder? Nur vermutlich nicht die selben. Vielleicht sollte man sich unter Linux einfach mal EventType während des Editierens debuggen lassen?)

Code: Alles auswählen

Enumeration
	#Window_0
EndEnumeration

Enumeration
	#Combo_0
	#Button_0
EndEnumeration


Procedure Open_Window_0()
	If OpenWindow(#Window_0, 220, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
		ComboBoxGadget(#Combo_0, 90, 60, 180, 22, #PB_ComboBox_Editable)
	EndIf
EndProcedure

Open_Window_0()

AddGadgetItem(#Combo_0, -1, "Item1")
AddGadgetItem(#Combo_0, -1, "Item2")
AddGadgetItem(#Combo_0, -1, "Item3")
SetGadgetState(#Combo_0, 0)
Repeat

	Event     = WaitWindowEvent()
	WindowID  = EventWindow()
	GadgetID  = EventGadget()
	EventType = EventType()
	If Event = #PB_Event_Gadget

		If GadgetID = #Combo_0
			If EventType = #CBN_EDITCHANGE
				SetGadgetItemText(#Combo_0, ActiveItem, GetGadgetText(#Combo_0))
			Else
				ActiveItem = GetGadgetState(#Combo_0)
				If ActiveItem = -1
					ActiveItem = 0
				EndIf
			EndIf

		EndIf

	EndIf

Until Event = #PB_Event_CloseWindow
End
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi HeXor,

Tips und Hilfe kann man immer gut gebrauchen :)
vielen Dank.

jpd
PB 5.10 Windows 7 x64
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

@jpd

Falls du doch mal die API benutzen möchtest:

#CBN_SELCHANGE

Benutze ich auch des öfteren. Allerdings habe ich es bisher noch nie für Editable Combos benutzt.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi al90,

und dir auch nen Dankeschön!

Ciao
jpd
PB 5.10 Windows 7 x64
Antworten