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)
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home