Moin Dieter, 
ich habe mir mal deinen Code etwas genauer angesehen....  (Ohne Anspruch auf Vollständigkeit) 
Code: Alles auswählen
; Zeile 239 ff. 
  SetGadgetState(#combogadg_DaT_Art,2) 
  If #combogadg_DaT_Art = 2 
    GadgetToolTip(#combogadg_DaT_Art, "das Datum wird nicht verändert")
  EndIf
--> "#combogadg_DaT_Art" ist eine GADGET Nummer (Enumeration, Wert == 5); dieser Vergleich ist niemals wahr. 
Code: Alles auswählen
; Zeile 281 ff. 
  CheckBoxGadget(#CheckboxSticky, 400, Top , 100, 20, "Fenster oben")
  SetGadgetState(#CheckboxSticky,1)
  If #CheckboxSticky = 1 : StickyWindow(#Mainwindow,#True) : EndIf 
--> "#CheckboxSticky" ist eine GADGET Nummer (Enumeration, Wert == 14); dieser Vergleich ist niemals wahr. 
  >> Dementsprechend wird StickyWindow() hier auch nicht gesetzt/aktiviert.  
  >> Allerdings hast Du StickyWindow(#MainWindow, #True) ja schon in Zeile 231 aufgerufen. 
  >> Also ist das Hauptfenster "Sticky". 
Code: Alles auswählen
; Zeile 299 ff 
  If Neu 
        SetGadgetText(#EDGadget_Text_Ausgabe,Ausgabetext$)
     Neu = 0
  EndIf 
--> kann man so machen. Aber warum Variable Neu und warum zurücksetzen? 
Hinweis: Code der außerhalb von Proceduren steht wird nur einmal aufgerufen.... 
Code: Alles auswählen
; Zeile 312 ff. (in der main loop)  
  Select WaitWindowEvent()      ;auf Ereignis im Window warten
    Case #PB_Event_CloseWindow  ;Fenster schließen
      Ende=1
  ;-TODO Warum funktioniert die Checkbox nicht???
    Case   #CheckboxSticky                              
      If   #PB_Checkbox_Checked
        StickyWindow(#Mainwindow,1)
      Else  
        StickyWindow(#Mainwindow,0)
      EndIf
--> Die Case Anweisung "Case   #CheckboxSticky" ist an der falschen Stelle. Sie gehört nach der Select EventGadgtet() in Zeile 323 
--> diese If Anweisung ergibt immmer wahr 
Warum? 
Mit GetGadgetState() eines Checkbox-Gadgets bekommt man die folgenden Rückgabewerte: 
Code: Alles auswählen
Debug #PB_Checkbox_Checked   ; ==  1 
Debug #PB_Checkbox_Unchecked ; ==  0 
Debug #PB_Checkbox_Inbetween ; == -1  ; <=> (Only for #PB_CheckBox_ThreeState checkboxes)
 
Code: Alles auswählen
; Zeile 373 ff 
;- ExifTool Start        
    Case #Button_Exif_Start ; Exif Datum nach Filedatum verschieben
      ClearGadgetItems(#EDGadget_Text_Ausgabe)
;-TODO Warum funktioniert CleargadgetItems hier nur mit der nächsten Zeile      
      While WindowEvent() : Wend 
--> hat Macros schon erklärt 
Und wenn Du noch nicht wütend und mich verfluchend aufgegeben hast:.... 
Hier noch ein paar Anmerkungen aus meiner persönlichen Kodierrichtlinie (muss man nicht so machen, kann man aber.) 
1. Preference-Dateien immer mit vollständigem Pfad aufrufen 
   Sonst wird das aktuelle Verzeichnis genommen. (s.a. GetCurrentDirectory()) 
Ansonsten kann man auch eindeutige Verhältnisse z.B. durch SetCurrentDirectory("<hiermit soll jetzt gearbeitet werden>") schaffen. 
2. Code nur innerhalb von Proceduren, gestartet wird mit Procedure main() 
   Ist wohl ein Überbleibsel aus meiner Anfangszeit mit C. 
3. Namen von Konstanten und Variablen möglichst sorgfältig benennen. (damit man in zwei Jahren auch noch weiß was gemein ist)