ComboBoxGadget mit dynamischem Inhalt
ComboBoxGadget mit dynamischem Inhalt
Hi Leute,
ich hab hier n Problem, dass mich schon seit ein paar Stunden ärgert. Ich hab ne Applikation geschrieben, mit der man unter anderem verschiedenen Einstellungen für eine serielle Verbindung einstellen kann. Über ein ComboBoxGadget kann man die verschiedenen verfügbaren COM-Schnittstellen auswählen. Jedes mal wenn dieses Gadget aktiviert wird, soll der Inhalt neu generiert werden, um bei COM-Schnittstellenveränderungen nur noch die aktuellen COM-Ports anzuzeigen. Ist im Prinzip ja nicht sehr schwer, aber jedes mal wenn das ComboBoxGadget aktiviert wird und man eine Schnittstelle ausgewählt hat, bleibt dieser Eintrag blau hinterlegt. Das ComboBoxGadget besitzt also noch den aktiven Focus. Wenn ich jetzt eine Schnittstelle verbinden will, muss ich mit dem Cursor erst eine beliebige Stelle auf dem Bildschirm betätigen, damit das ComboBoxGadget nicht mehr blau hinterlegt ist und der aktuelle Eintrag übernommen werden kann. Ansonsten denkt der Event_Manager, dass noch kein Eintrag im ComboBoxGadget ausgewählt wurde. Kann mir einer von euch helfen? Vielleicht hab ich auch einfach nen Denkfehler! Danke schonmal!
MfG Martin
ich hab hier n Problem, dass mich schon seit ein paar Stunden ärgert. Ich hab ne Applikation geschrieben, mit der man unter anderem verschiedenen Einstellungen für eine serielle Verbindung einstellen kann. Über ein ComboBoxGadget kann man die verschiedenen verfügbaren COM-Schnittstellen auswählen. Jedes mal wenn dieses Gadget aktiviert wird, soll der Inhalt neu generiert werden, um bei COM-Schnittstellenveränderungen nur noch die aktuellen COM-Ports anzuzeigen. Ist im Prinzip ja nicht sehr schwer, aber jedes mal wenn das ComboBoxGadget aktiviert wird und man eine Schnittstelle ausgewählt hat, bleibt dieser Eintrag blau hinterlegt. Das ComboBoxGadget besitzt also noch den aktiven Focus. Wenn ich jetzt eine Schnittstelle verbinden will, muss ich mit dem Cursor erst eine beliebige Stelle auf dem Bildschirm betätigen, damit das ComboBoxGadget nicht mehr blau hinterlegt ist und der aktuelle Eintrag übernommen werden kann. Ansonsten denkt der Event_Manager, dass noch kein Eintrag im ComboBoxGadget ausgewählt wurde. Kann mir einer von euch helfen? Vielleicht hab ich auch einfach nen Denkfehler! Danke schonmal!
MfG Martin
Re: ComboBoxGadget mit dynamischem Inhalt
Kann ich nicht nachvollziehen. Kannst du mal Code posten?
Sobald ich einen Eintrag auswähle wird dieser übernommen.
Sobald ich einen Eintrag auswähle wird dieser übernommen.
Code: Alles auswählen
OpenWindow(0,0,0,200,100,"Combobox")
ComboBoxGadget(0,0,0,150,20)
AddGadgetItem(0,-1,"A")
AddGadgetItem(0,-1,"B")
AddGadgetItem(0,-1,"C")
SetGadgetState(0,0)
Repeat
Select WaitWindowEvent(20)
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget()=0
Debug GetGadgetText(0)
EndIf
EndSelect
ForEver
Re: ComboBoxGadget mit dynamischem Inhalt
Wie ermittelst du denn, ob bereits ein Eintrag ausgewählt wurde?
Code wäre ganz Praktisch.
Code wäre ganz Praktisch.

Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Re: ComboBoxGadget mit dynamischem Inhalt
Hi, hier mal ein Stück Code! Um diesen Code zu testen müsst ihr allerdings eine COM-Schnittstelle am Rechner haben. Sonst wäre die ComboBox leer. Wenn ihr ohne etwas zu verändern auf "Verbinden" drückt, dann wird ein neues Panalgadget "Missionsdaten" erzeugt (also verbunden). Wenn ihr dann aber auf die ComboBox "COM" drückt und eine COM-Schnittstelle auswählt, dann wird diese blau hinterlegt. Drückt ihr dann wieder auf "Verbinden", dann wird dummerweise der Inhalt der ComboBox gelöscht und es kann keine Verbindung aufgebaut werden. Das liegt daran, dass ich den Button "Verbinden" und die ComboBox "COM" toggle und jedes mal ein Flag setze oder lösche. Der Debugger zeigt an, dass beim ersten Klick auf die ComboBox "COM" das connect_flag = 0 ist. Beim auswählen eines Eintrages in der ComboBox wird dieses nochmal ausgegeben. Bleibt der Eintrag blau hinterlegt und man drückt nun "Verbinden", dann ist die ComboBox "COM" immer noch aktiv und gibt generiert nochmal connect_flag = 0. Das ist der Fehler! Nerv!!!
Edit by NicTheQuick: Code-Tags gesetzt
Code: Alles auswählen
;Window
Enumeration
#ID_Window_Main
#ID_Window_CMD
#ID_Window_Info
EndEnumeration
#Window_Width_Main = 200
#Window_Height_Main = 320
;Timer
#ID_Window_Timer = 0
;Menue
Enumeration
#ID_Menue
#ID_MenueItem_Close
EndEnumeration
;Gadget
Enumeration
#ID_PanelGadget
#ID_TextGadget_COM
#ID_ComboBoxGadget_COM
#ID_TextGadget_Baud
#ID_ComboBoxGadget_Baud
#ID_TextGadget_Data
#ID_ComboBoxGadget_Data
#ID_TextGadget_Parity
#ID_ComboBoxGadget_Parity
#ID_TextGadget_Stop
#ID_ComboBoxGadget_Stop
#ID_TextGadget_Handshake
#ID_ComboBoxGadget_Handshake
#ID_ButtonGadget_Connect
EndEnumeration
;COM Port Settings
#ID_COM = 0
#Baud = 115200
#Data = 8
#Stop = 1
#BufferInput = 1024
#BufferOutput = 1024
If OpenWindow(#ID_Window_Main,0,0,#Window_Width_Main,#Window_Height_Main,"Projekt",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
PanelGadget(#ID_PanelGadget,0,0,#Window_Width_Main, #Window_Height_Main)
AddGadgetItem (#ID_PanelGadget,-1,"Kommunikation")
TextGadget(#ID_TextGadget_Baud,19,62,50,20,"Baudrate:")
ComboBoxGadget(#ID_ComboBoxGadget_Baud,85,60,80,20)
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"1200")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"2400")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"4800")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"9600")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"19200")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"38400")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"57600")
AddGadgetItem(#ID_ComboBoxGadget_Baud,-1,"115200")
SetGadgetState(#ID_ComboBoxGadget_Baud,7)
TextGadget(#ID_TextGadget_Data,19,90,50,20,"Datenbits:")
ComboBoxGadget(#ID_ComboBoxGadget_Data,85,89,80,20)
AddGadgetItem(#ID_ComboBoxGadget_Data,-1,"5")
AddGadgetItem(#ID_ComboBoxGadget_Data,-1,"6")
AddGadgetItem(#ID_ComboBoxGadget_Data,-1,"7")
AddGadgetItem(#ID_ComboBoxGadget_Data,-1,"8")
SetGadgetState(#ID_ComboBoxGadget_Data,3)
TextGadget(#ID_TextGadget_Parity,19,118,50,20,"Parität:")
ComboBoxGadget(#ID_ComboBoxGadget_Parity,85,116,80,20)
AddGadgetItem(#ID_ComboBoxGadget_Parity,-1,"keine")
AddGadgetItem(#ID_ComboBoxGadget_Parity,-1,"gerade")
AddGadgetItem(#ID_ComboBoxGadget_Parity,-1,"ungerade")
SetGadgetState(#ID_ComboBoxGadget_Parity,0)
TextGadget(#ID_TextGadget_Stop,19,145,50,20,"Stoppbits:")
ComboBoxGadget(#ID_ComboBoxGadget_Stop,85,143,80,20)
AddGadgetItem(#ID_ComboBoxGadget_Stop,-1,"1")
AddGadgetItem(#ID_ComboBoxGadget_Stop,-1,"1.5")
AddGadgetItem(#ID_ComboBoxGadget_Stop,-1,"2")
SetGadgetState(#ID_ComboBoxGadget_Stop,0)
TextGadget(#ID_TextGadget_Handshake,19,172,60,20,"Handshake:")
ComboBoxGadget(#ID_ComboBoxGadget_Handshake,85,170,80,20)
AddGadgetItem(#ID_ComboBoxGadget_Handshake,-1,"kein")
AddGadgetItem(#ID_ComboBoxGadget_Handshake,-1,"RTS/CTS")
AddGadgetItem(#ID_ComboBoxGadget_Handshake,-1,"Xon/Xoff")
SetGadgetState(#ID_ComboBoxGadget_Handshake,0)
TextGadget(#ID_TextGadget_COM,19,35,50,20,"COM:")
ComboBoxGadget(#ID_ComboBoxGadget_COM,85,33,80,20)
For i=1 To 15
If OpenSerialPort(#ID_COM,"COM"+Str(i),Val(GetGadgetText(#ID_ComboBoxGadget_Baud)),Parity,Val(GetGadgetText(#ID_ComboBoxGadget_Data)),Val(GetGadgetText(#ID_ComboBoxGadget_Stop)),Handshake,#BufferInput,#BufferOutput)
AddGadgetItem(#ID_ComboBoxGadget_COM,-1,"COM"+Str(i))
CloseSerialPort(#ID_COM)
EndIf
Next
SetGadgetState(#ID_ComboBoxGadget_COM,0)
ButtonGadget(#ID_ButtonGadget_Connect,85,210,80,20,"Verbinden")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ID_ComboBoxGadget_COM
If Connect = 1
Debug "Connect = 1"
Result = MessageRequester("Info",GetGadgetText(#ID_ComboBoxGadget_COM)+" ist noch geöffnet! Soll die Verbindung getrennt werden?",#PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_Yes
CloseSerialPort(#ID_COM)
SetGadgetText(#ID_ButtonGadget_Connect,"Verbinden")
OpenGadgetList(#ID_PanelGadget)
RemoveGadgetItem(#ID_PanelGadget,1)
CloseGadgetList()
Connect = 0
EndIf
ElseIf Connect = 0
Debug "Connect = 0"
If ComboBox_COM = 0
ClearGadgetItems(#ID_ComboBoxGadget_COM)
For i=1 To 15
If OpenSerialPort(#ID_COM,"COM"+Str(i),Val(GetGadgetText(#ID_ComboBoxGadget_Baud)),Parity,Val(GetGadgetText(#ID_ComboBoxGadget_Data)),Val(GetGadgetText(#ID_ComboBoxGadget_Stop)),Handshake,#BufferInput,#BufferOutput)
AddGadgetItem(#ID_ComboBoxGadget_COM,-1,"COM"+Str(i))
CloseSerialPort(#ID_COM)
EndIf
Next
ComboBox_COM = 1
ElseIf ComboBox_COM = 1
ComboBox_COM = 0
EndIf
EndIf
Case #ID_ButtonGadget_Connect
If Connect = 0
Select GetGadgetText(#ID_ComboBoxGadget_Parity)
Case "keine"
Parity = #PB_SerialPort_NoParity
Case "gerade"
Parity = #PB_SerialPort_EvenParity
Case "ungerade"
Parity = #PB_SerialPort_OddParity
EndSelect
Select GetGadgetText(#ID_ComboBoxGadget_Handshake)
Case "kein"
Handshake = #PB_SerialPort_NoHandshake
Case "RTS/CTS"
Handshake = #PB_SerialPort_RtsCtsHandshake
Case "Xon/Xoff"
Handshake = #PB_SerialPort_XonXoffHandshake
EndSelect
If GetGadgetText(#ID_ComboBoxGadget_COM) <> ""
If OpenSerialPort(#ID_COM,GetGadgetText(#ID_ComboBoxGadget_COM),Val(GetGadgetText(#ID_ComboBoxGadget_Baud)),Parity,Val(GetGadgetText(#ID_ComboBoxGadget_Data)),Val(GetGadgetText(#ID_ComboBoxGadget_Stop)),Handshake,#BufferInput,#BufferOutput)
SetGadgetText(#ID_ButtonGadget_Connect,"Trennen")
Connect = 1
OpenGadgetList(#ID_PanelGadget)
AddGadgetItem (#ID_PanelGadget,-1,"Missionsdaten")
CloseGadgetList()
Else
MessageRequester("Info",GetGadgetText(#ID_ComboBoxGadget_COM)+" kann nicht geöffnet werden!")
EndIf
Else
MessageRequester("Info","Es wurde noch keine COM-Schnittstelle ausgewählt!")
EndIf
ElseIf Connect = 1
CloseSerialPort(#ID_COM)
SetGadgetText(#ID_ButtonGadget_Connect,"Verbinden")
Connect = 0
OpenGadgetList(#ID_PanelGadget)
RemoveGadgetItem(#ID_PanelGadget,1)
CloseGadgetList()
EndIf
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
End
Re: ComboBoxGadget mit dynamischem Inhalt
beim Drücken Deines 'Verbinden'-Buttons feuert die Combobox noch ein Event
(ich würde annehmen: LostFocus, oder so). Dadurch springst Du wieder in den
"Case #ID_ComboBoxGadget_COM"-Zweig und löscht den Combobox-Inhalt.
Meine Empfehlung: EventType() zusätzlich abfragen.
Grüße ... Kiffi
P.S.: Beim nächsten Mal bitte Code-Tags verwenden.
(ich würde annehmen: LostFocus, oder so). Dadurch springst Du wieder in den
"Case #ID_ComboBoxGadget_COM"-Zweig und löscht den Combobox-Inhalt.
Meine Empfehlung: EventType() zusätzlich abfragen.
Code: Alles auswählen
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ID_ComboBoxGadget_COM
If EventType()=#PB_EventType_LeftClick ; <-- z.B
If Connect = 1
Debug "Connect = 1"
[...]
P.S.: Beim nächsten Mal bitte Code-Tags verwenden.
a²+b²=mc²
Re: ComboBoxGadget mit dynamischem Inhalt
Hi Kiffi,
an EventType() --> Left_Klick hatte ich auch schon gedacht, dass Problem ist nur, dass ComboBox_Gadgets keine EventType() unterstützen!
Die folgenden Gadgets unterstützen EventType():
- ExplorerListGadget()
- ExplorerTreeGadget()
- ImageGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- SpinGadget()
- StringGadget()
- WebGadget() - Das WebGadget hat ein spezielles Set von Ereignis-Typen.
Also so leicht gehts dann leider doch nicht
PS: Code-Tag werd ich mir merken
Gruß Martin
an EventType() --> Left_Klick hatte ich auch schon gedacht, dass Problem ist nur, dass ComboBox_Gadgets keine EventType() unterstützen!
Die folgenden Gadgets unterstützen EventType():
- ExplorerListGadget()
- ExplorerTreeGadget()
- ImageGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- SpinGadget()
- StringGadget()
- WebGadget() - Das WebGadget hat ein spezielles Set von Ereignis-Typen.
Also so leicht gehts dann leider doch nicht

PS: Code-Tag werd ich mir merken

Gruß Martin
Re: ComboBoxGadget mit dynamischem Inhalt
nicht so schnell den Kopf hängen lassen:mart hat geschrieben:Also so leicht gehts dann leider doch nicht
Code: Alles auswählen
Case #ID_ComboBoxGadget_COM
Select EventType()
Case #CBN_SELCHANGE
Debug "Tadaa! :-)"
EndSelect
a²+b²=mc²
Re: ComboBoxGadget mit dynamischem Inhalt
PurBasic sagt dazu:
Konstante nicht gefunden: #CBN_SELCHANGE
Was soll das den für ein EventType() sein? PB-EventType()-Konstanten sehen doch immer so aus ...#PB_EventType_<Event>!
Gruß Martin
Konstante nicht gefunden: #CBN_SELCHANGE
Was soll das den für ein EventType() sein? PB-EventType()-Konstanten sehen doch immer so aus ...#PB_EventType_<Event>!
Gruß Martin
Re: ComboBoxGadget mit dynamischem Inhalt
mart hat geschrieben:PurBasic sagt dazu:
Konstante nicht gefunden: #CBN_SELCHANGE
Code: Alles auswählen
#CBN_SELCHANGE = 1
das steht für SELectionCHANGEmart hat geschrieben:Was soll das den für ein EventType() sein?
nicht zwangsläufig, es gibt noch wesentlich mehr Event-Typen, die allerdingsmart hat geschrieben:PB-EventType()-Konstanten sehen doch immer so aus ...#PB_EventType_<Event>!
noch nicht vom PB-Team in das PB_EventType_*-Schema übernommen wurden.
Grüße ... Kiffi
a²+b²=mc²
Re: ComboBoxGadget mit dynamischem Inhalt
Ich hab die Demoversion von PB --> v4.50(Windows - x86) Revision: 1253
Vielleicht liegts ja daran?
Danke nochmal für deine schnelle Hilfe!
Gruß Martin
Vielleicht liegts ja daran?
Danke nochmal für deine schnelle Hilfe!
Gruß Martin