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!!!
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