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

Beiträge von BugFix

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 22. August 2014 um 17:27
    Zitat von Espyre

    Frage1: Wäre es möglich noch die Funktion Au3Check (Syntax Check), die es im ISN Studio gibt, mit einzubauen?

    Frage2: Gibt es die Möglichkeit ein Script mit Startparameter zu testen?


    Zu beiden Punkten: Ja.
    Hat mich auch gewundert, dass im AutoIt-Package das (aus meiner Sicht völlig überflüssige) Tidy implementiert wurde, aber kein SyntaxCheck. Tidy habe ich in meinen ganzen 8 AutoIt-Jahren bestimmt nicht öfter als 6-8 mal benutzt. Und das auch nur ganz am Anfang. ;)
    Mit der Definition der Startparameter kann man das genauso lösen, wie beim Wrapper - durch das Inputpanel.

    Ich lass mir das alles mal durch den Kopf gehen.

  • Iteratoren generieren

    • BugFix
    • 21. August 2014 um 18:26

    Ich habe mal etwas gespielt.
    Die neue Syntax erlaubt uns ja Funktionsaufrufe an eine Variable zu binden und diese dann als Parameter in Funktionen zu nutzen.
    Im Bsp. habe ich Generatoren für numerische (ganzzahlig) und A-Z (groß/klein) -Iteratoren erstellt.
    Bei jedem Aufruf des Iterators wird der nächste Wert aus dem generierten Zahlenbereich bzw. beim A-Z der Folgebuchstabe zurückgegeben. A-Z kann auch endlos ausgegeben werden, d.h. nach dem Z geht es wieder mit A los.
    In erster Linie wird man wohl numerische Iteratoren anwenden. Selbstverständlich kann man mit einer Schleife um einen Funktionsaufruf einen Iterator ersparen. Aber wenn man mehrere Schleifen schachteln muss, kann man sich auf diese Weise evtl. die eine oder andere sparen. Das trägt wiederum durchaus zu etwas mehr Übersicht im Skript bei.

    Das einzig störende an dieser Lösung: Ich kann nur eine Instanz eines Iterators generieren. Oder hat da jemand eine Idee, wie man die neuen Syntaxmöglichkeiten dafür verbiegen kann?

    Spoiler anzeigen
    [autoit]

    Func _IteratorNum($_start=Null, $_end=Null, $_create=0)
    Local Static $a[1], $index
    If $_create Then
    $index = -1
    Local $n = 0
    ReDim $a[$_end +1 -($_start)]
    For $i = $_start To $_end
    $a[$n] = $i
    $n += 1
    Next
    Return _IteratorNum
    Else
    $index += 1
    Return $index < UBound($a) ? $a[$index] : False
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    $iter = _IteratorNum(-10,5,1)
    For $i = 1 To 16
    ConsoleWrite($iter() & ' ')
    Next
    ConsoleWrite(@LF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _IteratorABC($_lower=Null, $_endless=Null, $_create=0)
    Local Static $a[26], $index, $continue = False
    If $_create Then
    $index = -1
    Local $n = 0, $x = $_lower ? 97 : 65
    For $i = $x To $x +25
    $a[$n] = Chr($i)
    $n += 1
    Next
    If $_endless Then $continue = True
    Return _IteratorABC
    Else
    If $continue Then
    $index = $index +1 < 26 ? $index +1 : 0
    Else
    $index += 1
    EndIf
    Return $index < 26 ? $a[$index] : False
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    $iterUpper = _IteratorABC(0,0,1)
    For $i = 1 To 27
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

    [/autoit] [autoit][/autoit] [autoit]

    $iterLower = _IteratorABC(1,0,1)
    For $i = 1 To 27
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

    [/autoit] [autoit][/autoit] [autoit]

    $iterUpperEndless = _IteratorABC(0,1,1)
    For $i = 1 To 40
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

    [/autoit]
  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 21. August 2014 um 12:43

    Dem Manne kann geholfen werden - erledigt. Habe auch den import für subprocess jetzt bei.
    Viel Spass damit.

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 21. August 2014 um 12:17

    Für Outfile habe ich keine extra Vorgabe. Hier ist ja jedes mal eine andere Ausgangsdatei (deren Name als exe vorgeschlagen wird). Oder hättest du gern einen Ausgangsordner, in den alle compilierten Dateien gespeichert werden?

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 21. August 2014 um 10:01

    Neue Version des Wrappers in Post #38.
    - Vorbelegung mit Individualwerten über "AutoIt.sublime-settings"
    - PlugIn an *.au3 gekoppelt

    @rynow: Ich nutze auch die portable Version. :wacko:

  • ID Programm zeigt Fehler bei Go

    • BugFix
    • 20. August 2014 um 12:06
    Zitat von Ghostleader

    @error: 1 besagt laut Hilfe = Pfad nicht gefunden oder ungültig


    Bzw. keine Dateien in diesem Pfad gefunden (denn laut gesetztem Flag möchtest du ja alle Dateien in diesem Ordner auflisten). Hast du dort wirklich Dateien in diesem Pfad?
    Habe noch nie erlebt, dass die Funktion dann fehlschlägt.

    Kann es sein, dass du auf der falschen Fährte bist und nicht Dateien eines Ordners auflisten willst, sondern eine Datei öffnen möchtest und den Inhalt im Array anzeigen willst? Dann brauchst du _FileReadToArray().

  • Listview sortieren nach anklicken einer Spalte

    • BugFix
    • 20. August 2014 um 10:19

    Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("ListView SimpleSort by Column Click", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    [/autoit] [autoit][/autoit] [autoit]

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    ;~ _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"), False) ; kein Toggle
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • ID Programm zeigt Fehler bei Go

    • BugFix
    • 20. August 2014 um 10:14

    InsertFunctionHeader.lua ist ein Tool von SciTE4AutoIt. Da hast du wohl den Aufruf für dieses Tool mit demselben Hotkey wie Run belegt?
    Auf jeden Fall hat das mit deinem Problem gar nichts zu tun.
    Nimm bitte ausschließlich folgenden Code in eine eigene Datei und führe dann sicherheitshalber über Menü:<Run> aus (nicht F5, falls da was hakt).

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    $List = _FileListToArray("E:\Datas ohne ID", "*", 1)
    ConsoleWrite('@error: ' & @error & @LF)

    [/autoit]

    Dann sind wir bei deinem Problem. Die Fehlerliste findest du in der Hilfe zu '_FileListToArray'.

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 19. August 2014 um 22:08

    So, ich habe jetzt mal zumindest soweit eine Lösung erstellt, dass Wrapper-Direktiven aus dem Skript gelesen und für das Kompilieren angewendet werden.
    Das heisst also, die Wrapperanweisungen müssen (vorerst) von Hand eingetragen werden. Ich überlege mir mal eine halbwegs praktikable Lösung, was schwerfällt ohne GUI. :whistling:
    Folgende Direktiven habe ich eingebaut:

    Code
    #AutoIt3Wrapper_OutFile=[kpl. Pfad zu neuer *.exe - neue (Unter)Ordner werden erstellt; ohne Angabe: aktuelle au3 als .exe]
    #AutoIt3Wrapper_Icon=[kpl. Pfad zur Icondatei; ohne Angabe Standard-AutoIt-Icon]
    #AutoIt3Wrapper_Compression=[0-4, ohne Angabe wird bei Verwendung von UPX der Wert 2 (normal) verwendet]
    #AutoIt3Wrapper_UseUpx=["y/n" - Standard ist "y"]
    #AutoIt3Wrapper_Change2CUI=["y/n" - Standard ist "n", Kompilieren als Gui-Anwendung]

    Edit:
    Ich habe jetzt so erweitert, dass für die erste Anwendung jede Direktive einzeln im Input Panel abgefragt wird und das Ergebnis dann in die Datei geschrieben wird. Bei späteren Änderungen kann man ja direkt in der Datei editieren.
    Dazu gibt es jetzt ein weiteres Kommando, hier mal auf "F12" gelegt:

    Aufrufen kann man das Kompilieren mit dem Befehl: "compile_au3", hier über "F7":

    Code
    [
        { "keys": ["f7"], "command": "compile_au3" },
        { "keys": ["f12"], "command": "wrapper_directives" }
    ]


    Anhang entpacken nach: "..Data\Packages\"
    Nach Neustart steht das PlugIn zur Verfügung.

    Edit 21.08.14:
    Jetzt habe ich noch hinzugefügt, dass die Vorbelegung für die Direktiven über die "AutoIt.sublime-settings" individuell eingestellt werden kann (key: "wrapper_defaults"). Dann braucht man nur noch per Enter durchzutackern und bedarfsweise ändern. ;)

    Code
    {
       ....
        "color_scheme": "Packages/AutoItScript/AutoIt.tmtheme",
        "extensions": ["au3"],
        "wrapper_defaults": {
            "out_path": "C:\\MY_DEFAULT\\EXE_PATH",
            "icon": "C:\\Users\\BugFix\\Pictures\\ICON\\SublimeText2.ico",
            "upx": "n",
            "compression": "2",
            "console": "n"
        }
    }
    Alles anzeigen


    Ausserdem habe ich die Aufrufe für Wrapper und Compile jetzt an *.au3 gekoppelt, das fehlte noch.

    Edit 23.08.2014:
    Neue Dateiversion mit Au3Check und Run mit Parameter(n) gibt es hier
    Der Anhang in diesem Post ist die alte Version.

    Dateien

    Wrapper_au3.zip 1,76 kB – 473 Downloads
  • Automatisches Auslesen von Inputbox

    • BugFix
    • 19. August 2014 um 15:24
    Zitat von MadCatz

    Allerdings versteh ich BugFix Funktion so, als dass diese String Eingabe bei 7 Zeichen in den Zwischenspeicher lädt und dann das Inputfeld ausgraut.

    Du kannst an der Stelle genausogut eine Funktion aufrufen. Ich habe den Style der Inputbox auf Disable gesetzt, damit weitere Eingaben nach Erreichen der geforderten Länge nicht möglich sind. ;)

  • Automatisches Auslesen von Inputbox

    • BugFix
    • 19. August 2014 um 12:25

    Man sollte das auslagern und die Änderung im Inputfeld überwachen.
    Bsp.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate('Test')
    $input = GUICtrlCreateInput('', 10,10,150,20)
    $hIn = GUICtrlGetHandle($input)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GuiRegisterMsg($WM_COMMAND, 'WM_COMMAND')

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    $hWndFrom = $ilParam
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hIn
    Switch $iCode
    Case $EN_CHANGE ; Sent when the user has taken an action that may have altered text in an edit control
    Select
    Case StringLen(GUICtrlRead($input)) = 7
    GUICtrlSetStyle($input, $ES_READONLY)
    ConsoleWrite('7 Zeichen eingegeben' & @LF)
    EndSelect
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • ID Programm zeigt Fehler bei Go

    • BugFix
    • 19. August 2014 um 11:37

    Der Fehler besagt, dass kein Array erstellt werden konnte (Dateipfad falsch oder Datei ohne Inhalt..). Frage mal nach $List = _FileListToArray("E:\Datas ohne ID", "*", 1) den @error ab, dann bekommst du genauere Infos.

  • aus SciTE im Explorer Ordner öffnen

    • BugFix
    • 18. August 2014 um 18:56
    Zitat von Andy

    Und der Unterschied ist?


    :wacko: Willst du mich heute veräppeln? FOD erwartet eine Auswahl durch den User und gibt diese zurück. Explorer dümpelt vor sich hin, ohne jede Erwartung. ;)

  • aus SciTE im Explorer Ordner öffnen

    • BugFix
    • 18. August 2014 um 18:28

    Ja,
    1.
    Um einen direkten Aufruf aus SciTE starten zu können brauchst du die shell.dll. Damit kannst du das realisieren. Ich habe sie angehängt.
    Ein bischen Lua-Code und es geht los. ;) - Wenn du selbst nicht klarkommst, melde dich nochmal.
    2.
    Alternativ sollte es auch mit einem AutoIt-Skript realisierbar sein. Dazu das SciTE-Interface verwenden um die aktuelle Datei abfragen zu können.

    Andy: Das ist dann aber ur der FileOpenDialog. Ich habe es so verstanden, dass der Explorer geöffnet werden soll.

    Edit:
    Hier die AutoIt-Variante

    [autoit]

    #include "SciTE_Interface.au3"

    [/autoit][autoit][/autoit][autoit]

    $sFile = _GetCurrentFile()
    $sDir = StringLeft($sFile, StringInStr($sFile, '\', 0, -1) -1)
    ShellExecute($sDir)

    [/autoit]

    Dateien

    shell.zip 38,44 kB – 283 Downloads
  • gelöst: INet-Geschwindigkeitsnachweis

    • BugFix
    • 18. August 2014 um 17:00

    Falls du eine Fritz-Box hast, dort findest du alle Angaben zur Verbindung. Ein interessanter Wert ist die Dämpfung. Von diesem Wert ist der max. Datendurchsatz abhängig und somit kann dir dein Provider hier sofort sagen, dass unabhängig vom Vertrag nur eine Leistung XY möglich ist. Das ist dann leitungstechnisch bedingt und vom Provider auch nicht beeinflussbar. Im Normalfall bekommst du dann aber einen Abschlag auf deine monatl. Gebühr weil die Leistung nicht erbracht werden kann. (Ich zahle pro Monat deshalb 5€ weniger)

  • Listview sortieren nach zweiter Spalte

    • BugFix
    • 17. August 2014 um 18:51
    Zitat von Tweaky

    Hm,
    theoretisch klar, aber kannst du mal ein Bsp zeigen wie man dann die Sortierrichtung von mehreren Spalten angibt?
    Und wenn man im Parameter 2 bereits die Richtung je Spalte angegeben hat, warum muss man dann noch im Parameter 3 eine Spalte angeben?
    Sorry aber steh gerade auf dem Schlauch


    Die Sortierrichtung gibtst du vor, wenn du z.B. bei Sortierung nach erster Spalte (Index 0) aufwärts sortieren willst, bei Sortierung nach zweiter Spalte (Index 1) abwärts sortieren willst. Gibst du dann den Sortierbefehl mit Angabe der jeweiligen Spalte, wird die vordefinierte Sortierrichtung für die Spalte verwendet. Wenn du nicht togglest, ist die Sortierrichtung ja fix. Und über die vordefinierte Richtung kannst du das in jeder Spalte einzeln definieren.

    Hier wird bei Spaltenklick die vordefinierte Sortierrichtung aktiv:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("ListView SimpleSort by Column Click", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[3] = [True,True,False] ; ==> ab,ab,auf

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    [/autoit] [autoit][/autoit] [autoit]

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"), False) ; kein Toggle
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Listview sortieren nach zweiter Spalte

    • BugFix
    • 17. August 2014 um 14:41
    Zitat von Tweaky

    Hi BugFix,
    für was ist genau

    [autoit]

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]

    [/autoit]


    Ist bei mehrspaltigen ListViews der Parameter 2 und 3 eigentlich das gleiche :?:

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)] erzeugt ein Array mit der Anzahl der Spalten. In diesem kann man noch separat für jede Spalte die Sortierrichtung angeben. (Für dieses Bsp. könnte man ebensogut eine Boolsche Variable übergeben)
    Insofern klärt sich auch deine zweite Frage: Parameter 2 und 3 unterscheiden sich deutlich. Parameter 3 gibt an welche Spalte sortiert werden soll. In meinem Bsp. habe ich für die Spalten keine extra Sortierrichtung vorgegeben, da Standard aufsteigend ist. Ein erneuter Aufruf würde, da Parameter 4 nicht extra gesetzt ist, die Sortierrichtung umkehren (Toggle: True/False)

  • Listview sortieren nach zweiter Spalte

    • BugFix
    • 17. August 2014 um 12:48

    Bsp.:

    Spoiler anzeigen
    [autoit]


    #include <ListViewConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("ListView SimpleSort", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
    _GUICtrlListView_SimpleSort($hListView, $B_DESCENDING, 2) ; 3ter Parameter ist Spalten-Index, Nullbasiert

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]
  • Tool hängt sich auf - aber wo?

    • BugFix
    • 15. August 2014 um 10:09
    Zitat von traumhaeftling

    btw weiß jemand wie ich ermitteln kann wo und wann mein Programm sich aufgehängt hat?


    Wenn du gar keinen Ansatz hast, wo der Abbruch erfolgen könnte, hilft nur das Ergebnis jeden Funktionsaufrufes zu loggen. Wichtig, auch wenn es das Skript in dem Moment langsam macht, die Logfunktion muss das Logfile nach jedem Schreibvorgang schliessen, also kein Handle auf geöffnetes Logfile übergeben, sondern den direkten Pfad. Sonst läufst du Gefahr, dass nicht alles im Log landet.
    Im Skript wertest du dann @error aus. Wenn du eigene Funktionen hast, sollten die im Fehlerfall einen Error setzen.
    Bsp.

    [autoit]

    GUICreate()
    _FileWriteLog($LogPath, 'GuiCreate: ' & @error)

    [/autoit]

    Bricht das Skript wegen eines Fehlers ab, wird dieser ja nicht mehr in das Log geschrieben, aber anhand des letzten Eintrages siehst du, was davor noch funktionierte. Der Folgebefehl erbringt dann den Absturz. ;)

    Unkompiliert kannst du in SciTE Traceline benutzen, das loggt jede Zeile in die Konsole.

  • Install-Tool "Jetzt Installieren"-Button? Achtung, neuling.

    • BugFix
    • 14. August 2014 um 14:02

    1. Entweder wird OnEvent-Mode ODER GuiGetMsg verwendet, niemals beides gemeinsam.
    2. Du fragst die Betätigung der Checkboxen ab, somit startet die Installation sofort. Die Events der Checkboxen brauchst du überhaupt nicht, Dein Install-Button muss die Abfrage tätigen.
    Hier mal ein simples Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate('Test')
    $cCheck1 = GUICtrlCreateCheckbox('A', 10, 10, 40)
    $cCheck2 = GUICtrlCreateCheckbox('B', 10, 40, 40)
    $cCheck3 = GUICtrlCreateCheckbox('C', 10, 70, 40)
    $cCheck4 = GUICtrlCreateCheckbox('D', 10, 100, 40)
    $cRun = GUICtrlCreateButton('Install', 250, 10, 80)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $cRun
    _InstallChecked()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _InstallChecked()
    If BitAND(GUICtrlRead($cCheck1), $GUI_CHECKED) Then
    ConsoleWrite('Install A' & @LF)
    ; Installcode
    EndIf
    If BitAND(GUICtrlRead($cCheck2), $GUI_CHECKED) Then
    ConsoleWrite('Install B' & @LF)
    ; Installcode
    EndIf
    If BitAND(GUICtrlRead($cCheck3), $GUI_CHECKED) Then
    ConsoleWrite('Install C' & @LF)
    ; Installcode
    EndIf
    If BitAND(GUICtrlRead($cCheck4), $GUI_CHECKED) Then
    ConsoleWrite('Install D' & @LF)
    ; Installcode
    EndIf
    EndFunc

    [/autoit]


    Edit: Und wenn es viele Checkboxen sein sollen, sind Arrays eine feine Sache :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; == Array mit [Checkbox-ID,Checkbox-Text,aufzurufende Funktion]
    Global $aInstall[10][3] = [ _
    [0,'A','_Func_A'], _
    [0,'B','_Func_B'], _
    [0,'C','_Func_C'], _
    [0,'D','_Func_D'], _
    [0,'E','_Func_E'], _
    [0,'F','_Func_F'], _
    [0,'G','_Func_G'], _
    [0,'H','_Func_H'], _
    [0,'I','_Func_I'], _
    [0,'J','_Func_J']]

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate('Test')

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 9
    $aInstall[$i][0] = GUICtrlCreateCheckbox($aInstall[$i][1], 10, 10+$i*30)
    Next
    $cRun = GUICtrlCreateButton('Install', 250, 10, 80)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $cRun
    _InstallChecked()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _InstallChecked()
    For $i = 0 To 9
    If BitAND(GUICtrlRead($aInstall[$i][0]), $GUI_CHECKED) Then
    Call($aInstall[$i][2])
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_A()
    ConsoleWrite('Install A' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_B()
    ConsoleWrite('Install B' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_C()
    ConsoleWrite('Install C' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_D()
    ConsoleWrite('Install D' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_E()
    ConsoleWrite('Install E' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_F()
    ConsoleWrite('Install F' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_G()
    ConsoleWrite('Install G' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_H()
    ConsoleWrite('Install H' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_I()
    ConsoleWrite('Install I' & @LF)
    ; Installationscode
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func_J()
    ConsoleWrite('Install J' & @LF)
    ; Installationscode
    EndFunc

    [/autoit]

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™