Hier mal der Code, falls ihn jemand braucht.
XProfan bekommt man hier :
www.xprofan.com

evtl @Clicked() durch @getfocus() ersetzen.

Code:
Declare hD%, hB%, schalt%, statusbar%, OK%, hcombo%
Declare comport%, f%, adresse%, kommando%, Pruefsumme%
Declare chk1%, chk2%, chk3%, chk4%, chk5%, chk6%, chk7%, chk8%
Declare daten%, com$, send$

daten% = 1
adresse% = 1

Proc GetCheckboxStates
     If @GetCheck(chk1%)
        daten% = SetBit(daten%, 0, 1)
     Else
        daten% = SetBit(daten%, 0, 0)
     EndIf
     If @GetCheck(chk2%)
        daten% = SetBit(daten%, 1, 1)
     Else
        daten% = SetBit(daten%, 1, 0)
     EndIf
     If @GetCheck(chk3%)
        daten% = SetBit(daten%, 2, 1)
     Else
        daten% = SetBit(daten%, 2, 0)
     EndIf
     If @GetCheck(chk4%)
        daten% = SetBit(daten%, 3, 1)
     Else
        daten% = SetBit(daten%, 3, 0)
     EndIf
     If @GetCheck(chk5%)
        daten% = SetBit(daten%, 4, 1)
     Else
        daten% = SetBit(daten%, 4, 0)
     EndIf
     If @GetCheck(chk6%)
        daten% = SetBit(daten%, 5, 1)
     Else
        daten% = SetBit(daten%, 5, 0)
     EndIf
     If @GetCheck(chk7%)
        daten% = SetBit(daten%, 6, 1)
     Else
        daten% = SetBit(daten%, 6, 0)
     EndIf
     If @GetCheck(chk8%)
        daten% = SetBit(daten%, 7, 1)
     Else
        daten% = SetBit(daten%, 7, 0)
     EndIf
EndProc
 
Proc GetComInput
Parameters id%
Declare in$
in$ = @ReadCom$(f%,8) ' 8 Zeichen einlesen
Case @Len(in$):SetText statusbar%, "Antwort : " + Str$(ord(in$))
EndProc

Proc Senden
   ' 4 Byte - Rahmen zum Senden erstellen
   Pruefsumme% = XOR(XOR(kommando%, adresse%), daten%)
   send$ = Chr$(kommando%) + Chr$(adresse%) + Chr$(daten%) + Chr$(Pruefsumme%)
   WriteCom(f%, send$)
   ComError(f%)
   GetComInput(f%)
   Sleep 1000
EndProc

Proc Dialog
    'Dialogfenster erzeugen
    hD% =     @Create("Dialog",%DeskTop,"Relaisplatine 8fach seriell",100,100,600,400)
    'Einen Button mit 'ENDE' erzeugen
    hB% =     @Create("Button",hD%,"&ENDE",10,10,60,25)
    schalt% = @Create("Button", hD%, "&Schalten", 100, 10, 80, 25)
    
    chk1% =   @Create("CheckBox", hD%, "Relais 1", 350, 10, 100, 25)
    chk2% =   @Create("CheckBox", hD%, "Relais 2", 350, 40, 100, 25)
    chk3% =   @Create("CheckBox", hD%, "Relais 3", 350, 70, 100, 25)
    chk4% =   @Create("CheckBox", hD%, "Relais 4", 350,100, 100, 25)
    chk5% =   @Create("CheckBox", hD%, "Relais 5", 350,130, 100, 25)
    chk6% =   @Create("CheckBox", hD%, "Relais 6", 350,160, 100, 25)
    chk7% =   @Create("CheckBox", hD%, "Relais 7", 350,190, 100, 25)
    chk8% =   @Create("CheckBox", hD%, "Relais 8", 350,220, 100, 25)
    ' erste Checkbox setzen
    SetCheck chk1%, 1
    statusbar% = @Create("StatusWindow", hD%, "Ready !")
    
    Clear OK%  ' OK% auf 0 setzen
    WhileNot Ok%  ' solange OK% gleich 0 ist
      ' Hier in der Schleife warten wir mit WaitInput auf Benutzer - Eingaben
      ' Wir verwenden die in XProfan 10 neue Funktion @Clicked() statt @GetFocus()
      WaitInput
      If @Clicked(hB%) 
      'ENDE wurde angeklickt, OK% wird auf 1 gesetzt und somit
      ' die Schleife verlassen, das Fenster gelöscht und das Programm beendet.
        Ok% = 1
       ElseIf %Key = 2
         ' Hier wird das 'X' (rechts oben Schließen) ausgewertet
         OK% = 1
       ElseIf @Clicked(schalt%)
         ' Relais schalten.
         kommando% = 3
         adresse% = 1
         daten% = 0
         GetCheckboxStates   ' Checkboxen auswerten u. Bits setzen
         Senden
         '@MessageBox("Ich bin der Autor : " + Name$, "Info", 0)
      EndIf
    EndWhile
    'Dialogfenster (incl. Button, usw.) entfernen
    @DestroyWindow(hD%)
  EndProc

' Relaiskarte initialisieren
kommando% = 1
adresse% = 1
daten% = 0
f% = @OpenCom("COM1", 1024, 1024)
SetCom("COM1: 19200, N, 8, 1")
Senden

' Hier wird die Dialogbox (Procedur) aufgerufen
Dialog
' Programm Ende
CloseCom(f%)
End