Hi ts soft und mk soft, hi all.
Erstmal vielen Dank besonders für die tollen Beispiele.
Das mit den Thread muß ich erstmal verdauen, das wird ein Weile dauern. 
 
Das Timercallback Beispiel hat mein "Problem" gelöst und ich kann nun wieder mit waitwindowsevent() arbeiten, echt super. !!!
Da mein Code durcheinandergekommen ist, habe ich ein macheschön Programm entworfen. ( Zeilenausrichten , tabs , leere löschen ) 
Vielleicht kann das der Eine oder Andere auch gebrauchen , ist aber ohne Gewähr, der Quellcode wird nicht verändert am Ende sollte 0 rauskommen sonst mist !!. 

.
Code: Alles auswählen
StandardFile$ = "C:\"   
Pattern$ = "PureBasic (*.pb)|*.pb|"
Pattern = 0  
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", "", Pattern$, Pattern)
If File$
  plus.s = UCase("Macro Structure If For Repeat Select Procedure while procedure.s ")
  minus.s = UCase("EndMacro EndStructure EndIf Next Until EndSelect EndProcedure wend ")
  plmi.s = "ELSE CASE "
  Ergebnis = CopyFile(File$, File$+".bak")
  Ergebnis = ReadFile(1, file$+".bak")
  Ergebnis = OpenFile(2, file$+".txt")
  nr = 0
  line=0
  While Eof(1) = 0 And nr<100       
    st.s = ReadString(1)     
    st2.s=""
    For ghj=1 To Len(st)
      ze.s=Mid(st,ghj,1)
      If Asc(ze)>31 
        st2=st2+ze
      Else
        st2=st2+" "
      EndIf
    Next ghj
    st=st2
    line = line +1
    up.s = UCase(st)
    pl = 0
    mi = 0
    pm = 0
    remz = 0
    If Trim(st) =""  ;
      ; Debug "Leer "+st
      remz =1
    EndIf
    If remz = 0
      For g= 1 To CountString(plus," ")
        sn.s= StringField(plus,g," ")
        For h=1 To CountString(up," ")+1
          snsn.s= StringField(up,h," ")
          If Left(snsn,1)=";" : h=1000 : EndIf
          If snsn = sn
            pl=1 
            Debug Str(line)+" "+Str(nr)+" + "+LSet(" ",nr)+"."+LTrim(st)
          EndIf
        Next h
      Next g
      For g= 1 To CountString(minus," ")
        sn= StringField(minus,g," ")
        For h=1 To CountString(up," ")+1
          snsn.s= StringField(up,h," ")
          If Left(snsn,1)=";" : h=1000  : EndIf
          If snsn = sn
            mi=1 
            Debug Str(line)+" "+Str(nr)+" - "+LSet(" ",nr-2)+"."+LTrim(st)
          EndIf
        Next h
      Next g
      For g= 1 To CountString(plmi," ")
        sn= StringField(plmi,g," ")
        For h=1 To CountString(up," ")+1
          snsn.s= StringField(up,h," ")
          If Left(snsn,1)=";" : h=1000 : EndIf
          If snsn = sn
            Debug Str(line)+" "+Str(nr)+" * "+LSet(" ",nr-2)+"."+LTrim(st)
            pm=1 
          EndIf
        Next h 
      Next g
    EndIf
    If mi=1 Or pm= 1 
      nr=nr -2
      If pl=1 
        nr=nr +2
        pl=0
        pm=0 
      EndIf
    EndIf
    If remz=0 
      WriteStringN(2,LSet(" ",nr)+LTrim(st))
    EndIf
    If pl=1 Or pm= 1
      nr=nr +2
    EndIf
  Wend
  CloseFile(1)       
  CloseFile(2)
EndIf
Debug "Ergebnis = " Str(line)+" "+Str(nr)
Sorry für meine Faulheit bei ein paar Zeilen... UCASE H=1000 
 
Sicherlich kann man einiges noch Verbessern...
Viele Grüße und einen "guten Rutsch" ins neue Jahr.
Willi