Steht doch im ersten Satz drin! Hab mir das Skript jetzt vom anderen Rechner gemailt. Mal eben rüberlaufen ist bei dem Rechner nicht, der steht 100km weg in einem alarmgesicherten Gebäude!
Hab inzwischen alles selber gelöst. Freigabe und Sperrung des Buttons funktionieren tadellos, gespeichert wird erst nach If-Abfrage ob in den Comboboxen was drin steht.
Checkbox wurde integriert und die Löschung erfolgt nur wenn nicht im Input und der dritten Combobox der gleiche Inhalt steht. Zusätzlich wird auch nur gelöscht, wenn die Datei überhaupt existiert. Es gibt zwar keine Fehlermeldung beim löschen einer nicht vorhandenen Datei, aber ich finde das so sauberer gecodet.
Ich könnte den Button auch nach dem anklicken wieder disablen bis man die Comboboxen verändert hat... wär zusätzlich auch eine Überlegung wert.
Dafür hab ich ein neues Problem eingebaut. Ich hätte das Input Feld gerne READONLY.
Wenn ich dem Feld diese Eigenschaft zuweise (SetStyle... $E$_READONLY) fängt die komplette GUI an wild zu flackern, es legt sich beim berühren des Input-Feldes mit der Maus ein großer grauer Kasten über die GUI, der vorrübergehend und nur teilweise verschwindet, wenn man in den Comboboxen was auswählt. Die Checkbox verschwindet im grau und taucht auch nicht wieder auf.
Werd am Montag das ganze erstmal mit der neuesten Beta probieren. Scheint mir ein Bug zu sein.
Oder hängt das mit dem Aufbau oder dem Aufruf der GUI im Skript zusammen?
Das funktionierende Skript ohne Geflacker sieht nun so aus:
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
;global variables
Global $sIniToChange="meine.ini"
;Gui
$hGui=GUICreate("Ini Update",460,200)
$iComboSection=GUICtrlCreateCombo("",10,10,185)
$iComboData=GUICtrlCreateCombo("",205,10,185)
$iInputValue=GUICtrlCreateInput("",10,40,380)
$iComboXYZ=GUICtrlCreateCombo("",10,100,420)
$iCheckBox=GUICtrlCreateCheckbox(" Alte XYZ-Datei löschen?",10,65)
$iButtonSave=GUICtrlCreateButton("Speichern",10,150,440)
;GUICtrlSetState($iInputValue,$GUI_DISABLE)
GUICtrlSetState($iButtonSave,$GUI_DISABLE)
_GUICtrlComboBox_AddDir($iComboXYZ, @ScriptDir & "\*.xyz")
;loadIni
$ar=IniReadSectionNames($sIniToChange)
$string=""
;Gehe alle Namen durch (außer den ersten Eintrag, da steht die Anzahl der Einträge drin
for $i=1 to UBound($ar)-1 step 1
;Wenn der Name nicht SETUP ist, füge ihn der Combobox hinzu
if $ar[$i]<>"SETUP" then
$string&=$ar[$i]
;Wenn wir nicht beim letzten Namen sind füge den Trenner für einzelne Einträge hinzu
if $i<>UBound($ar)-1 then
$string&="|"
endif
endif
next
;schreibe die Einträge in die Combo
GUICtrlSetData($iComboSection,$string)
;showGui
GUISetState(@SW_SHOW,$hGui)
while 1
;Frag ob irgendwelche nutzereingaben erfolgt sind
$msg=GUIGetMsg()
Switch $msg
;Combo wurde geklickt
Case $iComboSection
_GUICtrlComboBox_ResetContent($iComboData)
GUICtrlSetData($iInputValue,"")
GUICtrlSetState($iButtonSave,$GUI_DISABLE)
;lade die Section und füge alle Variablen in die 2te Combo ein
$ar=IniReadSection($sIniToChange,GUICtrlRead($iComboSection))
$string=""
for $i=1 to UBound($ar)-1 step 1
$string&=$ar[$i][0]
if $i<>UBound($ar)-1 then
$string&="|"
endif
next
GUICtrlSetData($iComboData,$string)
Case $iComboData
;les die Variable, die in Section+key steht, welche oben ausgewählt wurden
$data=IniRead($sIniToChange,GUICtrlRead($iComboSection),GUICtrlRead($iComboData),"")
;setze den Input auf diesen Wert
GUICtrlSetData($iInputValue,$data)
If _GUICtrlComboBox_GetCurSel($iComboData)<>-1 And _GUICtrlComboBox_GetCurSel($iComboXYZ)<>-1 Then
GUICtrlSetState($iButtonSave,$GUI_ENABLE)
EndIf
Case $iComboXYZ
GUICtrlSetState($iButtonSave,$GUI_ENABLE)
Case $iButtonSave
;schreibe die Änderung in die Inidatei
If _GUICtrlComboBox_GetCurSel($iComboData)<>-1 And _GUICtrlComboBox_GetCurSel($iComboXYZ)<>-1 Then
IniWrite($sIniToChange,GUICtrlRead($iComboSection),GUICtrlRead($iComboData),GUICtrlRead($iComboXYZ))
EndIf
If Not GUICtrlRead($iInputValue) <> GUICtrlRead($iComboXYZ) Then
If FileExists(GUICtrlRead($iInputValue)) Then
If GUICtrlRead($iCheckBox) = $GUI_CHECKED Then
FileDelete(GUICtrlRead($iInputValue))
EndIf
EndIf
EndIf
Case -3
;Programm beenden, wenn das Fenster geschlossen wird
exit
EndSwitch
WEnd
Alles anzeigen
Wie man an der auskommentierten Zeile sieht hab ich zuerst den Input disabled. Das sieht allerdings doof aus. Gräuliche Schrift auf grauem Grund. Wenn das Feld readonly ist dann ist es zwar auch grau aber die Schrift bleibt wenigstens schwarz und ist gut lesbar.
Wenn das geschafft ist fehlt nur noch eine Beschriftung bei den Comboboxen auf der GUI. Muss mich mal einlesen, wie man nen Text auf die GUI frickelt. Kann so schwer ja nicht sein. In den Comboboxen selbst möchte ich das nicht drinstehen haben, das sieht wieder doof aus.