1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. fred08155

Beiträge von fred08155

  • For-Schleife funktioniert nicht

    • fred08155
    • 18. Juli 2015 um 07:12

    Es funktioniert fast perfekt, doch bei einer Datei verweigert das Programm die Löschung standhaft. Eine der Dateien enthält im Namen einen Bindestrich. Wenn ich diese auswähle und die Checkbox abhake wird die Datei nicht gelöscht, bei allen anderen Dateien funktioniert es problemlos.
    Ich dachte ich hätte noch irgendwo nen Fehler im Skript und habe die Funktionen der Cases $iCheckbox und $iButtonSave umformuliert (mal mit GUICtrlRead oder mit GUICtrl_GetState) aber daran scheint es nicht zu liegen.
    Ist das irgendein bekannter Bug? Wenn ja - gibt es die Möglichkeit den zu umgehen?

    [EDIT]
    Hat sich erledigt. Hab nochmal in der Hilfe nachgeschlagen und dann diese spezielle hartnäckige Datei geprüft und dabei festgestellt, dass genau diese eine Datei das Attribut "schreibgeschützt" hat. :rofl:
    Werde also das Skript noch derart abändern, dass automatisch der Schreibschutz vor dem löschen entfernt wird.
    Eine If-Verschachtelung mehr und das sollte das Problem dann beheben. :thumbup:

  • For-Schleife funktioniert nicht

    • fred08155
    • 15. Juli 2015 um 10:38

    Nach weiterem frohen basteln ist nun folgendes daraus entstanden:

    AutoIt
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <GuiEdit.au3>
    #include <File.au3>
    
    
    ;global variables
    Global $sIniToChange=@ScriptDir & "\" & "meine.ini"
    ;Gui
    $hGui=GUICreate("Ini Updater",400,220)
    $iComboSection=GUICtrlCreateCombo("",10,10,185,20,$CBS_DROPDOWNLIST)
    GUICtrlCreateLabel("Sektion",85,35)
    $iComboData=GUICtrlCreateCombo("",205,10,185,20,$CBS_DROPDOWNLIST)
    GUICtrlCreateLabel("Variable",280,35)
    $iComboXYZ=GUICtrlCreateCombo("",10,120,380,20,$CBS_DROPDOWNLIST)
    GUICtrlCreateLabel("neue Xyz-Datei",170,145)
    $iInputValue=GUICtrlCreateInput("",10,55,380,20,2049)
    ;$iInputValue=GUICtrlCreateInput("",10,55,380,20,BitOR($ES_CENTER,$ES_READONLY))
    GUICtrlSetBkColor(-1,0xFFFFFF)
    ;_GUICtrlEdit_SetReadOnly($iInputValue,TRUE)
    GUICtrlCreateLabel("aktuelle Xyz-Datei",160,80)
    $iCheckBox=GUICtrlCreateCheckbox("  aktuelle Xyz-Datei beim speichern löschen",10,95)
    $iButtonSave=GUICtrlCreateButton("Speichern",10,180,380,27)
    $iButtonReload=GUICtrlCreateButton("neu laden",280,90,80,20)
    GUICtrlSetState($iButtonSave,$GUI_DISABLE)
    
    
    
    
    
    
    $aArray=_FileListToArray(@ScriptDir, "*.xyz", $FLTAR_FILES)
    For $i=1 To Ubound($aArray)-1
        GUICtrlSetData($iComboXYZ,$aArray[$i])
    Next
    Sleep(500)
    
    
    ;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
    			   ;GUICtrlSetBkColor($iInputValue, 0xFFFFFF)
    			;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
    			GUICtrlRead($iComboXYZ)
    			If _GUICtrlComboBox_GetCurSel($iComboData)<>-1 Then
    			GUICtrlSetState($iButtonSave,$GUI_ENABLE)
    			EndIf
    
    
    		Case $iButtonSave
    			;schreibe die Änderung in die Inidatei
    			_GUICtrlButton_GetState($iCheckBox)
    			If _GUICtrlComboBox_GetCurSel($iComboData)<>-1 And _GUICtrlComboBox_GetCurSel($iComboXYZ)<>-1 Then
    			IniWrite($sIniToChange,GUICtrlRead($iComboSection),GUICtrlRead($iComboData),GUICtrlRead($iComboXYZ))
    			EndIf
    
    
    		 	If GUICtrlRead($iInputValue) <> GUICtrlRead($iComboXYZ) Then
    			   If FileExists(GUICtrlRead($iInputValue)) Then
    				  If BitAND($iCheckBox,$BST_CHECKED)=$BST_CHECKED Then
    				  FileDelete(GUICtrlRead($iInputValue))
    				  EndIf
    			   EndIf
    			EndIf
    			GUICtrlSetState($iButtonSave,$GUI_DISABLE)
    
    
    		Case $iCheckBox
    				_GUICtrlButton_GetState($iCheckBox)
    				If _GUICtrlComboBox_GetCurSel($iComboData)<>-1 And _GUICtrlComboBox_GetCurSel($iComboXYZ)<>-1 Then
    				If GUICtrlRead($iInputValue) <> GUICtrlRead($iComboXYZ) Then
    					If BitAND($iCheckBox,$BST_CHECKED)=$BST_CHECKED Then
    						GUICtrlSetState($iButtonSave,$GUI_ENABLE)
    					EndIf
    				EndIf
    				EndIf
    
    
    		Case $iButtonReload
    					_GUICtrlComboBox_ResetContent($iComboXYZ)
    					GUICtrlSetState($iButtonSave,$GUI_DISABLE)
    					$data2=IniRead($sIniToChange,GUICtrlRead($iComboSection),GUICtrlRead($iComboData),"")
    					;setze den Input auf den neuen Wert
    					GUICtrlSetData($iInputValue,$data2)
    					GUICtrlRead($iComboData)
    					$aArray=_FileListToArray(@ScriptDir, "*.xyz", $FLTAR_FILES)
    					For $i=1 To Ubound($aArray)-1
    					GUICtrlSetData($iComboXYZ,$aArray[$i])
    					Next
    
    
    		Case -3
    			;Programm beenden, wenn das Fenster geschlossen wird
    			exit
    	EndSwitch
    WEnd
    Alles anzeigen

    Die Befüllung der dritten Combobox habe ich abgeändert, da die Funktion

    AutoIt
    _GUICtrlComboBox_AddDir($iComboXYZ, @ScriptDir & "\" & "*.xyz")


    nach dem hinzufügen der Styles plötzlich nicht mehr funktioniert hat.

    Hier noch ein kleines Skript, um Daten zu erzeugen, die das obige Skript dann einlesen kann. Zuerst das hier starten und danach das große Skript oben. Dann kann das Ding in vollem Umfang getestet werden, falls jemand genügend Langeweile hat. :P

    AutoIt
    #include <FileConstants.au3>
    ;erstelle Ini-Datei
    IniWrite(@Scriptdir & "\meine.ini","SETUP","var_path","X:\Programme\CRAPLIN4.0\")
    IniWrite(@Scriptdir & "\meine.ini","SETUP","var_port","5")
    IniWrite(@Scriptdir & "\meine.ini","SETUP","var_version","40")
    IniWrite(@Scriptdir & "\meine.ini","XY123","var_hoo","5gh_E4tgWr_REZ_Wr_St.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY123","var_loo","jh_ERzE$Z_e5Z_Twe4t_.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY258","var_soo","5h_e5z_we4t_w4t_w3t.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY258","var_hoo","5he4gw4_s4t_w4t_w34rt.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY258","var_loo","5gh_E4tgWr_REZ_Wr_St.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY258","var_qoo","5h_s3t-dz4_w3t_wt_5uzz5z54.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY951","var_soo","h5ze_dtz-e5gt_w3r.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY951","var_hoo","5zd_d4t_SD$t_S4t_S4t.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY951","var_loo","fg_dt_Dh_s4te_d4t_set.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY354","var_soo","w4g_sar_sf_a23r_s3r.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY354","var_hoo","5gh_E4tgWr_REZ_Wr_St.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY354","var_loo","ser_s3r_e4g.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY354","var_qoo","fae_3qw5r_drh_as34r_454.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY417","var_hoo","ksd_sfef_3444.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY417","var_soo","3w3f_3r_t545.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY417","var_loo","ae_234_fdas.xyz")
    IniWrite(@Scriptdir & "\meine.ini","XY018","var_roo","aser_asf_34_db24.xyz")
    
    
    ;erzeuge leere Testdateien mit Endung xyz
    FileWrite(@Scriptdir & "\5gh_E4tgWr_REZ_Wr_St.xyz","")
    FileWrite(@Scriptdir & "\jh_ERzE$Z_e5Z_Twe4t_.xyz","")
    FileWrite(@Scriptdir & "\5h_e5z_we4t_w4t_w3t.xyz","")
    FileWrite(@Scriptdir & "\5he4gw4_s4t_w4t_w34rt.xyz","")
    FileWrite(@Scriptdir & "\5gh_E4tgWr_REZ_Wr_St.xyz","")
    FileWrite(@Scriptdir & "\5h_s3t-dz4_w3t_wt_5uzz5z54.xyz","")
    FileWrite(@Scriptdir & "\h5ze_dtz-e5gt_w3r.xyz","")
    FileWrite(@Scriptdir & "\5zd_d4t_SD$t_S4t_S4t.xyz","")
    FileWrite(@Scriptdir & "\fg_dt_Dh_s4te_d4t_set.xyz","")
    FileWrite(@Scriptdir & "\w4g_sar_sf_a23r_s3r.xyz","")
    FileWrite(@Scriptdir & "\ser_s3r_e4g.xyz","")
    FileWrite(@Scriptdir & "\fae_3qw5r_drh_as34r_454.xyz","")
    FileWrite(@Scriptdir & "\ksd_sfef_3444.xyz","")
    FileWrite(@Scriptdir & "\3w3f_3r_t545.xyz","")
    FileWrite(@Scriptdir & "ae_234_fdas.xyz","")
    Alles anzeigen
  • For-Schleife funktioniert nicht

    • fred08155
    • 11. Juli 2015 um 19:05

    Ich frage mich trotzdem, warum es dann in der aktuellen Form funktioniert. :D
    Aber dein Vorschlag wird auch gleich am Montag ausprobiert.

  • For-Schleife funktioniert nicht

    • fred08155
    • 11. Juli 2015 um 17:56

    Danke für die Erleuchtung. Hab eben nicht alles nachgeprüft, was der Kollege mir vorgekaut hat. Die GUI hab ich ja nicht selbst entwickelt. Hätte aber vielleicht den gleichen Fehler gemacht, wenn in der Hilfe nichts darüber steht welche Angaben zwingend vorhanden sein müssen.
    Die If Not-Abfrage ist zwar tatsächlich anders gemeint, aber im Endeffekt kommt es aufs gleiche raus (oder etwa nicht?). Zumindest klappt das meinen bisherigen Tests zufolge tadellos. Ich hatte am Anfang ein Gleichheitszeichen drin, das hat aber nicht funktioniert (wohl wegen der Priorität von Not).
    Kanashius hat mich dann mit seinem Code-Beispiel auf die Idee mit <> gebracht.
    Wie kann ich denn das Not weglassen? Es soll doch die Datei nur dann gelöscht werden, wenn im Input und der Combobox unterschiedliche Angaben stehen (also NICHT das gleiche). So wie es dasteht hat es so funktioniert wie ich es haben wollte.

    Hmmm... nur so als kleines Gedankenspiel: wenn ich den Input disable statt auf readonly zu setzen und die Hintergrundfarbe als weiß setzte sofern das geht, würde dann ohne die zusätzlichen Angaben auch wieder die GUI rumflackern oder würde es funktionieren? :D

  • For-Schleife funktioniert nicht

    • fred08155
    • 11. Juli 2015 um 15:09

    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! :thumbdown:

    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:

    AutoIt
    #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.

  • For-Schleife funktioniert nicht

    • fred08155
    • 10. Juli 2015 um 20:13

    Das Skript reiche ich bei Gelegenheit nach, dafür sitz ich grad am falschen Rechner.
    Strings hab ich am Anfang verglichen, wollte nicht so recht deswegen habe ich dann später den Listenindex verglichen.
    Der sollte "-1" sein, wenn nix ausgewählt ist.
    Ne Abfrage vor dem speichern ist auch schon drin. Hatte ich erst auf den Listenindex der dritten ComboBox gesetzt - wollte nicht funktionieren. Ist momentan auf der $iComboData, das funktioniert. Wenn in der drtten ComboBox nix ausgewählt ist speichert das dann halt eine leere Variable.

  • For-Schleife funktioniert nicht

    • fred08155
    • 10. Juli 2015 um 17:47

    Beim Löschen guck ich wohl eher nach FileDelete oder so. Ich will ja nix aus der Ini löschen, sondern die alte Datei, die dann nicht mehr benötigt wird, wenn die beim Update durch eine neue ersetzt wird.
    Das krieg ich schon hin, dürfte ähnlich einfach funktionieren wie bei VBS, damit hab ich schon einiges gebastelt.

    Mit der If-Abfrage funktioniert es teilweise. Hab jetzt so viel hin und her probiert dass ich so langsam nicht mehr weiß wo mir der Kopf steht.
    Manche Varianten haben nicht zuverlässig funktioniert, mal wurde der Button bei Auswahl eines Eintrags in der ComboBox aktiviert, mal nicht.
    Scheint auch irgendwie Probleme mit der letzten ComboBox zu geben. Scheint dem Skript nicht zu gelingen, mit GetState abzufragen ob nichts oder etwas ausgewählt wurde.

    Mir gelingt es bisher auch nicht, die letzte ComboBox in die Switch - Case Abfrage mit reinzubringen. Schreibe ich die da rein bekommt die ComboBox keinen Inhalt. Steht die ausserhalb wird die einwandfrei befüllt.

    Die dritte CombioBox wird mit

    Code
    _GUICtrlComboBox_AddDir($iComboBoxXYZ, @ScriptDir & "\*.xyz")


    befüllt. Hab ich mir aus der Hilfe rausgesucht. :D

  • For-Schleife funktioniert nicht

    • fred08155
    • 9. Juli 2015 um 21:55

    Fällt damit die while Schleife komplett raus?
    Hab noch etwas gebastelt und die nächste ComboBox eingebaut. Fehlt nur noch die Checkbox. Vielleicht krieg ich das morgen oder übermorgen sogar fertig. Hatte mir das etwas schwieriger vorgestellt, aber für die weitere ComboBox sind nur ein paar einfache Zeilen Code nötig. :D
    Funktioniert jetzt also schon alles bis auf die noch nicht implementierte optionale Löschfunktion.
    Dann muss am Ende nur noch ein Schutz rein, damit das Programm keinen Unsinn in die Ini schreibt. Hab mal den Speicher-Button gedrückt ohne was auszuwählen. Das hat mir dann folgendes an die Ini angehängt.

    Code
    []
    =


    Ich such dann mal ne Funktion den Button so lange zu sperren bis in allen ComboBoxen was ausgewählt wurde.

    Hmm... Mit ner If Funktion bekomme ich es hin über _GUICtrlComboBox_GetCurSel($iComboSection)=-1 zu prüfen ob was ausgewählt ist und entsprechend den Button zu enablen. Allerdings funktioniert das nur solange ich nur zwei ComboBoxen prüfe. Wenn ich die dritte mit reinsetze geht es nicht mehr und der Button bleibt grau.

    Also

    Code
    If Not _GUICtrlComboBox_GetCurSel($iComboSection)=-1 or _GUICtrlComboBox_GetCurSel($iComboData)=-1 Then
                         GUICtrlSetState($iButtonSave,$GUI_ENABLE)
                    EndIf

    mit nur zwei ComboBoxen funktioniert während

    Code
    If Not _GUICtrlComboBox_GetCurSel($iComboSection)=-1 or _GUICtrlComboBox_GetCurSel($iComboData)=-1 or _GUICtrlComboBox_GetCurSel($iComboBox3)=-1 Then
                         GUICtrlSetState($iButtonSave,$GUI_ENABLE)
                    EndIf

    mit allen drei nicht funktioniert. Kann ich nicht beliebig viele Bedingungen in der If-Abfrage hintereinander haben???

  • For-Schleife funktioniert nicht

    • fred08155
    • 9. Juli 2015 um 12:55

    Kleines Update

    Hab das Verhalten der ComboBoxen mal etwas angepasst, da es mir so noch nicht gefallen hat.

    AutoIt
    #include <GuiComboBox.au3>
    ;global variables
    Global $sIniToChange="meine.ini"
    ;Gui
    $hGui=GUICreate("Ini Update",400,300)
    $iComboSection=GUICtrlCreateCombo("",10,10,185)
    $iComboData=GUICtrlCreateCombo("",205,10,185)
    $iInputValue=GUICtrlCreateInput("",10,40,380)
    $iButtonSave=GUICtrlCreateButton("Speichern",10,70,380)
    ;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
    			while _GUICtrlComboBox_DeleteString($iComboData,0)<>-1
    			   _GUICtrlComboBox_ResetContent($iComboData)
    			   $data=""
    			   GUICtrlSetData($iInputValue,$data)
    			WEnd
    			;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)
    		Case $iButtonSave
    			;schreibe die Änderung in die Inidatei
    			IniWrite($sIniToChange,GUICtrlRead($iComboSection),GUICtrlRead($iComboData),GUICtrlRead($iInputValue))
    		Case -3
    			;Programm beenden, wenn das Fenster geschlossen wird
    			exit
    	EndSwitch
    WEnd
    Alles anzeigen

    Fehlt nur noch ne weitere ComboBox und ne Checkbox. Muss mich auch mal damit beschäftigen, wie man die GUI Elemente anordnet. Da gibts sicher auch noch Verbesserungspotential.
    Funktionieren würde das Ding so auch schon, aber ich möchte es noch etwas komfortabler gestalten, so wie ich es weiter oben beschrieben habe.
    Falls ich was nicht hinbekomme melde ich mich wieder.
    Das nächste Update könnte ne Weile dauern, hab nicht so viel Zeit dafür über.

  • For-Schleife funktioniert nicht

    • fred08155
    • 8. Juli 2015 um 12:13

    Supi. Werd ich mal genau drüberschauen. Das macht schon größtenteils das was ich möchte.
    Nur fehlt irgendwo noch nen Reset, wenn man das erste Dropdown verändert. Mit dem aktuellen Skript werden einfach alle weiteren eingelesenen Variablen in das zweite Dropdown-Feld hinzugefügt. Es sollen natürlich immer nur die angezeigt werden, die auch zu der Sektion gehören (und natürlich auch entsprechend gespeichert).
    Werde mal weiter dran schrauben und wenns mal fertig wird poste ich natürlich das Ergebnis.

  • For-Schleife funktioniert nicht

    • fred08155
    • 8. Juli 2015 um 10:33

    Ja, das ganze soll eine grafische Oberfläche bekommen.
    Ansonsten könnte man ja gleich bei der alten Methode bleiben: Ini mit Texteditor öffnen, alte Variable löschen und neue reinkopieren, speichern und ggf. Datei löschen.

    Hat sich bei der IniRead Funktion in letzter Zeit was geändert? Die genannten Befehle finde ich in meiner AutoIt Hilfedatei nicht. Hatte mir vor ca nem halben Jahr mal die neueste Beta-Version geladen. Die verwende ich auch noch.

    Zitat

    IniRead ( "filename", "section", "key", "default" )

    Hmmm... OK, die Befehle gibt's tatsächlich, nur die Suchfunktion in der Hilfe spuckt die mir nicht direkt aus.
    Tippe ich "iniread" ein, kommt als Ergebnis: IniRead, IniWrite, IniDelete.
    Die Suchfunktion in der Hilfedatei ist also stark verbesserungswürdig. :(

  • For-Schleife funktioniert nicht

    • fred08155
    • 8. Juli 2015 um 09:47

    Dann etwas konkreter. Die oberen 5 Zeilen interessieren nicht, dort stehen die Setup Variablen, dann kommen die interessanten.
    Hab meine Idee auch nochmal etwas verändert gegenüber der ursprünglichen Aufgabe.

    Dazu soll einmal der Name der Sektion ausgelesen werden für Dropdown, dann für jede Sektion der Name der Variable und der Text der Variable selbst. Diese sollen je nach gewählter Sektion dann nebeneinander dargestellt werden. Also per Dropdown Sektion auswählen, dann werden die Variablen-Namen und die Variable selbst dargestellt.
    Die Variable bzw der Variablen-Name soll ausgewählt werden können, woraufhin ein weiteres Dropdown-Feld aktiv wird, in dem alle Dateinamen mit Endung xyz aus dem aktuellen Verzeichnis aufgelistet werden.
    Wie man sich an der Stelle vielleicht schon denken kann soll das Skript / Programm dazu dienen, die Ini upzudaten.
    Optional wäre noch die Funktion, die alte Datei gleich zu löschen. Vielleicht per Checkbox anwählbar.

    Die Ini ist folgendermassen aufgebaut:

    Code
    [SETUP]
    var_path=X:\Programme\CRAPLIN4.0\
    var_port=5
    var_version=40
    
    
    [XY123]
    var_hoo=5gh_E4tgWr_REZ_Wr_St.xyz
    var_loo=jh_ERzE$Z_e5Z_Twe4t_.xyz
    
    
    [XY258]
    var_soo=5h_e5z_we4t_w4t_w3t.xyz
    var_hoo=5he4gw4_s4t_w4t_w34rt.xyz
    var_loo=5zh_e4t_we4t_E4t.xyz
    var_qoo=5h_s3t-dz4_w3t_wt_5uzz5z54.xyz
    
    
    
    
    
    
    
    
    [XY951]
    var_soo=h5ze_dtz-e5gt_w3r.xyz
    var_hoo=5zd_d4t_SD$t_S4t_S4t.xyz
    var_loo=fg_dt_Dh_s4te_d4t_set.xyz
    
    
    [XY354]
    var_soo=w4g_sar_sf_a23r_s3r.xyz
    var_hoo=wef_w4t_7ki6_65uh_retz_w35_00h.xyz
    var_loo=ser_s3r_e4g.xyz
    var_qoo=fae_3qw5r_drh_as34r_454.xyz
    
    
    [XY417]
    var_hoo=ksd_sfef_3444.xyz
    var_soo=3w3f_3r_t545.xyz
    var_loo=ae_234_fdas.xyz
    
    
    [XY018]
    var_roo=aser_asf_34_db24.xyz
    Alles anzeigen
  • For-Schleife funktioniert nicht

    • fred08155
    • 8. Juli 2015 um 07:54

    Kann die Aufgabe denn von einer For-Schleife in AutoIt einfach bewältigt werden?
    Oder wäre es besser über IniRead zu gehen? Oder brauch ich auch bei IniRead nochmal ne Schleife zum einlesen?

    Sind hoffentlich genug Beispiele in der Hilfe. Das mit der For-Schleife für Kommandozeile habe ich erst nach einer ganzen Weile richtig verstanden, da es nirgends richtig erklärt war und auf den meisten Seiten die Begriffe tokens und delims nur kurz angerissen und nicht ausführlich erklärt wurden. Mehr oder weniger durch Zufall habe ich trotzdem auch in der Einstiegsphase einige funktionierende For-Schleifen erzeugt, auch wenn ich nachher nicht so ganz nachvollziehen konnte warum. ^^

  • For-Schleife funktioniert nicht

    • fred08155
    • 8. Juli 2015 um 06:16

    Bin ich hier auf der faschen Seite? Ich dachte hier ginge es um die Skriptsprache AutoIt...
    Dementsprechend bastele ich gerade ein AutoIt Skript.
    Darin habe ich diese Schleife eingefügt.
    Um den ganzen Krempel zu testen gehe ich in SciTE dann auf "Tools - Go" um das Skript auszuführen und im Output Fenster steht dann ... Run(^ERROR

    Und ums Dateien speichern, also unnötige temporäre Dateien erstellen, möchte ich natürlich auch herumkommen. Den Kram mit Batches in temporäre Dateien zu schreiben und nachher wieder einzulesen hätte ich zur Not auch noch hinbekommen. Aber das ganze soll doch etwas sauberer geskriptet sein. ;)

  • For-Schleife funktioniert nicht

    • fred08155
    • 7. Juli 2015 um 22:06

    Ich möchte Variablen aus einer Ini Datei auslesen und diese in einem Array speichern um diese wieder in einer Dropdown-Auswahl zu verwenden.
    Da ich mich mit AutoIt noch nicht so gut auskenne habe ich erstmal eine For-Schleife für Kommandozeile erstellt, die auch wunderbar funktioniert.
    Setze ich diese aber in mein AutoIt Skript ein funktioniert diese nicht mehr. In SciTE wird immer ERROR ausgegeben.
    Ich habe schon verschiedene Beispiele mit For Schleifen in AutoIt Skripten gesehen, wobei keine so aufgebaut ist wie meine.

    Bekomme ich das überhaupt so zum laufen, oder muss ich das doch über AutoIt interne Funktionen wie IniRead machen?

    Code
    for /f "skip=5 tokens=3 delims==" %i in ("Meine.ini") echo %i

    Die Ini befindet sich im gleichen Verzeichnis wie das Skript was später als Exe kompiliert dort bleiben soll. Es handelt sich dabei um einen Ordner auf einem Netzlaufwerk, falls das was zur Sache tut. Das ganze muss ohne feste Pfadangabe funktionieren.

    Ich habe das ganze versucht direkt einzubauen und auch versucht die Ausgabe über StdoutRead mit Run(@Comspec ... @Scriptdir $STDOUT_CHILD etc einzufangen, aber ich bekomme überall immer nur ERROR. :(

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™