(Erledigt)Konstante nicht gefunden ???

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

(Erledigt)Konstante nicht gefunden ???

Beitrag von tft »

Hallo,

ich habe ein komisches Problem . Nachfolgender Code erzeugt einen Fehler. Ich habe aber einen Code wo es nicht passiert.

Code: Alles auswählen

Global Run.s
If #PB_Editor_CreateExecutable = 0
  Run = "Run at"+Chr(9)+"IDE"
Else
  Run = "Run at"+Chr(9)+"Executable "
EndIf
jemand eine Idee.

Gruss TFT

Und hier das Beispiel das Funktioniert. Der gesuchte Abschnitt befinden sich bei Zeile 122.

Code: Alles auswählen

; German forum:
; Author: TFT
; Date: 25 April 2014
; OS: Windows
; Demo: No

EnableExplicit

Define i,a.l,b.s,t$,timer

;{ Konstanten

#KEY_WOW64_64KEY = $100 ; GetWindowsProductKey()

#Return = 13
#MainWindow = 0
#Canvas = 1
#EventForce = 1

;}
;{ SetUp

Global Title.s="GUIreflect PC"
Global MakeArchivCopyFromSorce=1 
; 1 = Das Sorce File wird bei Start in das Archiv Verzeichnis Kopiert , mit Zeitstempel
; das Sorce File wird nicht archiviert wenn die Exe gestartet wird.

Global SaveAndClear = 0     ; 1 = Commt das Save Comanndo wird der Verlauf gelöscht 
Global TrackData    = 1     ; 1 = Daten die vom Arduino oder Handy kommen werden im Verlauf eingetragen
Global TrackCom     = 1     ; 1 = Es werden "/","./" und "%" comandos im Verlauf eingetragen
Global Save         = 0     ; 1 = Speichern Comando /save erlaubt
Global Clear        = 0     ; 1 = Löschen des Verlauf durch das Komannto /clear erlaubt
Global Echo         = 0     ; 1 = alle eingaben und Sonstige sendungen zum Arduino werden in Verluaf gespeichert

Global DebugLog     = 0     ; 1 = Debug Ausgabe grundsätzlich zulassen 
Global DebugLogSave = 0     ; 1 = Speichern des DebugLog zulassen
Global DebugLogMode = 0     ; 1 =  

Global SerDelay   =   10    ;  SendComandNotWait() wird erst nach X ms ferlassen.
                            ;  Somit können nur 100 mal 60 Zeichen in der Secunde versendet werden
                            ;  Damit der Arduino keinen Daten überlauf bekommt.
Global SerTimeOut = 2000    ;  TimeOut zeit biss ein Fehler bei Datenübertrageung über die Schnittstelle erkannt wird

Global DisplayX   = 540     ; Ziel Display
Global DisplayY   = 850     ; Ziel Display

Global EventTimer = 0       ;  Es wird eine Timer angelegt, der alle x Secunden ein Event auslöst ( Die Procedure Timer() wird dann aufgerufen
                            ;  Das ist um das anhalten des Programs bei verschieben des Fensters zu verhindern.

;}
;{ Spezielle Verzeichnisse

Global ProgName.s  =   ProgramFilename()

Procedure.s SpecialFolderLocation(csidl.l)
  Protected location.s,pidl.l
  If SHGetSpecialFolderLocation_(#Null,csidl,@pidl)=#ERROR_SUCCESS
    location.s=Space(#MAX_PATH)
    If SHGetPathFromIDList_(pidl,@location.s)
      If Right(location.s,1)<>""
        location.s+""
      EndIf
    EndIf
    If pidl
      CoTaskMemFree_(pidl) ; Instead of messing with com imalloc free and whatnot.
    EndIf
  EndIf
  ProcedureReturn Trim(location.s)
EndProcedure
Procedure.s getSpecialFolder(id)
  Protected path.s, *ItemId.ITEMIDLIST
  
  *itemId = #Null
  If SHGetSpecialFolderLocation_(0, id, @*ItemId) = #NOERROR
    path = Space(#MAX_PATH)
    If SHGetPathFromIDList_(*itemId, @path)
      If Right(path, 1) <> "\"
        path + "\"
      EndIf
      ProcedureReturn path
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure

Global prg.s =         getSpecialFolder(#CSIDL_PROGRAM_FILES)
Global app.s =         getSpecialFolder(#CSIDL_APPDATA)
Global fil.s =         getSpecialFolder(#CSIDL_PROGRAMS)
Global ipn.s =         "GUIreflectPC"
Global ipf.s =         app+ipn

If FileSize(ipf)=-1
  ipf   = GetCurrentDirectory()
Else
  ipf.s = app + ipn
EndIf
;}
;{ Debugger
;--------------------------------------------------------------------------------

; Umd den Debugger nutzen zu können benötigt man Admin rechte.
; Diese müssen bei Compiller einstellungen activiert werden.
; "[X] Request Administrator mode for Windows Vista and above".
; Auch bei Programmen wie einem Installer der auf geschütze
; Verzeichnisse zugreifen muss
; Bei Exutabels .exe sollte dies in der regel ausgeschaltet sein

; wenn LoadMovie() eine Video nicht laden kann, liegt das warscheinlich
; daran das kein entsprechender Windos Video Codec instaliert ist.

; Im Compiler Menue ist UNICODE deaktiviert

Global DebugLogPfad.s = ipf
Global DebugLogTemp = 1     ; für das temporäre ausschalten des DebugLog
Global DebugLogTab  = 0     ; Tabulator für die Debug Ausgabe
Global RunTest      = 0
Global DebugLogOpen = 0

Global Date.s =        FormatDate("%dd_%mm_%yyyy", #PB_Compiler_Date)
Global _Time.s =       FormatDate("%hh_%ii_%ss", #PB_Compiler_Date)
Global Version.s =     "Compile "+Chr(9)+Date+" "+_Time+" PureBasic "+#PB_Compiler_Version 
Global Run.s
If #PB_Editor_CreateExecutable = 0
  Run = "Run at"+Chr(9)+"IDE"
Else
  Run = "Run at"+Chr(9)+"Executable "
EndIf

Global pfad.s=         GetCurrentDirectory()
Global d_.s=           "Registriert"+Chr(9)+"Turgut Temucin, turguttemucin@hotmail.com"
Global StringA      = 0     ; In der Debugger ausgabe kann ein String Analysert werden 

Procedure.s VString(l)
  Protected i,t.s=""
  
  For i = 1 To l
    t=t+"| "+Chr(9)
  Next
  
  ProcedureReturn t.s
  
EndProcedure
Procedure DebugLog(t.s)
  
  Shared DebugLogPfad.s, ipn, Date, _Time
  Protected l.s = "Log.txt", fh.l,lenght.l,p.s
  Static first.b
  
  
  If first=0
    
    ; bein erstaufruf muss das Log File gelöscht werden
    DeleteFile(DebugLogPfad+l)
    
    ; Hir wird ein Backup File erzeugt, fals mal etwas garnicht gehen sollte. Das mann 
    ; einfach einen Früheren Code nehmen kann. Es setzt voraus das sich im Main FOlder
    ; eine Folder mit namen Archiv befindet.
    
    ; Die PureBasic IDE hat eine eigenen Histery verfolgung. 
    
    If #PB_Editor_CreateExecutable = 0
      
      If MakeArchivCopyFromSorce=1
        Debug "Copy"+Chr(9)+DebugLogPfad+ipn+".pb"
        Debug "to"+Chr(9)+ DebugLogPfad+"Archiv\"+ipn+"-"+Date+"_"+_Time+".pb"
        CopyFile(DebugLogPfad+ipn+".pb", DebugLogPfad+"Archiv\"+ipn+"-"+Date+"_"+_Time+".pb")
      EndIf
      
    EndIf
    
    If DebugLogMode = 0 ; 
      If DebugLog = 1
        DebugLogOpen = OpenFile(#PB_Any,DebugLogPfad+l)
      EndIf
    EndIf
    
  EndIf
  
  first=1
  
  ;If #PB_Compiler_Debugger = 1
  If DebugLog = 1
    If DebugLogTemp = 1
      
      If Left(t,1) = "{" 
        p = VString(DebugLogTab)+t
        Debug(p) 
        DebugLogTab =  DebugLogTab + 1 
      ElseIf Left(t,1) = "}" 
        If DebugLogTab >= 1
          DebugLogTab =  DebugLogTab - 1 
        EndIf
        p = VString(DebugLogTab)+t
        Debug(p) 
      Else
        p = VString(DebugLogTab)+t
        Debug(p) 
      EndIf
      
      If DebugLogMode = 0
        
        If DebugLogOpen
          WriteStringN(DebugLogOpen,p)
        EndIf
        
      Else
        
        ;Debug ">"
        ;Debug ">"+DebugLogPfad+l  
        If FileSize(DebugLogPfad+l)>0
          ;Debug ">Log file exist"
          fh = OpenFile(#PB_Any,DebugLogPfad+l)
          lenght = Lof(fh) 
          FileSeek(fh,lenght)
        Else
          ;Debug ">Create log file"
          fh = CreateFile(#PB_Any,DebugLogPfad+l)
        EndIf
        Delay(1)
        If fh
          ;Debug ">Write : "+t
          WriteStringN(fh,p)
          Delay(1)
          CloseFile(fh)  
        EndIf
        ;Debug ">"
      EndIf
    EndIf      
  EndIf
  ;EndIf
  
  
EndProcedure
Procedure StringAnalyse(s.s)
  Protected i,t1.s
  If StringA
    DebugLog("{ StringAnalyse ("+s+")")
    DebugLog(s.s)
    DebugLog("Leange in byte "+Len(s.s))
    For i = 1 To Len(s.s)
      t1.s = t1.s + RSet( Hex( Asc( Mid(s.s,i,1) ) ) ,2 ,"0") +" "  
    Next
    DebugLog(t1.s)
    DebugLog("}")
  EndIf
EndProcedure

Global param.s ,i1.l 
Dim par.s(10)
Global Ereigniss = CountProgramParameters()

If Ereigniss<>0
  For i1 = 1 To Ereigniss
    par(i1) = ProgramParameter()
    DebugLog("Fount parametert "+par(i1))
  Next
  
EndIf
Global param.s 

If FileSize(par(1))>0
  param=par(1)
EndIf

;}

Global GWPK.s
Global NoComand = 1

Procedure.s GetWindowsProductKey()
  Protected hKey, Res, size = 280
  Protected i, j, x, Result.s
  Protected *mem = AllocateMemory(size)
  Protected *newmem = AllocateMemory(size)
  Protected *digits = AllocateMemory(25)
  
  PokeS(*digits, "BCDFGHJKMPQRTVWXY2346789", -1, #PB_Ascii)
  If OSVersion() <= #PB_OS_Windows_2000
    Res = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ, @hKey)
  Else
    Res = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ | #KEY_WOW64_64KEY, @hKey)
  EndIf
  If Res = #ERROR_SUCCESS
    RegQueryValueEx_(hKey, "DigitalProductID", 0, 0, *mem, @size)
    RegCloseKey_(hKey)
    If size <> 280
      For i = 24 To 0 Step -1
        x = 0
        For j = 66 To 52 Step -1
          x = (x << 8) + PeekA(*mem + j)
          PokeA(*mem + j, x / 24)
          x % 24
        Next
        PokeA(*newmem + i, PeekA(*digits + x))
      Next
      For i = 0 To 15 Step 5
        Result + PeekS(*newmem + i, 5, #PB_Ascii) + "-"
      Next
      Result + PeekS(*newmem + 20, 5, #PB_Ascii)
    EndIf
  EndIf
  FreeMemory(*mem) : FreeMemory(*newmem) : FreeMemory(*digits)
  ProcedureReturn Result
EndProcedure

GWPK = GetWindowsProductKey()

i = DebugLog
DebugLog = 1
Debuglog("Run from "+Chr(9)+GetPathPart(ProgramFilename()))

DebugLog(Version)
DebugLog(Run)
DebugLog("Main pfad"+Chr(9)+pfad)
DebugLog("Parameter"+Chr(9)+param)
Debuglog("System"+Chr(9)+GWPK)
DebugLog(d_)

DebugLog = i

;--------------------------------------------------------------------------------

Global SpeicherPfad.s = ""
Global LastGuiTXT.s = ""

;Global SetUpTrackData
;Global SetUpTrackCom
;Global SetUpSaveAndClear
Global SetUpSave
Global SetUpClear
Global SetUpDebugLog
;Global Speed
Global Verbindung.l
Global Port
Global PortName.s
Global ComList
Global Comando.s
Global String.s
Global Eingabezeile
;Global Connect
;Global Senden
Global Console
Global Canvas
Global SendGui
Global SendLastGui
Global CallRequester
Global SetUpSavePfad
Global DateiName$ 

; GadGet Nummer
#Main_Speed     = 1
#Main_Senden    = 2
#Main_Connect   = 3
#Main_SetUpSaveAndClear = 4
#Main_SetUpTrackData = 5
#Main_SetUpTrackCom = 6
#Main_DisConnect = 7
#Menu_About     = 8
#About_Exit     = 800

;Global Timer.l

; Global Variablen

Define hWnd1
Define hFont

Define event
Global GUI = 0
Global Quit = 0

Global CanvasG
Global RGBz = RGB(255,255,255)
Global RGBh

Global PortOpen
Global ComPortOpen 
Global LastPing
Global ExitCode
Global *MemoryID = AllocateMemory(1024)

;{ Listen Verwaltung

Structure DrawListen
  ListenName.s
  *ErsterEintrag
EndStructure

Structure DrawComandos
  *NegsterEintrag
  *ForherigerEintrag
  DrawComando.s
EndStructure

Structure GadGetListen
  ListenName.s
  *ErsterEintrag
EndStructure

Structure GadGetComandos
  *NegsterEintrag
  *ForherigerEintrag
  GadGetComando.s
EndStructure

Global NewList DrawListen.DrawListen()
Global NewList DrawComandos.DrawComandos()
Global *ActuelleDrawListe
Global NewList GadGetListen.GadGetListen()
Global NewList GadGetComandos.GadGetComandos()
Global *ActuelleGadGetListe

;}

Declare Comandos(t$)
Declare SendComandNotWait(t$)
Declare PutStringToEditorGadget(t$)
Declare WaitCom(s.s)
Declare.d WindowEventSelect()

Procedure.s GetCom2()
  
  ; Die Funktions Weise ist Asynchron, FromAD ist erst <>"" wenn ein String ende erkannt wurde,
  ; oder ein Steuer String als erstes von der Schnittstell kommt.
  
  Protected thisChar.b, fromAD.s,i,i1
  Static AStringRead.b, AStringTimeOut, AStringPuffer$, AStringLastChar.b, AStringFirstChar.b
  Static BufferTimer
  
  DebugLog("{ GetCom2")
  
  If PortOpen=1
    i= AvailableSerialPortInput(0)
    If i > 0
      
      If i > 64 
        
        Debuglog("SerialPortInput > 64 Byte ")
        ;SendComandNotWait(".p-")
        
      EndIf
      
      If  AStringRead = 0
        Debuglog("Daten vorhanden "+Str(i))
        AStringTimeOut = ElapsedMilliseconds() + SerTimeOut
        AStringPuffer$ = ""
        
        AStringFirstChar = 0
        AStringLastChar = 0
        ComPortOpen = 1
      EndIf
      
      While i>0
        
        ReadSerialPortData(0, *MemoryID, 1)
        thisChar = PeekB(*MemoryID)
        AStringLastChar = thisChar
        If AStringFirstChar = 0
          AStringFirstChar = thisChar
        EndIf
        If thisChar > 31 ; ASCII Ab Space sind Daten
          AStringPuffer$ = AStringPuffer$ + Chr(thisChar)
          i=AvailableSerialPortInput(0)
        Else             ; alles darunter sind steuer Zeichen
          AStringRead = 2
          Debuglog("Steuerzeichen "+Str(thisChar))
          i=0
        EndIf
        
        ;Delay(1)
        ;WindowEventSelect()
        
      Wend
      
      If AStringRead = 0
        AStringRead = 1
      EndIf
      
      If AStringRead = 1
        If AStringTimeOut < ElapsedMilliseconds()
          MessageRequester("Error","String read timeout",#PB_MessageRequester_Ok )  
          AStringRead = 0
          fromAD.s="TimeOutError"
          Debuglog("Serial read timeout")
        EndIf
      EndIf
      If AStringRead = 2
        debuglog(AStringPuffer$)
        StringAnalyse(AStringPuffer$)
        fromAD.s = AStringPuffer$
        AStringPuffer$ = ""
        AStringRead = 0
        debuglog("String ende")
      EndIf
    EndIf
    
  EndIf
  
  DebugLog("}")
  
  ProcedureReturn fromAD.s
  
EndProcedure
Procedure GetCom3()
  Protected t$
  DebugLogTemp = 0
  t$ = GetCom2() ; Daten von der Com Schnitstelle holen ( Asynchron )
  If t$ <> ""
    DebugLogTemp = 1
    If DebugLog = 1
      PutStringToEditorGadget("GetCom3 ("+t$+")")
    Else
      PutStringToEditorGadget(t$)
    EndIf
    Comandos(t$)
    DebugLogTemp = 0
  EndIf
  DebugLogTemp = 1
EndProcedure
Procedure WaitCom(s.s)
  
  Protected exit,timer,timer1,t$,timer3
  
  ExitCode = 0
  LastPing = 0
  
  Debuglog("{ WaitCom ("+s+")")
  
  If s <> ""
    
    timer1=ElapsedMilliseconds()                                                  ; Einsprung Zeitpunkt
    
    If PortOpen=1                                                                 ; ist ein Port offen, bei ARDUINO meistens der COM3
      exit = 0 
      If s = ".."
        timer = ElapsedMilliseconds() +10000                                       ; Beim ersten Verbinden und senden braucht es gelegentlich länger
        timer3 =  ElapsedMilliseconds() +SerTimeOut                                ; Was zu einem Echo TimeOut füren kann
      Else
        timer = ElapsedMilliseconds() +SerTimeOut                                 ; Setzen des TimeOut damit die Schleife nich unendlich lange läuft.
      EndIf
      
      While exit=0                                                                ; Exit = 0, schleifer weiter ausfüren
        
        exit = AvailableSerialPortInput(0)                                        ; Liegen daten an dann ist Exit > 0
        If timer < ElapsedMilliseconds()                                          ; TimeOut erreicht
          PutStringToEditorGadget("WaitCom() Echo Timeout")                       ; Im Verlauf Posten
                                                                                  ;MessageRequester("Error","WaitCom() Echo Timeout",#PB_MessageRequester_Ok )  ; Requester ausgeben
          exit = -1                                                               ; Bei Feler ist Exit -1 und die Schleife wird verlassen
        Else
          If s = ".."
            If timer3 < ElapsedMilliseconds()
              timer3 =  ElapsedMilliseconds() +SerTimeOut
              WriteSerialPortString(0,s+Chr(13)+Chr(10),#PB_Ascii);+Chr(0))
              While AvailableSerialPortOutput(0):Wend
              ;Delay(SerDelay)   
              ;PutStringToEditorGadget(s)  
            EndIf
          EndIf
        EndIf
        If exit > 0                                                               ; Daten liegen an, mindestens 1 Byte
          t$ = GetCom2()                                                          ; Daten von der Com Schnitstelle holen ( Asynchron )
          If t$ <> ""                                                             ; Es konnte ein String gelesen werden
            If t$ <> s.s                                                          ; Echo ist nicht ok
              exit = 0                                                            ; Dann muss die Schleife weiter durchlaufen werden
            Else                                                                  ; ist das Echo erkannt
              exit = Len(t$)                                                      ; enthält der Exit Code die länge des gelesene Strings  
            EndIf
            If DebugLog = 1 
              PutStringToEditorGadget("WaitCom() ("+t$+")")                      ; Der Empfangene String wird im Verlauf gepostet
            Else
              PutStringToEditorGadget(t$)
            EndIf
            Comandos(t$)                                                         ; Der String wird auf ein Comando geprüft und gegebenen fals ausgeführt.
          EndIf
        EndIf
        ; Wenn Exit > -1 dann nochmal durchlaufen
        Delay(SerDelay)        ; Dem System zeit einreumen
        WindowEventSelect()
        
      Wend 
      
      LastPing = ElapsedMilliseconds()-timer1                                     ; Ermitteln wie lange die Antwort gebraucht hat
      Debuglog("Ping "+Str(LastPing)) 
    Else
      
      t$=s
      If DebugLog = 1 
        PutStringToEditorGadget("WaitCom() ("+t$+")")                      ; Der Empfangene String wird im Verlauf gepostet
      Else
        PutStringToEditorGadget(t$)
      EndIf
      Comandos(t$)                                                         ; Der String wird auf ein Comando geprüft und gegebenen fals ausgeführt.     
      exit = Len(t$)
      
      Delay(1)   
      WindowEventSelect()
      
    EndIf
  EndIf
  
  DebugLog("}")
  
  ; Exit Code = -1  Fehler
  ; Exit Code =  0  sollte niemals erscheinen
  ; Exit Code >  0  die länge des gelesenen Strings
  
  ProcedureReturn exit
  
EndProcedure

Procedure PutStringToEditorGadget(t$)
  Protected i, firstAscii, lastAscii 
  
  If t$<>"" ; wurde ein String oder mehr vom ComPort geholt
    
    DebugLog("{ PutString ("+t$+")")
    
    If TrackCom = 1 And (Left(t$,1)="/" Or Left(t$,1)="." Or Left(t$,1)="%")
      AddGadgetItem(Console, -1, t$ ); und in die GetGat liste eingetragen
    EndIf
    If TrackData = 1 And Left(t$,1)<>"/" And Left(t$,1)<>"." And Left(t$,1)<>"%"
      AddGadgetItem(Console, -1, t$ ); und in die GetGat liste eingetragen
    EndIf
    
    SendMessage_(GadgetID(Console),#EM_SCROLL,#SB_BOTTOM,0) ;                  !! Sorg dafür das das Editor Gadget automatisch nach unten Scrollt !!
    
    DebugLog("}")
    
  EndIf
  
EndProcedure
Procedure SendComandAndWait(t$)
  Protected i,i1
  
  Debuglog("{ SendAndWait ("+t$+")")
  
  If PortOpen = 1
    
    WriteSerialPortString(0,t$+Chr(13)+Chr(10),#PB_Ascii);+Chr(0))
    While AvailableSerialPortOutput(0):Wend
    If Echo
      PutStringToEditorGadget(">"+t$)
    EndIf
  
  EndIf
  
  Delay(SerDelay) 
  i = WaitCom(t$)
  Debuglog("ExitCode WaitCom() "+Str(i))
  
  If t$="TimeOutError" 
    DebugLog("TimeOutError" )
    ProcedureReturn -1
  EndIf
  
  DebugLog("}")
  
  ProcedureReturn 0
EndProcedure
Procedure SendComandNotWait(t$)
  If PortOpen = 1
    
    WriteSerialPortString(0,t$+Chr(13)+Chr(10),#PB_Ascii);+Chr(0))
    While AvailableSerialPortOutput(0):Wend
    
    Delay(SerDelay)
    
  EndIf 
EndProcedure
Procedure Comandos(t$)
  
  Protected tr$,tg$,tb$,t1$,i,i1,i2,r,g,b,x1,x2,y1,y2,d,*element,dd.d
  Static dr,dg
  
  DebugLog("{ Comando ("+t$+")") 
  
  StringAnalyse(t$)
  
  tr$ = RTrim(t$,Chr(10))
  t$ = RTrim(tr$,Chr(13))
  ;StringAnalyse(t$)
  
  
  If Left(t$,1)="/" And NoComand = 0
    
    If t$ = "/end"
      Quit=1
      Debuglog("/end")
      
    ElseIf t$ = "/clear"
      If Clear
        SendMessage_(GadgetID(Console) ,#EM_EMPTYUNDOBUFFER, 0, 0) 
        ClearGadgetItems(Console)
        Debuglog("/clear")
      EndIf
    ElseIf t$ = "/CreateCanvas()"
      GUI = 1
      OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
      Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)
      Debuglog("/CreateCanvas()")
      
    ElseIf t$ = "/StartDraw()"
      ;Delay(1)
      dr = 1
      *ActuelleDrawListe = AddElement(DrawListen())
      Debuglog("/StartDraw("+ ListSize(DrawListen())+")")
      
    ElseIf t$ = "/StoptDraw()"
      Debug("/StoptDraw()")
      dr = 0 
      
    ElseIf t$ = "/StartGatGed()"
      ;Delay(1)
      dg = 1
      *ActuelleGadGetListe = AddElement(GadGetListen())
      Debuglog("/StartGadGet("+ ListSize(GadGetListen())+")")
      
    ElseIf t$ = "/StoptGadGet()"
      Debug("/StoptGadGet()")
      dg = 0  
      
    ElseIf Left(t$,14) = "/SaveDrawList("
      Debuglog("/SaveDrawList("+")")
      dr = 0
      i = 0
      i = FindString(t$,"(",i)
      i1= FindString(t$,")",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      
      DrawListen()\ListenName = tr$
      ;DrawListen()\ErsterEintrag = 
      
      ;{ /SaveGatGedList(i,name)   
    ElseIf Left(t$,16) = "/SaveGatGedList("
      Debuglog("/SaveGatGedList("+")")
      dr = 0
      i = 0
      i = FindString(t$,"(",i)
      i1= FindString(t$,")",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      
      GadGetListen()\ListenName = tr$
      ;DrawListen()\ErsterEintrag =      
      ;}
      ;{ /ClearDraw()
      
      
    ElseIf t$ = "/ClearDraw()"
      
      
      Debuglog("/ClearDraw()")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf
      
      
      StartDrawing(CanvasOutput(Canvas))
      
      DrawingMode(#PB_2DDrawing_Default  )
      FrontColor(RGBz)       
      Box(0,0,DisplayX,DisplayY)
      
      StopDrawing()
      
      ;}     
      ;{ /SetRGB(r,g,b)
      
    ElseIf Left(t$,8) = "/SetRGB(" 
      
      Debuglog("/SetRGB(")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf     
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      r = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      g = Val(tg$)
      
      i = i1
      i1= FindString(t$,")",i+1)
      tb$ = Mid(t$,i+1,i1-i-1)
      b = Val(tb$)
      
      
      RGBz=RGB(r,g,b)
      
      ;Debug("Farbe gefunden r "+tr$+" "+r)
      ;Debug("Farbe gefunden g "+tg$+" "+g)
      ;Debug("Farbe gefunden b "+tb$+" "+b)
      ;}     
      ;{ /Line(x1,y1,x2,y2,d)
      
      
    ElseIf Left(t$,6) = "/Line("
      
      Debuglog("/Line(")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf
      
      StartDrawing(CanvasOutput(Canvas))
      
      FrontColor(RGBz)
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x1 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y1 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      x2 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y2 = Val(tg$)
      
      i = i1
      i1= FindString(t$,")",i+1)
      tb$ = Mid(t$,i+1,i1-i-1)
      d = Val(tb$)   
      
      LineXY(x1,y1,x2,y2)
      
      StopDrawing()
      ;}     
      ;{ /BoxF(x1,y1,b,h)
      
      
    ElseIf Left(t$,6) = "/BoxF(" 
      
      Debuglog("/BoxF(")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf
      
      StartDrawing(CanvasOutput(Canvas))
      
      FrontColor(RGBz)
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x1 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y1 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      x2 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,")",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y2 = Val(tg$)
      
      
      DrawingMode(#PB_2DDrawing_Default  )
      FrontColor(RGBz)       
      
      ; Anpassung ... b und h gibt es nicht bei Android 
      Box(x1,y1,x2-x1,y2-y1)
      Debuglog(Str(x1)+"_"+Str(y1)+"_"+Str(x2)+"_"+Str(y2))
      StopDrawing()
      ;}     
      ;{ /Box(x,y,b,h)
      
    ElseIf Left(t$,5) = "/Box("
      
      Debuglog("/Box(")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf
      
      StartDrawing(CanvasOutput(Canvas))
      
      FrontColor(RGBz)
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x1 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y1 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      x2 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,")",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y2 = Val(tg$)
      
      DrawingMode(#PB_2DDrawing_Outlined )
      
      ; Anpassung ... b und h gibt es nicht bei Android
      Box(x1,y1,x2-x1,y2-y1)
      DrawingMode(#PB_2DDrawing_Default  )
      
      StopDrawing()
      ;}      
      ;{ /Text(x,y,name,d)  
      
    ElseIf Left(t$,6) = "/Text("
      
      Debuglog("/Text(")
      
      If dr = 1
        *element = AddElement(DrawComandos())
        If *element
          DrawComandos()\DrawComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)        
      EndIf
      
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x1 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      y1 = Val(tg$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      
      i = i1
      i1= FindString(t$,")",i+1)
      tb$ = Mid(t$,i+1,i1-i-1)
      d = Val(tb$)
      
      LoadFont(2, "Arial", d )
      
      If StartVectorDrawing(CanvasVectorOutput(Canvas))
        
        If d>0 
          VectorFont(FontID(2), d)
          dd.d = VectorTextHeight(tg$, #PB_VectorText_Baseline)
          
          VectorSourceColor(RGBA(255, 255, 255,255))
          
          MovePathCursor(x1, y1-dd)
          DrawVectorText(tg$)
        Else
          DebugLog("VectorFont Parameter d < 1")
        EndIf
        StopVectorDrawing()
        
      EndIf
      
      FreeFont(2)
      ;}    
      ;{ /Flip()     
      
    ElseIf Left(t$,7) = "/Flip()" 
      
      DebugLog("/Flip()")
      
      ; !! diesen Befehl wird es so nicht brauchen da ein Canvas sovort nach 
      ; StopDraw() Actualisiert wird !!
      
      If CanvasG = 1
        CloseGadgetList()
        CanvasG = 0
      EndIf
      
      ;}     
      ;{ /CreateButton(i,x1,y1,x2,y2,name)  
      
    ElseIf Left(t$,14) = "/CreateButton(" 
      
      
      Debuglog("/CreateButton(")
      
      If dg = 1
        *element = AddElement(GadGetComandos())
        If *element
          GadGetComandos()\GadGetComando.s = t$  
        EndIf
      EndIf
      
      If GUI = 0 And Canvas = 0
        OpenWindow(#Canvas,0,0,DisplayX+3,DisplayY+10,"GUIreflect")
        Canvas = CanvasGadget(#PB_Any,1,1,DisplayX,DisplayY, #PB_Canvas_ClipMouse|#PB_Canvas_Container)  
      EndIf
      
      CanvasG = 1
      
      i = 1
      
      i = FindString(t$,"(",i)
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      i2 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tg$ = Mid(t$,i+1,i1-i-1)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x1 = Val(tr$)
      
      i = i1
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      y1 = Val(tr$) 
      
      i = i1
      i1= FindString(t$,",",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      y2 = Val(tr$)
      
      i = i1
      i1= FindString(t$,")",i+1)
      tr$ = Mid(t$,i+1,i1-i-1)
      x2 = Val(tr$)
      
      ButtonGadget(100+i2, x1, y1, x2, y2, tg$)
      
      ;}     
      ;{ /SetButtonText(i,name)     
      
    ElseIf Left(t$,15) = "/SetButtonText("
      
      If GUI = 1 And Canvas <> 0
        
        i = 1
        
        i = FindString(t$,"(",i)
        i1= FindString(t$,",",i+1)
        tr$ = Mid(t$,i+1,i1-i-1)
        i2 = Val(tr$)
        
        i = i1
        i1= FindString(t$,")",i+1)
        tr$ = Mid(t$,i+1,i1-i-1)
        
        DebugLog("Modify Botton Text") 
        SetGadgetText(100+i2,tr$)
        
      EndIf
      
      ;}
      ;{ /SetButtonFont(i,d)
      
      
    ElseIf Left(t$,15) = "/SetButtonFont("
      
      
      ;If GUI = 1 And Canvas <> 0
        
      ;  i = 1
        
      ;  i = FindString(t$,"(",i)
      ;  i1= FindString(t$,",",i+1)
      ;  tr$ = Mid(t$,i+1,i1-i-1)
      ;  i2 = Val(tr$)
        
      ;  i = i1
      ;  i1= FindString(t$,")",i+1)
      ;  tr$ = Mid(t$,i+1,i1-i-1)
        
      ;  DebugLog("Modify Botton Text") 
      ;  SetGadgetText(100+i2,tr$)
        
      ;EndIf
      
      ;}    
      ;{ /save()
      
    ElseIf t$ = "/save"
      
      If Save = 1
        
        SendComandAndWait(".p-")
        
        If SpeicherPfad=""
          
          SpeicherPfad=PathRequester("Bitte wählen Sie einen Pfad aus", "")
          If SpeicherPfad<>""
            
          EndIf
          
          
          
        EndIf  
        
        t1$=SpeicherPfad+"GUIreflect-Log_"+FormatDate("%dd-%mm-%yyyy_%hh-%ii-%ss",Date()) +".log"
        
        If OpenFile(0,t1$)
          
          i = CountGadgetItems(Console)
          
          For i1 = 1 To i
            WriteString(0, GetGadgetItemText(Console,i) ,#PB_Ascii  )
          Next
          
          CloseFile(0)
          
          If SaveAndClear = 1
            
            SendMessage_(GadgetID(Console) ,#EM_EMPTYUNDOBUFFER, 0, 0) 
            ClearGadgetItems(Console)
            Debuglog("/clear")
            
          EndIf
        Else
          
          Debuglog("Konnt file nicht speichern")
          DebugLog(t1$)
          MessageRequester("Error","File cant write"+Chr(10)+t1$,#PB_MessageRequester_Ok ) 
          
        EndIf
        SendComandAndWait(".p+")
      EndIf
      
      ;}  
      ;{ /C Comandos PC only
      
    ElseIf t$ = "/CTD0"
      TrackData = 0
      SetGadgetState(#Main_SetUpTrackData,TrackData ) 
    ElseIf t$ = "/CTD1"
      TrackData = 1
      SetGadgetState(#Main_SetUpTrackData,TrackData )
    ElseIf t$ = "/CTC0"
      TrackCom = 0
      SetGadgetState(#Main_SetUpTrackCom,TrackCom )  
    ElseIf t$ = "/CTC1"
      TrackCom = 1
      SetGadgetState(#Main_SetUpTrackCom,TrackCom )  
    ElseIf t$ = "/CSC0"
      SaveAndClear = 0
      SetGadgetState(SetUpSave,SaveAndClear )  
    ElseIf t$ = "/CSC1"
      SaveAndClear = 1
      SetGadgetState(SetUpSave,SaveAndClear )  
    ElseIf t$ = "/CS0"
      Save = 0
      SetGadgetState(SetUpSave,Save ) 
    ElseIf t$ = "/CS1"
      Save = 1
      SetGadgetState(SetUpSave,Save )  
    ElseIf t$ = "/CC0"
      Clear = 0
      SetGadgetState(SetUpClear,Clear ) 
    ElseIf t$ = "/CC1"
      Clear = 1
      SetGadgetState(SetUpClear,Clear ) 
    ElseIf t$ = "/CD0"
      DebugLog = 0
      SetGadgetState(SetUpDebugLog,DebugLog ) 
    ElseIf t$ = "/CD1"
      DebugLog = 1
      SetGadgetState(SetUpDebugLog,DebugLog )            
      ;}  
      
    Else
      DebugLog("Ungültiger Befehl : "+t$)
    EndIf
    
  Else
    
    ;{ .term / alle Gui elemente schliessen und löschen
    If t$ = ".term"
      debugLog(".term")
      If GUI = 1 Or Canvas <> 0
        GUI = 0 
        CloseWindow(#Canvas)
        Canvas = 0
      EndIf
      ClearList(DrawListen())
      ClearList(DrawComandos())
      ClearList(GadGetListen())
      ClearList(GadGetComandos())
    EndIf 
    ;}
    ;{ AT / sendet OK zurück 
    If t$ = "CALL"
      debugLog("CALL from Arduino")
      SendComandNotWait("OK")
      PutStringToEditorGadget(">ARDUINO send call")
    EndIf
    ;}
    ;{ .gui
    If t$ = ".gui"
      
    EndIf
    ;}
    
  EndIf
  
  ;{ Debug Ausgabe der Draw und GadGet Listen
  
  Debuglog("DrawListen("+ ListSize(DrawListen())+")")
  i = 0
  ForEach DrawListen()
    Debuglog(DrawListen()\ListenName)
    i = i + 1
  Next
  If i=0
    Debuglog("DrawListen() emty")
  EndIf
  
  Debuglog("DrawComandos("+ ListSize(DrawComandos())+")")
  i = 0
  ForEach DrawComandos()
    Debuglog(DrawComandos()\DrawComando.s)
    i = i + 1
  Next
  If i=0
    DebugLog("DrawComandos() emty")
  EndIf
  
  Debuglog("GadGetListen("+ ListSize(GadGetListen())+")")
  i = 0
  ForEach GadGetListen()
    Debuglog(GadGetListen()\ListenName)
    i = i + 1
  Next
  If i=0
    Debuglog("GadGetListen() emty")
  EndIf
  
  Debuglog("GadGetComandos("+ ListSize(GadGetComandos())+")")
  i = 0
  ForEach GadGetComandos()
    Debuglog(GadGetComandos()\GadGetComando.s)
    i = i + 1
  Next
  If i=0
    DebugLog("GadGetComandos() emty")
  EndIf
  
  ;}
  
  Debuglog("}")
  
EndProcedure
Procedure ReadGUI(datei.s)
  
  Protected Timer , String.s
  Debuglog("{ ReadGui")
  
  SendComandAndWait(".p-")
  SendComandAndWait(".term")
  
  If Right(Datei,4) = ".txt"
    If ReadFile(0,Datei)
      
      If OpenFile(1,Left(Datei,Len(Datei)-4)+".gui") ; Erzeugt eine .gui datei um diese in der Arduino IDE hinzuzufügen
        
        
        
        Debuglog("{ Read ("+Datei+")")
        
        While Not Eof(0)
          timer = ElapsedMilliseconds()+SerTimeOut
          String.s = ReadString(0)
          Debuglog("Read "+String.s)
          SendComandAndWait(String.s)               
          If timer < ElapsedMilliseconds()
            MessageRequester("Error","File read timer overload",#PB_MessageRequester_Ok ) 
            Break
          EndIf
          
          String.s = "s = F("+Chr(34)+String.s+Chr(34)+") ; SPln() ;" ; Erzeugt AUs einer .txt Zeile eine .gui Zeile für die Arduino IDE 
          WriteStringN(1,String.s)
          
          ;If #PB_Compiler_Debugger = 1
          If DebugLog = 1
            If DebugLogTemp = 1
              timer = ElapsedMilliseconds()+SerTimeOut
            EndIf
          EndIf
          ;EndIf                 
          
          Delay(1)
          WindowEventSelect()
          
          
        Wend
        CloseFile(0)
        LastGuiTXT.s = Datei
        DisableGadget(SendLastGui, 0)
        
        CloseFile(1)
        
        DebugLog("}")
      Else
        MessageRequester("Error","Cant create file",#PB_MessageRequester_Ok ) 
      EndIf
      
    Else
      MessageRequester("Error","Cant read file",#PB_MessageRequester_Ok ) 
    EndIf
  EndIf
  SendComandAndWait(".p+")
  
  Debuglog("}") 
  
EndProcedure
Procedure.d WindowEventSelect()
  
  Protected event, timer,hWnd
  
  event = WindowEvent() 
  
  While event>0
    Select event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case  #About_Exit
            CloseWindow(#Menu_About)
          Case Eingabezeile
            
          Case #Main_Speed
            
            Verbindung.l = Val(GetGadgetText(#Main_Speed)) 
            
          Case Port
            
            PortName.s = GetGadgetText(Port)
            
          Case ComList
            
            Comando.s = GetGadgetText(ComList)
            ;SetGadgetText(Eingabezeile,Camando.s)
            SendComandAndWait(Comando.s)
            ;SetGadgetText(Eingabezeile,"") 
            
          Case #Main_Senden
            
            DebugLog("{ Senden")
            
            String.s = GetGadgetText(Eingabezeile)
            Debuglog(String.s)
            If String.s <> ""
              SendComandAndWait(String.s)
              SetGadgetText(Eingabezeile,"") 
            EndIf
            
            DebugLog("}")
            
            ;{ SendGUI
            
          Case SendGui    
            
            DebugLog("{ SendGui")
            
            DateiName$ = OpenFileRequester("Load GUI datei", "GUI.gui", "Gui datei | *.gui | TextDoc | *.txt",1 )
            
            ReadGui(DateiName$) 
            
            DebugLog("}")
            
            ;}
            ;{ SendLastGUI         
          Case SendLastGui
            
            DebugLog("{ SendLastGui")
            
            If LastGuiTXT.s <> ""
              
              SendComandAndWait(".p-")
              SendComandAndWait(".term")
              ReadGui(LastGuiTXT.s)
              SendComandAndWait(".p+")
              
            EndIf
            
            DebugLog("}")
            
            ;}
            ;{ Connect
            
          Case #Main_Connect
            
            DebugLog("{ Connect")
            
            If PortOpen=1
              CloseSerialPort(0)
              PortOpen = 0
              PutStringToEditorGadget(">DisConnect")
              Delay(100)
            EndIf
            
            timer = ElapsedMilliseconds()
            DebugLog("Open ComPort "+PortName.s)
            If OpenSerialPort(0, PortName.s, Verbindung.l, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
              
              DebugLog("OpenPortTime "+Str(ElapsedMilliseconds()-timer))
              
              PortOpen = 1
              PutStringToEditorGadget(">Open Port "+PortName.s+" connect with "+Str(Verbindung.l)+" speed")
              ;AddGadgetItem(Console, -1, "Open Port "+PortName.s+" connect with "+Str(Verbindung.l)+" speed" )
              Delay(1000)
              
              If SendComandAndWait("..") = -1
                DebugLog("ExitCode SendComandAndWait -1")
                PortOpen=0
                CloseSerialPort(0)
                Delay(100)
              EndIf
              
              
            Else
              
              PutStringToEditorGadget(">Cant open port "+PortName.s)
              
            EndIf
            
            DebugLog("}")
            
            ;}
            ;{ DisConnect
            
          Case #Main_DisConnect
            
            DebugLog("{ DisConnect")
            
            If PortOpen=1
              CloseSerialPort(0)
              PortOpen = 0
              PutStringToEditorGadget(">DisConnect")
              Delay(100)
            EndIf
            
            ;}
            ;{ Canvas
          Case Canvas
            ;}
            ;{ SetUpSaveAndClear
          Case #Main_SetUpSaveAndClear
            
            SaveAndClear=GetGadgetState(#Main_SetUpSaveAndClear)
            Debuglog("SaveAndClear = "+Str(SaveAndClear))
            
            ;}
            ;{ SetUpTrackData
            
          Case #Main_SetUpTrackData
            
            TrackData=GetGadgetState(#Main_SetUpTrackData)          
            Debuglog("TrackData ="+Str(TrackData))
            
            ;}
            ;{ SetUpTrackCom
            
          Case #Main_SetUpTrackCom
            
            TrackCom=GetGadgetState(#Main_SetUpTrackCom)          
            Debuglog("TrackCom ="+Str(TrackCom))         
            
            ;}
            ;{ SetUpSave
          Case SetUpSave
            
            Save=GetGadgetState(SetUpSave)
            Debuglog("Save ="+Str(Save))
            ;}
            ;{ SetUpClear
          Case SetUpClear
            
            Clear=GetGadgetState(SetUpClear)
            Debuglog("Clear ="+Str(Clear))
            
            ;}
            ;{ SetUpDebugLog
          Case SetUpDebugLog
            
            DebugLog=GetGadgetState(SetUpDebugLog)
            Debuglog("DebugLog ="+Str(DebugLog))         
            
            ;}
            ;{ CallRequester / Call Save Pfad Requester 
          Case CallRequester
            
            DateiName$=PathRequester("Bitte wählen Sie einen Pfad aus", "")
            If  DateiName$ <> ""
              SpeicherPfad=DateiName$
              SetGadgetText(SetUpSavePfad,SpeicherPfad) 
            EndIf
            
            ;}
            
        EndSelect
        
        ;{ Statatur Eingabe  #WM_KEYDOWN
        
      Case #WM_KEYDOWN 
        DebugLog("{ #WM_KEYDOWN")
        
        Select EventwParam()
          Case #RETURN
            
            String.s = GetGadgetText(Eingabezeile)
            Debuglog(String.s)
            
            SendComandAndWait(String.s)
            
            SetGadgetText(Eingabezeile,"") 
            
        EndSelect
        DebugLog("}")
        
        ;}
      Case #PB_Event_Menu
        
        Select EventMenu()
            
            ;{ About           
          Case #Menu_About
            
            hWnd = OpenWindow(#Menu_About, 0, 0, 400, 300, "About", #PB_Window_BorderLess   | #PB_Window_ScreenCentered) : If hWnd=0:     Debug "Cant open window":     End: EndIf
            StickyWindow(#Menu_About,#True)
            ButtonGadget(#About_Exit, 160, 270, 80, 24, "OK") 
            
            ;}
            
        EndSelect
        
      Case #PB_Event_CloseWindow 
        Quit = 1 
    EndSelect
    event = WindowEvent()   
  Wend
  ProcedureReturn event
EndProcedure
Procedure Timer()
  Protected i1,t$
  
  Select EventTimer()
    Case #EventForce
      
      ; Dieser Code Teil muss in die TimerEvent Procedure, Weil sonst beim bewegen des Fensters
      ; Das Programm bei WaitEvent stehen bleibt. Ein bekanntes Problem ab W 7 durch die einfürung
      ; des Binding Systems
      
      GetCom3()
      
      If RunTest < ElapsedMilliseconds()
        RunTest =  ElapsedMilliseconds()+1000
        debuglog("Main Schleife läuft")
      EndIf
      
      
      ;----------------------------------------------------------------------------------------
  EndSelect
  
EndProcedure

;{ Open Main Window

hWnd1 = OpenWindow(#MainWindow, 0, 0, 400, 540, Title.s+" ("+Version.s+")", #PB_Window_SystemMenu| #PB_Window_ScreenCentered) : If hWnd1=0:     Debug "Cant open window":     End: EndIf
hFont = LoadFont(1, "Ariel", 8): If hFont=0: Debug "Cant open font" : End: EndIf
SetGadgetFont(#PB_Default, FontID(1))

;}
;{ Event Timer


; Damit beim Windows Verschieben der Code nicht stehen bleibt.

If EventTimer = 1
  AddWindowTimer(#MainWindow, #EventForce, 1)
  BindEvent(#PB_Event_Timer, @Timer(), #MainWindow)
EndIf
;}
;{ GUI elemente erzeugen

; Auswahl GetGat für die Verbindungs Geschwindigkeit -----------------------------

ComboBoxGadget(#Main_Speed, 10, 460, 70, 24)
Restore BaudData
Read.l a.l
While a.l<>-1
  AddGadgetItem(#Main_Speed, -1,Str(a.l))
  Read.l a.l     
Wend
SetGadgetState(#Main_Speed, 9)
Verbindung.l = Val(GetGadgetText(#Main_Speed)) 

;Auswahl GetGat für den ComPort -------------------------------------------------

Port = ComboBoxGadget(#PB_Any, 85, 460, 70, 24)
Restore ComPort
Read.s b.s
While b.s<>"-1"
  If  OpenSerialPort(0, b.s,300, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
    AddGadgetItem(Port, -1,b.s)
    CloseSerialPort(0)
  EndIf
  Read.s b.s
Wend
SetGadgetState(Port, 0)
PortName.s=GetGadgetText(Port)

; Liste der comandos ------------------------------------------------------------

ComList = ComboBoxGadget(#PB_Any, 310, 425, 80, 24)
Restore ComandList
Read.s b.s
While b.s<>"-1"
  AddGadgetItem(ComList , -1,b.s)
  Read.s b.s
Wend
SetGadgetState(ComList , 0)
Comando.s = GetGadgetText(ComList)

; GadGet

Eingabezeile = StringGadget(#PB_Any, 10, 425, 290, 24, Comando.s) 
ButtonGadget(#Main_Connect, 160, 459, 70, 26, "Connect") 
ButtonGadget(#Main_DisConnect, 235, 459, 70, 26, "DisConnect") 
ButtonGadget(#Main_Senden, 320, 459, 70, 26, "Send") 
Console= EditorGadget(#PB_Any, 10, 45, 380, 300 ,#PB_Editor_ReadOnly)

SendGui = ButtonGadget(#PB_Any, 10, 15, 180, 24, "Load GUI.txt and send to ARDUINO")
SendLastGui = ButtonGadget(#PB_Any, 210, 15, 180, 24, "Send last GUI.txt to ARDUINO")
DisableGadget(SendLastGui, 1)

CheckBoxGadget(#Main_SetUpSaveAndClear, 10,  348, 100, 24, "SaveAndClear") 
If SaveAndClear = 1
  SetGadgetState(#Main_SetUpSaveAndClear, #PB_Checkbox_Checked)
EndIf

CheckBoxGadget(#Main_SetUpTrackData, 270,  348, 100, 24, "TrackData")
If TrackData = 1
  SetGadgetState(#Main_SetUpTrackData, #PB_Checkbox_Checked)
EndIf

CheckBoxGadget(#Main_SetUpTrackCom, 270,  367, 100, 24, "TrackCom"):
If TrackCom = 1
  SetGadgetState(#Main_SetUpTrackCom, #PB_Checkbox_Checked)
EndIf 

SetUpSave =  CheckBoxGadget(#PB_Any, 170,  367, 100, 24, "Save"):
If Save = 1
  SetGadgetState(SetUpSave, #PB_Checkbox_Checked)
EndIf 

SetUpClear =  CheckBoxGadget(#PB_Any, 170,  348, 100, 24, "Clear"):
If Clear = 1
  SetGadgetState(SetUpClear, #PB_Checkbox_Checked)
EndIf  

SetUpDebugLog =  CheckBoxGadget(#PB_Any, 10,  367, 100, 24, "DebugLog"):
If DebugLog = 1
  SetGadgetState(SetUpDebugLog, #PB_Checkbox_Checked)
EndIf 

CallRequester = ButtonGadget(#PB_Any, 360, 395, 30, 24, "...")
SetUpSavePfad = StringGadget(#PB_Any, 10, 395, 345, 24, SpeicherPfad.s,#PB_String_ReadOnly  )

;Menue


CreateMenu(0, WindowID(#MainWindow))
MenuTitle("Configuration")
MenuItem(6, "Input")
MenuItem(1, "Output")
MenuItem(2, "BlouTooth")
MenuTitle("Interpretation")
MenuTitle("Tools")
MenuItem(3, "Search Arduino")
MenuItem(4, "GUI Data to Sketch")
MenuTitle("Intern") 
MenuTitle("Update")
MenuItem(7, "Search")
MenuTitle("Help")
MenuItem(5, "Online")
MenuItem(#Menu_About, "About")


;}
;{ Main

Repeat 
  
  If GUI = 1
    
  EndIf
  
  Event = WindowEventSelect()
  
  ;{ GetCom2 / Auf daten von der Schnitstelle horchen
  
  GetCom3()
  
  If RunTest < ElapsedMilliseconds()
    RunTest =  ElapsedMilliseconds()+1000
    ;debuglog("Main Schleife läuft")
  EndIf  
  
  ;}    
  ;{ Programm ende Requester
  
  If Quit = 1
    If MessageRequester("Quit Requester","You are quite the programm ",#PB_MessageRequester_YesNo  ) = #PB_MessageRequester_No     
      Quit = 0
    EndIf           
  EndIf
  
  ;}
  ;{ Keine Daten von der Schnitstelle , dann eine ms Warten um dem System Zeit zu geben  
  If t$="" And Event = 0
    Delay(1)
  EndIf
  ;}
  
Until Quit = 1

SendComandNotWait(".RESET")
Delay(200)

;}
;{ Recurcen Freigeben

If DebugLogOpen
  CloseFile(DebugLogOpen)  
EndIf

FreeList(DrawComandos())
FreeList(DrawListen())
FreeGadget(#PB_All)
CloseWindow(#PB_All)
;}

End 

;{ Data

DataSection
  
  BaudData:
  Data.l 300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,-1
  
  ComPort:
  Data.s "COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9","COM10","COM11","COM12","-1"
  
  ComandList:
  Data.s "..",".term",".gui","/end","/DrawList(S1)","/DrawList(S2)","/Flip()","/StartDraw()","/StopDraw()","/CreateCanvas()","/SetRGB(0,0,0)","/ClearDraw()","/SetRGB(255,255,255)","/Line(0,0,400,400,1)","/Box(10,10,500,500,1)","/Text(50,100,GUIreflect,20)"
  Data.s "/SaveList(TestSeite1)","-1"
  
  
EndDataSection
;}

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
Zuletzt geändert von tft am 23.12.2017 15:28, insgesamt 1-mal geändert.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Konstante nicht gefunden ???

Beitrag von Kiffi »

Hierfür musst Du die entsprechende Konstante in den Compiler-Optionen aktivieren:

Bild

Grüße ... Peter
Hygge
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Konstante nicht gefunden ???

Beitrag von tft »

Hallo Peter .....

jo , das war das Problem.

Danke .. Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Antworten