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. Oscar

Beiträge von Oscar

  • Ausgabe in Trace-File über mehrere AutoIt-Skripte

    • Oscar
    • 12. November 2016 um 16:02
    Zitat von zisco67

    Bezieht sich #include_once nur auf die nächste #include-Anweisung oder auf alle folgenden?

    Weder noch!
    Zitat aus der Hilfe:

    Zitat von Hilfe


    #include-once
    Specifies that the current file should only be included once.

  • Ausgabe in Trace-File über mehrere AutoIt-Skripte

    • Oscar
    • 11. November 2016 um 17:24

    Ja: 42 :D

    Im Ernst: Wie sollen wir eine Erklärung dazu abgeben, ohne die Scripte zu kennen?
    Du wirst nicht darum herum kommen die Scripte hier zu posten, wenn Dir an einer Lösung gelegen ist.

  • SuchString zwischen den ersten und den letzten Buchstaben eines Satzes verwenden

    • Oscar
    • 10. November 2016 um 16:09

    Um aus dem Quelltext die nicht benötigten Zeilen zu löschen, würde dann folgendes ausreichen:

    AutoIt
    $sText = FileRead(@ScriptDir & '\logfile.txt')
    $sText = StringRegExpReplace($sText, 'http:\/\/www\.top-.+?\R', '')
    MsgBox(0, 'Text', $sText)
  • "Formularabfrage" oder "Array-Ausgabe lässt sich nicht verwenden"

    • Oscar
    • 10. November 2016 um 05:01

    Der Reihe nach:
    - Die For...Next-Schleife muss rückwärts (vom höchsten Wert nach Null) durchlaufen werden, damit beim löschen der Array-Einträge nicht alles "nach vorne rutscht" und dadurch einen Array-Fehler auslöst.
    - Die Abfrage der Buttons sollte immer mit BitAnd passieren, da so ein Button mehrere Status haben kann. Mit BitAnd wird eine logische Bit-Verknüpfung des Status mit $GUI_CHECKED durchgeführt. Als Ergebnis erhält man Null oder den Wert von $GUI_CHECKED. Genau genommen müsste man jetzt noch einen Vergleich mit $GUI_CHECKED machen, um TRUE oder FALSE zu erhalten. AutoIt interpretiert aber Null als FALSE und jeden anderen Wert als TRUE, weshalb man hier (If-Anweisung) das "= $GUI_CHECKED" weglassen kann.
    - Die Werte, die beim erstellen der Buttons zurückgeliefert werden, sind die Control-IDs der jeweiligen Buttons. Damit kann man dann Änderungen vornehmen oder den Status auslesen. Wenn Du aber den Text des Buttons auslesen willst, dann über ControlGetText.

  • Autoit forceutf8.au3 funktioniert nur bei manuell erstellten Strings

    • Oscar
    • 9. November 2016 um 19:33

    Welchen Modus verwendest Du denn bei FileOpen?
    Am besten mal Dein Script posten oder ein entsprechendes Beispiel-Script, damit man selbst testen kann.

  • "Formularabfrage" oder "Array-Ausgabe lässt sich nicht verwenden"

    • Oscar
    • 9. November 2016 um 19:07

    In Deinem Script befinden sich diverse Fehler!
    Als Erstes aber der Hinweis, dass Du für die Radio-Button gleich Arrays verwenden solltest, dann ersparst Du Dir eine Menge Code.

    Aber um bei Deinem Script zu bleiben:
    1. Du "addierst" Strings zu Deinem Array ($atb_all) und nicht den Wert (die Control-ID) der Variablen. Der wäre aber erforderlich, um den Status der Radiobuttons auszulesen.
    2. Beim "löschen" der Array-Einträge gehst Du vorwärts durch das Array, das führt aber zwangsläufig zum Abbruch des Scripts, weil der Array-Bereich überschritten wird.

    Ich habe mal ein paar Änderungen vorgenommen, sodass es wie gewünscht funktioniert (schöner wäre es gleich mit Arrays s.o. zu arbeiten):

    AutoIt
    ; Testformular
    
    
    #Region INCLUDE
    #include <GUIScrollbars_Ex.au3>	; <=== nicht im Standardpaket von Autoit enthalten
    #include <WindowsConstants.au3>
    #include <string.au3>
    #include <Array.au3>
    #EndRegion INCLUDE
    
    
    #Region GUI Setting variables
    Global $iMsg
    Global $iMax_x_Scroll = 419 ; Scrollbreite (wenn Wert kleiner als Fensterbreite, dann keine Scrollbar)
    Global $iMax_y_Scroll
    Global $hGUI ; zum Abfragen der GUI
    #EndRegion GUI Setting variables
    
    
    #Region other variables
    Global $allgemein
    Global $vorwort
    Global $thema1
    Global $thema2
    Global $thema3
    Global $thema4
    Global $header_thema3_block1
    Global $thema3_unterpunkt1
    Global $thema3_unterpunkt2
    Global $thema3_unterpunkt3
    Global $header_thema3_block2
    Global $thema3_unterpunkt4
    Global $thema3_unterpunkt5
    Global $thema3_unterpunkt6
    Global $header_thema4_block1
    Global $thema3_unterpunkt1
    Global $thema4_unterpunkt1
    Global $thema4_unterpunkt2
    Global $iMax_x_Scroll = 419 ; Scrollbreite (wenn Wert kleiner als Fensterbreite, dann keine Scrollbar)
    Global $iMax_y_Scroll
    #EndRegion other variables
    
    
    _CreateWin()
    _writecontend()
    _CollectThemes()
    _ShowArray()
    _WaitForInput()
    
    
    
    
    Func _CreateWin()
    ; Fenster mit Scrollbalken, skalierbar
    	$hGUI = GUICreate("Test-Formular", 440, 600, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX), $WS_EX_ACCEPTFILES) ; Skalierbares Fenster + Drag and Drop
    	GUISetBkColor(0xeeeeee)
    	_GUIScrollbars_Generate($hGUI, $iMax_x_Scroll, $iMax_y_Scroll)	; Erzeuge Scrollbars mit GUIScrollbars_Ex.au3
    EndFunc   ;==>_CreateWin()
    
    
    
    
    Func _writecontend()
    	$allgemein=GUICtrlCreateCheckbox("Allgemein",10,30,365)
    	GUICtrlSetResizing($allgemein, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$vorwort=GUICtrlCreateCheckbox("Vorwort",10,50,365)
    	GUICtrlSetResizing($vorwort, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    
    
       	$header1= GUICtrlCreateGroup("Überschrift 3/4", 10, 230, 395,66)
    	GUICtrlSetResizing($header1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3=GUICtrlCreateRadio("Thema 3",28,246,365)
    	GUICtrlSetResizing($thema3, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema4=GUICtrlCreateRadio("Thema 4",28,266,365)
    	GUICtrlSetResizing($thema4, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$header_thema3_block1= GUICtrlCreateGroup("Überschrift Thema 3 Block 1", 10, 298, 395,88)
    	GUICtrlSetResizing($header_thema3_block1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt1=GUICtrlCreateRadio("Thema 3 Unterpunkt 1",28,314,365)
    	GUICtrlSetResizing($thema3_unterpunkt1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt2=GUICtrlCreateRadio("Thema 3 Unterpunkt 2",28,334,365)
    	GUICtrlSetResizing($thema3_unterpunkt2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt3=GUICtrlCreateRadio("Thema 3 Unterpunkt 3",28,354,365)
    	GUICtrlSetResizing($thema3_unterpunkt3, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$header_thema3_block2= GUICtrlCreateGroup("Überschrift Thema 3 Block 2", 10, 386, 395,88)
    	GUICtrlSetResizing($header_thema3_block2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt4=GUICtrlCreateRadio("Thema 3 Unterpunkt 4",28,402,365)
    	GUICtrlSetResizing($thema3_unterpunkt4, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt5=GUICtrlCreateRadio("Thema 3 Unterpunkt 5",28,422,365)
    	GUICtrlSetResizing($thema3_unterpunkt5, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema3_unterpunkt6=GUICtrlCreateRadio("Thema 3 Unterpunkt 6",28,442,365)
    	GUICtrlSetResizing($thema3_unterpunkt6, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$header_thema4_block1= GUICtrlCreateGroup("Überschrift Thema 4 Block 1", 10, 474, 395,66)
    	GUICtrlSetResizing($header_thema4_block1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema4_unterpunkt1=GUICtrlCreateRadio("Thema 4 Unterpunkt 1",28,490,365)
    	GUICtrlSetResizing($thema4_unterpunkt1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	$thema4_unterpunkt2=GUICtrlCreateRadio("Thema 4 Unterpunkt 2",28,510,365)
    	GUICtrlSetResizing($thema4_unterpunkt2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    
    
       	Global $idButtonMake = GUICtrlCreateButton("Gehe zum nächsten Programm", 10, 646, 230, 20)
    	GUICtrlSetResizing($idButtonMake, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
    	GUICtrlCreateGroup("", -99, -99, 1, 1)  ;close group
    	$iMax_y_Scroll = 626+ 30 ; Hoehe fuer Scrollbereich
    	_GUIScrollbars_Generate($hGUI, $iMax_x_Scroll, $iMax_y_Scroll)	; erneute Erzeugung Scrollbars mit angepasster Hoehe
    	GUISetState()
    
    
    EndFunc ;==> _writecontend()
    
    
    
    
    Func _CollectThemes()
    ; Erzeuge $atb_all mit allen verwendeten Themenpunkten
    	Global $atb_all[1]
    
    
    	_ArrayAdd($atb_all, $allgemein)
    	_ArrayAdd($atb_all, $vorwort)
    	_ArrayAdd($atb_all, $thema1)
    	_ArrayAdd($atb_all, $thema2)
    	_ArrayAdd($atb_all, $thema3)
    	_ArrayAdd($atb_all, $thema4)
    	_ArrayAdd($atb_all, $thema3_unterpunkt1)
    	_ArrayAdd($atb_all, $thema3_unterpunkt2)
    	_ArrayAdd($atb_all, $thema3_unterpunkt3)
    	_ArrayAdd($atb_all, $thema3_unterpunkt4)
    	_ArrayAdd($atb_all, $thema3_unterpunkt5)
    	_ArrayAdd($atb_all, $thema3_unterpunkt6)
    	_ArrayAdd($atb_all, $thema4_unterpunkt1)
    	_ArrayAdd($atb_all, $thema4_unterpunkt2)
    	; Ergebnis: alle Themenbereiche des Formulars sind in Array "$atb_all" enthalten
    EndFunc ; ==> _CollectThemes()
    
    
    Func _WaitForInput()
    	; Abfrage von Events
    
    
    	While 1
    		$nMsg = GUIGetMsg()
    		Switch $nMsg
    			Case $GUI_EVENT_CLOSE
    				Exit
    			Case $thema3
    				If GUICtrlRead($thema3) = $GUI_CHECKED Then
    				GUICtrlSetState($thema3_unterpunkt1, $GUI_ENABLE)
    				GUICtrlSetState($thema3_unterpunkt2, $GUI_ENABLE)
    				GUICtrlSetState($thema3_unterpunkt3, $GUI_ENABLE)
    				GUICtrlSetState($thema3_unterpunkt4, $GUI_ENABLE)
    				GUICtrlSetState($thema3_unterpunkt5, $GUI_ENABLE)
    				GUICtrlSetState($thema3_unterpunkt6, $GUI_ENABLE)
    				GUICtrlSetState($thema4_unterpunkt1, $GUI_DISABLE)
    				GUICtrlSetState($thema4_unterpunkt2, $GUI_DISABLE)
    				EndIf
    			Case $thema4
    				If GUICtrlRead($thema4) = $GUI_CHECKED Then
    				GUICtrlSetState($thema3_unterpunkt1, $GUI_DISABLE)
    				GUICtrlSetState($thema3_unterpunkt2, $GUI_DISABLE)
    				GUICtrlSetState($thema3_unterpunkt3, $GUI_DISABLE)
    				GUICtrlSetState($thema3_unterpunkt4, $GUI_DISABLE)
    				GUICtrlSetState($thema3_unterpunkt5, $GUI_DISABLE)
    				GUICtrlSetState($thema3_unterpunkt6, $GUI_DISABLE)
    				GUICtrlSetState($thema4_unterpunkt1, $GUI_ENABLE)
    				GUICtrlSetState($thema4_unterpunkt2, $GUI_ENABLE)
    				EndIf
    			Case $idButtonMake
    				; Formular auswerten und LAH starten
    				_askformular()
    				ExitLoop
    		EndSwitch
    	WEnd
    	Exit
    EndFunc   ;==>_WaitForInput()
    
    
    Func _ShowArray()
       ; dieses Unterprogramm dient nur der temporaeren Anzeige des Arrays
       _ArrayDisplay($atb_all, 'Zwischenstand: alle Check- und Radiobuttons' )
    EndFunc  ;====> _ShowArray()
    
    
    Func _AskFormular()
    
    
    ; Nicht angewaehlte Themenpunkte im Formular aussortieren und im Array "$atb_all" loeschen
    Local $i = 0
    ;MsgBox(4096, 'Ubound', Ubound($atb_all, 1)-1)
    
    
    ;~ 	While $i < Ubound($atb_all, 1)
    ;~ 		$i = $i + 1
    ;~ 		If GUICtrlRead($atb_all[$i]) <> 1 Then
    ;~ 			_ArrayDelete($atb_all, $i)
    ;~ 			$i = $i - 1 ; Zaehler um 1 verkleinern, weil eine Zeile geloescht wurde und nun alle folgenden Zeilen hochrutschen
    ;~ 		Endif
    ;~ 	WEnd
    	For $i = UBound($atb_all) - 1 To 0 Step -1
    		If Not BitAND(GUICtrlRead($atb_all[$i]), $GUI_CHECKED) Then
    			_ArrayDelete($atb_all, $i)
    		EndIf
    	Next
    _ArrayDisplay($atb_all, 'Nur aktivierte Boxen?' )
    	Local $aTmp[UBound($atb_all)]
    	For $i = 0 To UBound($atb_all) - 1
    		$aTmp[$i] = ControlGetText($hGUI, '', $atb_all[$i])
    	Next
    _ArrayDisplay($aTmp, 'Inhalt der aktivierten Boxen?' )
    EndFunc  ;====> _AskFormular()
    Alles anzeigen
  • Button Farbe Ändern wenn ein Prozess läuft

    • Oscar
    • 9. November 2016 um 18:28

    Wenn Du das flackern verhindern willst, dann benutze einfach eine zusätzliche Variable, um abzufragen, ob der Status bereits geändert wurde:

    AutoIt
    Global $iExistCheck = True
    While Sleep(10)
    	If ProcessExists("notepad.exe") Then
    		If Not $iExistCheck Then
    			$iExistCheck = True
    			GUICtrlSetData($wachen, "läuft")
    			GUICtrlSetBkColor($wachen, 0x00FF00)
    		EndIf
    	Else
    		If $iExistCheck Then
    			$iExistCheck = False
    			GUICtrlSetData($wachen, "läuft nicht")
    			GUICtrlSetBkColor($wachen, 0xFF0000)
    		EndIf
    	EndIf
    WEnd
    Alles anzeigen

    Dann brauchst Du den zusätzlichen Sekunden-Sleep nicht und kannst sogar den Sleep in der Endlosschleife verringern (falls da noch mehr passieren soll).

  • SQLite Datenbank wieder in exe integrieren?

    • Oscar
    • 5. November 2016 um 15:40

    Den Sinn dahinter verstehe ich auch nicht.
    Es ist doch, im Gegenteil, von Vorteil, wenn man Programm und Daten voneinander trennt.
    So kann man viel besser Backups der Daten machen, die dann auch nicht durch das Programm aufgebläht gespeichert werden müssen.
    Also entweder die Datenbank in ein Unterverzeichnis des Programmverzeichnisses (für eine mobile Version) oder in ein Verzeichnis im Anwendungsordner der Benutzers (für eine installierte Version).
    Abspeichern in die Programm-Exe würde ich auf keinen Fall empfehlen.

  • Dateipfad in .ini ablegen

    • Oscar
    • 3. November 2016 um 19:03

    Das lesen der Inidatei muss ja fehlschlagen.
    FileOpenDialog ändert (bei Erfolg) das @WorkingDir. Die Inidatei wird also im ausgewählten Verzeichnis gespeichert.
    Und da Du bei der Inidatei keinen Pfad angegeben hast, wird nur im @ScriptDir (bei Programmstart ist das das @WorkingDir) danach gesucht.
    Beim lesen/schreiben der Inidatei immer den ganzen Pfad angeben: IniRead(@ScriptDir & "\Setups.ini", ...)

  • Auslosung Script (Wichteln)

    • Oscar
    • 1. November 2016 um 19:20

    Das eigentlich programmiertechnisch Interessante war dabei, dass es nicht immer aufgeht, wenn man die Namen der Reihe nach zuweist. Jetzt (im Nachhinein) ist mir klar, warum. Aber erstmal wunderte ich mich.
    Wenn (in meinem Beispiel) für den letzten Namen (Hilde) nur noch Hilde im Auslosungs-"Topf" ist. Deshalb habe ich um das Ganze noch eine Repeat-Schleife gelegt, um in dem Fall eine neue Auslosung zu starten.
    Wenn man sich auch selbst "bewichteln" kann, dann ist die Lösung viel einfacher.
    Aber so hatte das Script für mich etwas Interessantes als Nebenprodukt gebracht.

  • Auslosung Script (Wichteln)

    • Oscar
    • 1. November 2016 um 18:20

    Dann kann es ja nicht schaden, wenn Du noch eine Lösung bekommst. :D
    Hier mal meine Variante:

    AutoIt
    #include <GUIConstantsEx.au3>
    Global $aWichtelnamen = ['Andreas', 'Barbara', 'Cornelia', 'Doris', 'Ernst', 'Fred', 'Gustav', 'Hilde']
    
    
    Global $iCount = UBound($aWichtelnamen), $aidWichtellabel[$iCount][2]
    
    
    Opt('GUIOnEventMode', 1)
    
    
    Global $hGui = GUICreate('Wichtelgenerator', 420, 70 + $iCount * 30)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    
    
    For $i = 0 To $iCount - 1
    	$aidWichtellabel[$i][0] = GUICtrlCreateLabel($aWichtelnamen[$i], 20, 20 + $i * 30, 160, 25)
    	GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')
    	GUICtrlSetBkColor(-1, 0xAAAAFF)
    	GUICtrlCreateLabel('->', 190, 20 + $i * 30, 160, 25)
    	GUICtrlSetFont(-1, 16, 800, 0, 'Courier New')
    	$aidWichtellabel[$i][1] = GUICtrlCreateLabel('', 235, 20 + $i * 30, 160, 25)
    	GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')
    	GUICtrlSetBkColor(-1, 0xFFDDAA)
    Next
    GUICtrlCreateButton('Wichteln', 150, 30 + $iCount * 30, 120, 25)
    GUICtrlSetOnEvent(-1, '_Wichteln')
    
    
    GUISetState(@SW_SHOW, $hGui)
    WinWaitClose($hGui)
    Exit
    
    
    Func _Wichteln()
    	Local $aTmp = $aWichtelnamen, $iRnd = 0, $iErr = 0, $iRepeat = 0
    	SRandom(@MSEC)
    	For $i = 0 To $iCount - 1
    		GUICtrlSetData($aidWichtellabel[$i][1], '')
    	Next
    	Do
    		$iRepeat = 0
    		For $i = 0 To $iCount - 1
    			$iErr = 0
    			While True
    				$iRnd = Random(0, $iCount - 1 - $i, 1)
    				If $aWichtelnamen[$i] <> $aTmp[$iRnd] Then ExitLoop
    				$iErr += 1
    				If $iErr > $iCount - $i Then
    					$iRepeat = 1
    					ExitLoop
    				EndIf
    			WEnd
    			GUICtrlSetData($aidWichtellabel[$i][1], $aTmp[$iRnd])
    			_Switch($aTmp[$iRnd], $aTmp[$iCount - 1 - $i])
    		Next
    	Until Not $iRepeat
    EndFunc   ;==>_Wichteln
    
    
    Func _Switch(ByRef $a, ByRef $b)
    	Local $c = $a
    	$a = $b
    	$b = $c
    EndFunc   ;==>_Switch
    
    
    Func _CloseGui()
    	GUIDelete($hGui)
    EndFunc   ;==>_CloseGui
    Alles anzeigen
  • Datei / Ordnerabfrage mit Icon (Button) anzeigen

    • Oscar
    • 28. Oktober 2016 um 15:49

    Das Problem tritt auf, weil Du nach den Einträgen (versehentlich) noch TABs eingefügt hast.
    Wenn die nicht wären, dann würde es funktionieren.
    Ich habe jetzt aber noch eine Überprüfung eingebaut. Es werden beim einlesen einfach alle TABs entfernt und danach werden erst die Daten ausgewertet.
    Außerdem gab es noch einen kleinen Bug beim ermitteln der installierten Programme. Die Zeile "$err = 0" musste in die For...Next-Schleife.
    Im Anhang findest Du die neue Version.

    Dateien

    InstallCheck_v11.zip 4,39 kB – 289 Downloads
  • Frage zu ListView-Handle: Warum geht es manchmal verloren?

    • Oscar
    • 25. Oktober 2016 um 19:25

    Es gibt in der Listview-UDF einige Funktionen, die nur mit dem Handle (richtig) funktionieren.
    Wenn Du dort die Control-ID (Rückgabe von GUICtrlCreateListView) übergibst, funktioniert es nicht oder nur fehlerhaft.
    Ich habe mir deshalb angewöhnt, beim benutzen von Funktionen aus der Listview-UDF diese immer mit dem Handle "GUICtrlGetHandle($idListview)" aufzurufen.

    Deshalb funktioniert auch Dein Beispiel mit dem Handle:

    AutoIt
    #include <GuiListView.au3>
    Example()
    
    
    Func Example()
    	Local $idListview
    
    
    	GUICreate("ListView Ensure Visible", 400, 400)
    	$idListview = GUICtrlCreateListView("Items", 2, 2, 394, 268)
    	$hListview = GUICtrlGetHandle($idListview)
    
    
    	$forward = GUICtrlCreateButton("Vorwärts", 10, 320, 100, 40)
    	$backward = GUICtrlCreateButton("Rückwärts", 120, 320, 100, 40)
    	_GUICtrlListView_SetColumnWidth($hListview, 0, 100)
    	_GUICtrlListView_SetExtendedListViewStyle($hListview, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    	GUISetState(@SW_SHOW)
    
    
    	_GUICtrlListView_BeginUpdate($hListview)
    	For $i = 1 To 200
    		GUICtrlCreateListViewItem("Item " & $i, $idListview)
    	Next
    	_GUICtrlListView_EndUpdate($hListview)
    
    
    	Local $sItems = "1|29|70|108|186" ; Die Items zu denen ich springen möchte
    
    
    	Local $iListposition = 1
    
    
    	Do
    		$msg = GUIGetMsg()
    		Select
    			Case $msg = $forward
    				$aItems = StringSplit($sItems, "|") ; $aItems[0] beeinhaltet die Anzahl der gefundenen Strings.
    				If $iListposition = $aItems[0] Then
    					$iListposition = 1
    				Else
    					$iListposition += 1
    				EndIf
    				ConsoleWrite($aItems[$iListposition] & @CRLF)
    				_GUICtrlListView_EnsureVisible($hListview, $aItems[$iListposition])
    			Case $msg = $backward
    				$aItems = StringSplit($sItems, "|")
    				If $iListposition = 1 Then
    					$iListposition = $aItems[0]
    				Else
    					$iListposition -= 1
    				EndIf
    				ConsoleWrite($aItems[$iListposition] & @CRLF)
    				_GUICtrlListView_EnsureVisible($hListview, $aItems[$iListposition])
    		EndSelect
    	Until $msg = -3
    EndFunc   ;==>Example
    Alles anzeigen
  • Neulich in der Kneipe..."Compiler sind die besseren Programmierer"?!

    • Oscar
    • 25. Oktober 2016 um 19:08
    Zitat von Yaerox

    Beispiel.: Keine Funktionen in Schleifen-Header verwenden wie z.B. UBound. Wenn wir uns das Ergebnis vorher in einer Variable speichern brauchen wir zwar mehr Speicher aber rufen dafür nicht in jedem Durchlauf die Funktion auf.

    Hmm...dafür sah ich bisher keine Notwendigkeit, weil ich davon ausgegangen bin, dass der Compiler/Interpreter sowas sowieso in einer Konstanten ablegt.
    Mal testen:

    AutoIt
    Global $a[100000]
    
    
    $iTimer = TimerInit()
    For $i = 0 To UBound($a) - 1
    Next
    ConsoleWrite('mit Ubound (ms):  ' & TimerDiff($iTimer) & @CRLF)
    
    
    $iTimer = TimerInit()
    $iCount = UBound($a) - 1
    For $i = 0 To $iCount
    Next
    ConsoleWrite('ohne Ubound (ms): ' & TimerDiff($iTimer) & @CRLF)
    Alles anzeigen


    Die Ergebnisse schwanken im zweiten Nachkommabereich:

    Code
    mit Ubound (ms):  2.84083678003
    ohne Ubound (ms): 2.83059689462309
    
    
    mit Ubound (ms):  2.86014627822588
    ohne Ubound (ms): 2.88238145796659


    Im Rahmen der Messgenauigkeit würde ich sagen: Unentschieden.
    Das bestätigt eher meine Theorie (Compiler-/Interpreterarbeit) von oben.

  • Autoit wartet ?

    • Oscar
    • 24. Oktober 2016 um 18:06

    Vorsicht mit Ini-Dateien!

    Zitat von Hilfe

    Only the first 32767 chars are read for legacy reasons.


    Und zu FileCopy: Ich kenne das auch nur als blockierend. Also, dass AutoIt auf das Ende des Kopiervorgangs wartet.
    Das war ja auch der Grund, warum ich _FileCopyEx (Link in Post#8 von Chip) geschrieben habe.

  • Datei / Ordnerabfrage mit Icon (Button) anzeigen

    • Oscar
    • 24. Oktober 2016 um 17:30
    Zitat von firewalldevil

    diese Eintrag wird nicht abgefragt, werden Leerstellen berücksichtigt?

    Es wird immer der ganze Pfad bis zum Zeilenende berücksichtigt.

    Kann es aber vielleicht sein, dass das der letzte Eintrag in der Datei ist und Du vergessen hast, nach der URL einen Zeilenumbruch zu setzen?
    Das Programm erwartet nämlich immer 5 Zeilen pro Eintrag und jede Zeile muss mit CRLF abgeschlossen sein!
    Also auch die letzte Zeile mit CRLF abschliessen.

  • Variable mit 30 Nachkommastellen, Variabel Type Objekt

    • Oscar
    • 22. Oktober 2016 um 17:19

    Schau mal hier: BigInteger UDF

  • Txt Datei

    • Oscar
    • 22. Oktober 2016 um 17:00
    Zitat von Andy

    Dieser Anfänger muss allerdings für jede Änderung an den "TargetFiles" den Quellcode ändern. Weniger schön...

    Das stimmt zwar, aber ich denke, um erstmal zu verstehen, wie man das Ganze per Array und For-Schleife bearbeiten kann, ist das direkt im Quelltext leichter ersichtlich.
    Wenn man das einmal verstanden hat, kann man dazu übergehen, das Ganze leichter konfigurierbar zu machen (sprich: Auslagerung in eine Ini-/Textdatei).

  • Txt Datei

    • Oscar
    • 22. Oktober 2016 um 10:53

    Hier mal ein Anfang als Script:

    AutoIt
    Global $aSourceFiles[2] = ["C:\Users\Silvi\Desktop\A\test.txt", "C:\Users\Silvi\Desktop\A\zwei.txt"]
    Global $aTargetFiles[2] = ["C:\Users\Silvi\Desktop\A\test2.txt", "C:\Users\Silvi\Desktop\A\zwei2.txt"]
    
    
    For $i = 0 To UBound($aSourceFiles) - 1
    	; ... Bearbeitung
    	_FileWriteFromArray($aTargetFiles[$i], $array, 1)
    Next
  • Txt Datei

    • Oscar
    • 22. Oktober 2016 um 09:58

    Arrays hast Du doch schon verstanden!
    Wenn Du jetzt noch ein Array für die Dateien einsetzt und das Ganze in einer For-Schleife abarbeitest, dann brauchst Du das nicht 10mal zu schreiben.
    Eine For-Schleife bearbeitet dann alle Dateien. Dann kannst Du auch 1000 oder 10000 Dateien damit bearbeiten.
    Versuch' Dich mal daran. Das ist ein gutes Anfänger-Projekt.

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™