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

  • Ereignisse von dynamisch erzeugten Gui-Elementen verarbeiten

    • BugFix
    • 28. Juli 2010 um 19:57

    Hier ein altes Bsp. von mir:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $arRadio[10], $str

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

    $gui = GUICreate('test', 500, 400)
    GUICtrlCreateGroup('', 10, 10, 400, 60)
    $arRadio[0] = GUICtrlCreateRadio('Radio 1', 20, 20, 70)
    $arRadio[1] = GUICtrlCreateRadio('Radio 2', 20, 45, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 80, 400, 60)
    $arRadio[2] = GUICtrlCreateRadio('Radio 3', 20, 90, 70)
    $arRadio[3] = GUICtrlCreateRadio('Radio 4', 20, 115, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 150, 400, 60)
    $arRadio[4] = GUICtrlCreateRadio('Radio 5', 20, 160, 70)
    $arRadio[5] = GUICtrlCreateRadio('Radio 6', 20, 185, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 220, 400, 60)
    $arRadio[6] = GUICtrlCreateRadio('Radio 7', 20, 230, 70)
    $arRadio[7] = GUICtrlCreateRadio('Radio 8', 20, 255, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 290, 400, 60)
    $arRadio[8] = GUICtrlCreateRadio('Radio 9', 20, 300, 70)
    $arRadio[9] = GUICtrlCreateRadio('Radio 10', 20, 325, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    For $i = 0 To UBound($arRadio) -2 Step 2
    GUICtrlSetState($arRadio[$i], $GUI_CHECKED)
    Next
    $bCheck = GUICtrlCreateButton('Check', 10, 370, 60, 20)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    If $msg = $bCheck Then
    $str = ''
    For $i = 0 To UBound($arRadio) -1
    If BitAND(GUICtrlRead($arRadio[$i]), $GUI_CHECKED) Then
    $str &= ControlGetText("", "", $arRadio[$i]) & @LF
    EndIf
    Next
    MsgBox(0, '', 'Markiert sind: ' & @LF & $str )
    EndIf
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Edit:
    Hatte mich vertan, du wolltest ja Checkboxen - dann dieses:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Global $gui, $aCB[10]
    Local $y = 20

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

    $gui = GUICreate('Test')
    GUISetOnEvent(-3, '_ende')
    GUICtrlCreateGroup('', 10, 5, 100, 220)
    For $i = 0 To UBound($aCB) -1
    $aCB[$i] = GUICtrlCreateCheckbox('CheckBox '&$i+1, 20, $y, 70)
    GUICtrlSetOnEvent(-1, '_CBClick')
    $y += 20
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    Func _CBClick()
    For $i = 0 To UBound($aCB) -1
    If @GUI_CtrlId = $aCB[$i] Then
    If BitAND(GUICtrlRead($aCB[$i]), $GUI_CHECKED) Then
    MsgBox(0, ControlGetText($gui, '', $aCB[$i]), 'CB Checked')
    Else
    MsgBox(0, ControlGetText($gui, '', $aCB[$i]), 'CB Not Checked')
    EndIf
    ExitLoop
    EndIf
    Next
    EndFunc

    [/autoit]
  • Inputfeld mit SetLimit - automatisch ins nächste Feld springen

    • BugFix
    • 28. Juli 2010 um 19:44

    Hier mal ein simples Bsp., wenn das letzte Input erreicht ist springt der Fokus wieder zum ersten (kannst du natürlich auch anders handeln).

    Spoiler anzeigen
    [autoit]

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

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

    Enum $In1, $In2, $In3, $In4, $In5, $In6, $iAnzahl
    Global $a[$iAnzahl]

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

    $gui = GUICreate('Test')
    $a[$In1] = GUICtrlCreateInput('', 10, 10, 40, 20)
    $a[$In2] = GUICtrlCreateInput('', 60, 10, 40, 20)
    $a[$In3] = GUICtrlCreateInput('', 110, 10, 40, 20)
    $a[$In4] = GUICtrlCreateInput('', 10, 40, 40, 20)
    $a[$In5] = GUICtrlCreateInput('', 60, 40, 40, 20)
    $a[$In6] = GUICtrlCreateInput('', 110, 40, 40, 20)

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

    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Do
    Until GUIGetMsg() = -3

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF)
    $iCode = BitShift($iwParam, 16)
    For $i = 0 To UBound($a) -1
    If $hWndFrom = GUICtrlGetHandle($a[$i]) Then
    Switch $iCode
    Case $EN_CHANGE ; Sent when the user has taken an action that may have altered text in an edit control
    If StringLen(GUICtrlRead($a[$i])) = 2 Then
    If $i < UBound($a) -1 Then
    GUICtrlSetState($a[$i+1], $GUI_FOCUS)
    Else
    GUICtrlSetState($a[0], $GUI_FOCUS)
    EndIf
    EndIf
    EndSwitch
    EndIf
    Next
    Return 0
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Filecopy () abbrechen

    • BugFix
    • 28. Juli 2010 um 14:51

    Füge zwischen den Paketen eine Pause ein (aber mit TimerInit, nicht Sleep!). Verwende z.B. eine Variable $Continue = False, mit Beginn des Kopierens auf True setzen, vor jedem neuen Paket abfragen ob True. Dann kannst du mit Button od. Hotkey den Wert bei Bedarf auf False setzen.

  • Timer Restwert ermitteln

    • BugFix
    • 28. Juli 2010 um 13:36

    Guck mal, das habe ich mal in einem CountDown verwendet:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    HotKeySet('!e', '_ende') ; Alt+e zum Beenden

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

    Local $t, $diff, $message, $sShutDownTime = '2010/07/30 13:30:00'

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

    $t = TimerInit()
    While True
    If TimerDiff($t) >= 1000 Then
    $diff = _DateDiff('s', _NowCalc(), $sShutDownTime)
    Select
    Case $diff < 60
    ToolTip(StringFormat('%02u', $diff) & ' s')
    Case $diff < 60*60
    $message = StringFormat('%02u', Floor($diff/60)) & ':' & _
    StringFormat('%02u', Mod($diff,60)) & ' min'
    ToolTip($message)
    Case $diff < 60*60*24
    $message = StringFormat('%02u', Floor($diff/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($diff,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($diff,3600),60)) & ' h'
    ToolTip($message)
    Case Else
    $message = Floor($diff/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($diff,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($diff,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($diff,86400),3600),60)) & ' h'
    ToolTip($message)
    EndSelect
    $t = TimerInit()
    EndIf
    WEnd

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

    Func _ende()
    Exit
    EndFunc

    [/autoit]
  • Love Parade

    • BugFix
    • 27. Juli 2010 um 09:23

    Ich denke Andy hat es auf den Punkt gebracht. Es ist immer so schön einfach auf irgendwen mit Fingern zu zeigen anstatt sich an die eigene Nase zu fassen. Über Sinn oder Unsinn dieser Veranstaltung an sich mag man ja geteilter Meinung sein, aber wenn Ordnungskräfte Anweisungen geben, sind die halt zu befolgen.
    Leider trifft es oft Unschuldige. Wenn es jene, die sich über alles hinwegsetzten erwischt haben sollte, so würde ich denen nicht eine Träne nachweinen. Den anderen gehört mein MItgefühl.

  • Rahmen beim Markieren auf einer autoitgui

    • BugFix
    • 26. Juli 2010 um 21:08

    Also du willst:
    - auf einer von dir erstellten GUI
    - mit der Maus
    - an beliebiger Stelle
    - einen Rahmen aufziehen

    OK, das geht (einfach mal ein ScreenCapture-Skript anschauen, da findest du das) - aber was willst du damit dann tun?

  • Rahmen beim Markieren auf einer autoitgui

    • BugFix
    • 26. Juli 2010 um 21:01

    Leider ist deine Fragestellung absolut unklar.
    WAS willst du WO markieren? Ohne das zu wissen, kann man deine Frage nicht beantworten.

  • Skript versteckt starten

    • BugFix
    • 26. Juli 2010 um 20:23

    Was verstehst du denn unter 'versteckt starten' ?
    Was du anführst bezieht sich nur auf die Sichtbarkeit der GUI. Das Skript selbst ist als Prozeß sichtbar (und das ist auch gut so).

  • ListView GruppenFarbwahl

    • BugFix
    • 26. Juli 2010 um 10:51
    Zitat von Inferior

    das man mit_GUICtrlListView_Create flexibler ist..


    Das Funktionspaket ist schon recht umfangreich - aber die Funktion: _GUICtrlListView_Create verwende ich nie. Ich habe auch bisher noch nie die Notwendigkeit dafür gesehen. Du benötigst, um alle Funcs der UDF nutzen zu können, das ListView-Handle (auch wenn viele, wie du in den Hilfe-Bsp. siehst, mit der ID funktionieren). _GUICtrlListView_Create gibt dir das Handle direkt zurück. Ich erstelle LV immer mit $ID = GUICtrlCreateListView und lasse mir dann das Handle ausgeben ( $hWnd = GUICtrlGetHandle($ID) ). Somit kann ich wahlweise auf die nativen LV-Funcs oder die der UDF zugreifen.
    Wenn ich dich richtig verstanden habe, möchtest du mehrere Gruppen erstellen ( _GUICtrlListView_InsertGroup ) und jede Gruppe andersfarbig darstellen. Ich teste mal, ob es einen 'einfachen' Weg dafür gibt und werde das dann hier posten.

    Edit:
    Hier habe ich eine einfache Lösung dafür erstellt:

    Spoiler anzeigen
    [autoit]


    ; Bsp: ListView Gruppen - je Gruppe einheitlich enfärben by BugFix
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $ID_LV, $hLV, $aItem[3], $aGroupColor[2][2], $enumGroup = 0
    ; Group 1
    $aGroupColor[0][0] = '0' ; $a[n][0]=ItemIndex(e) als String mit Leerzeichen übergeben '0 1'
    $aGroupColor[0][1] = 0xFFFF00 ; $a[n][1]=GroupColor
    ; Group 2
    $aGroupColor[1][0] = '1 2'
    $aGroupColor[1][1] = 0xFF00FF

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

    GUICreate("ListView Insert Group", 400, 300)
    $ID_LV = GUICtrlCreateListView("Column 1|Column 2|Column 3", 2, 2, 394, 268)
    $hLV = GUICtrlGetHandle($ID_LV)

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

    ; set Column width
    GUICtrlSendMsg($ID_LV, 0x101E, 0, 100)
    GUICtrlSendMsg($ID_LV, 0x101E, 1, 100)
    GUICtrlSendMsg($ID_LV, 0x101E, 2, 100)

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

    ; Add items
    $aItem[0] = GUICtrlCreateListViewItem("Row 1: Col 1|Row 1: Col 2|Row 1: Col 3", $ID_LV)
    $aItem[1] = GUICtrlCreateListViewItem("Row 2: Col 1|Row 2: Col 2", $ID_LV)
    $aItem[2] = GUICtrlCreateListViewItem("Row 3: Col 1", $ID_LV)

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

    ; set Color
    For $i = 0 To UBound($aItem) -1
    If Not StringInStr($aGroupColor[$enumGroup][0], $i) Then $enumGroup += 1
    GUICtrlSetBkColor($aItem[$i], $aGroupColor[$enumGroup][1])
    Next

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

    ; Build groups
    _GUICtrlListView_EnableGroupView($hLV)
    _GUICtrlListView_InsertGroup($hLV, -1, 1, "Group 1")
    _GUICtrlListView_InsertGroup($hLV, -1, 2, "Group 2")
    _GUICtrlListView_SetItemGroupID($hLV, 0, 1)
    _GUICtrlListView_SetItemGroupID($hLV, 1, 2)
    _GUICtrlListView_SetItemGroupID($hLV, 2, 2)

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

    GUISetState()

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]
  • 3D-Array: _ArraySearch macht nicht mehr mit [Abgeändert]

    • BugFix
    • 25. Juli 2010 um 13:29

    _ArrayDiaplay kann nur bis 2D-Array anzeigen.

  • Objekt: SortedList

    • BugFix
    • 24. Juli 2010 um 22:32

    Ich habe mal ein weiteres Objekt nach AutoIt portiert - das Objekt 'System.Collections.SortedList'.
    In diesem Objekt werden Schlüssel-Wert-Paare automatisch (nach Schlüssel) sortiert. Schlüssel sind eineindeutig und können somit nur einmal vorkommen. Die Unterscheidung ist sensitiv ('auto' <> 'Auto').
    Die Funktionen erlauben einen Zugriff mittels Schlüssel oder Index. Ich würde empfehlen die Schlüssel-basierten Funktionen vorrangig zu nutzen, denn jede Änderung an der Liste ändert auch automatisch die Indexwerte.
    Die Löschfunktionen erlauben optional, nicht genutzten Speicher freizugeben. So, wie wir ReDim zur dynamischen Arrayanpassung nutzen, wird zur Laufzeit die SortedList automatisch vergrößert (mehr Speicherplatz reserviert) wenn neu hinzukommende Elemente diesen benötigen. Wenn ich also Werte lösche aber auch wieder neue hinzufüge, macht es keinen Sinn den Speicherplatz auf die tatsächliche Listengröße zu trimmen. Deshalb ist diese Option standardmäßig auf 'False' gesetzt.
    Ich habe neben der Umsetzung der überwiegenden Anzahl der existierenden Methoden zusätzlich Funktionen erstellt zum Schreiben/Lesen in/aus INI/Datei.

    Funktionsübersicht

    _ObjSortedList_Create
    Erstellt eine leere SortedList.

    _ObjSortedList_ReadFromIni
    Liest die Schlüssel-Wert-Paare aus einer INI-Sektion, erstellt eine SortedList und befüllt sie damit.
    Optional kann eine leere SortedList zum Befüllen übergeben werden.

    _ObjSortedList_WriteToIni
    Schreibt die Schlüssel-Wert-Paare einer SortedList in eine INI-Sektion.

    _ObjSortedList_ReadFromFile
    Liest die Schlüssel-Wert-Paare aus einer Text-Datei der Zeilenstruktur: SCHLÜSSEL DELIMITER WERT @CRLF
    in eine zu erstellende/bereits existierende leere SortedList.

    _ObjSortedList_WriteToFile
    Schreibt die Schlüssel-Wert-Paare einer SortedList in eine Text-Datei (Zeilenstruktur s.o.).
    Die Werte können wahlweise überschrieben oder angehängt werden.

    _ObjSortedList_AddPair
    Fügt einer SortedList ein Schlüssel-Wert-Paar hinzu.

    _ObjSortedList_AddArray
    Fügt ein Array (oder Teile davon) einer SortedList hinzu. (Array[n][0]=Key, Array[n][1]=Value)

    _ObjSortedList_Count
    Gibt die Anzahl Schlüssel-Wert-Paare einer SortedList zurück.

    _ObjSortedList_Clear
    Löscht alle Schlüssel-Wert-Paare einer SortedList. Optional kann der Speicher freigegeben werden.

    _ObjSortedList_RemoveByKey
    Löscht ein Schlüssel-Wert-Paare einer SortedList nach Schlüssel. Optional kann der Speicher freigegeben werden.

    _ObjSortedList_RemoveByIndex
    Löscht ein Schlüssel-Wert-Paare einer SortedList nach Index. Optional kann der Speicher freigegeben werden.

    _ObjSortedList_Clone
    Erzeugt eine Kopie der SortedList.

    _ObjSortedList_ContainsKey
    Prüft ob die SortedList einen bestimmten Schlüssel enthält.

    _ObjSortedList_ContainsVal
    Prüft ob die SortedList einen bestimmten Wert enthält.

    _ObjSortedList_SetValByKey
    Ändert den Wert eines Schlüssels mit dem Schlüsselnamen.

    _ObjSortedList_SetValByIndex
    Ändert den Wert eines Schlüssels mit dem Index.

    _ObjSortedList_RenameKeyByName
    Ändert den Namen eines Schlüssels mit dem Schlüsselnamen.

    _ObjSortedList_RenameKeyByIndex
    Ändert den Namen eines Schlüssels mit dem Index.

    _ObjSortedList_AsArray
    Gibt die SortedList als 2D-Array zurück.

    _ObjSortedList_GetIndexOfKey
    Gibt den Index eines Schlüssels zurück.

    _ObjSortedList_GetKeyByIndex
    Gibt den Schlüsselnamen für einen Index zurück.

    _ObjSortedList_GetKeyByVal
    Gibt ein 2D-Array mit allen Vorkommen eines Wertes zurück.
    Array[0][0]=Anzahl Vorkommen, Array[n][0]=Index, Array[n][1]=Schlüssel.

    _ObjSortedList_GetValByIndex
    Gibt den Wert für einen Index zurück.

    _ObjSortedList_GetValByKey
    Gibt den Wert für einen Schlüsselnamen zurück.

    Code Funktionen
    [autoit]

    ;===============================================================================
    ; Function Name: _ObjSortedList_Create()
    ; Description: Erstellt eine leere SortedList.
    ; Return Value(s):
    ; Erfolg: Ein leeres SortedList-Objekt
    ; Fehler: -1 @error Objekt konnte nicht erstellt werden
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_Create()
    Local $oSL = ObjCreate('System.Collections.SortedList')
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    Return $oSL
    EndFunc ;==>_ObjSortedList_Create

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_ReadFromIni($sPATH_INI, $sSECTION, $oSL = 0)
    ; Description: Liest die Schlüssel-Wert-Paare aus einer INI-Sektion, erstellt eine SortedList und befüllt sie damit.
    ; Optional kann eine leere SortedList zum Befüllen übergeben werden.
    ; Parameter(s): $sPATH_INI Pfad zur INI
    ; $sSECTION Sektionsname
    ; $oSL 0 (Standard) erstellt eine neue Liste, sonst wird in die übergebene (leere) Liste eingetragen.
    ; Return Value(s):
    ; Erfolg: Ein mit den INI-Werten befülltes SortedList-Objekt
    ; Fehler: -1 @error 1 INI existiert nicht
    ; 2 Fehler beim Erstellen der Liste
    ; 3 Sektion existiert nicht
    ; $oSL @error 4 doppelte Schlüssel in INI, nur erstmaliges Auftreten verwendet
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_ReadFromIni($sPATH_INI, $sSECTION, $oSL = 0)
    If Not FileExists($sPATH_INI) Then Return SetError(1, 0, -1)
    If $oSL = 0 Then
    $oSL = _ObjSortedList_Create()
    If @error Then Return SetError(2, 0, -1)
    EndIf
    Local $aINI = IniReadSection($sPATH_INI, $sSECTION)
    If @error Then Return SetError(3, 0, -1)
    Local $ret = _ObjSortedList_AddArray($oSL, $aINI, 1)
    If @error Then Return SetError(4, 0, $oSL)
    Return $oSL
    EndFunc ;==>_ObjSortedList_ReadFromIni

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_WriteToIni($oSL, $sPATH_INI, $sSECTION)
    ; Description: Schreibt die Schlüssel-Wert-Paare einer SortedList in eine INI-Sektion.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $sPATH_INI Pfad zur INI
    ; $sSECTION Sektionsname
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 Fehler beim Lesen der Liste
    ; 2 Fehler beim Schreiben in die INI
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_WriteToIni(ByRef $oSL, $sPATH_INI, $sSECTION)
    Local $aToWrite = _ObjSortedList_AsArray($oSL)
    If @error Then Return SetError(1, 0, -1)
    IniWriteSection($sPATH_INI, $sSECTION, $aToWrite)
    If @error Then Return SetError(2, 0, -1)
    Return 1
    EndFunc ;==>_ObjSortedList_WriteToIni

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_ReadFromFile($sPATH_FILE, $sDELIM = Default, $oSL = 0)
    ; Description: Liest die Schlüssel-Wert-Paare aus einer Text-Datei der Zeilenstruktur: SCHLÜSSEL DELIMITER WERT @CRLF
    ; in eine zu erstellende/bereits existierende leere SortedList.
    ; Parameter(s): $sPATH_FILE Pfad zur Datei
    ; $sDELIM Trennzeichen zw. Schlüssel u. Wert ('Default' verwendet Opt('GUIDataSeparatorChar') )
    ; $oSL 0 (Standard) erstellt eine neue Liste, sonst wird in die übergebene (leere) Liste eingetragen.
    ; Return Value(s):
    ; Erfolg: Ein mit den Datei-Werten befülltes SortedList-Objekt
    ; Fehler: -1 @error 1 Dateipfad existiert nicht
    ; 2 Fehler beim Erstellen der Liste
    ; 3 Datei enthält keine Schlüssel-Wert-Paare
    ; $oSL @error 4 doppelte Schlüssel in Datei, nur erstmaliges Auftreten verwendet
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_ReadFromFile($sPATH_FILE, $sDELIM = Default, $oSL = 0)
    If Not FileExists($sPATH_FILE) Then Return SetError(1, 0, -1)
    If IsKeyword($sDELIM) Then $sDELIM = Opt('GUIDataSeparatorChar')
    If $oSL = 0 Then
    $oSL = _ObjSortedList_Create()
    If @error Then Return SetError(2, 0, -1)
    EndIf
    Local $sRead = FileRead($sPATH_FILE)
    Local $aSplit = StringSplit($sRead, @CRLF, 1)
    If $aSplit[0] = 1 Or ($aSplit[0] > 1 And $aSplit[1] = '') Then Return SetError(3, 0, -1)
    Local $aToList[$aSplit[0]][2], $aLineSplit, $iLoop = 0
    For $i = 1 To $aSplit[0]
    $aLineSplit = StringSplit($aSplit[$i], $sDELIM, 3)
    If @error Then
    $iLoop += 1
    ContinueLoop
    EndIf
    $aToList[$i - 1][0] = $aLineSplit[0]
    $aToList[$i - 1][1] = $aLineSplit[1]
    Next
    If $iLoop Then ReDim $aToList[$aSplit[0] - $iLoop][2]
    Local $ret = _ObjSortedList_AddArray($oSL, $aToList)
    If @error Then Return SetError(4, 0, $oSL) ; doppelte Schlüssel in INI vorhanden (ignoriert)
    Return $oSL
    EndFunc ;==>_ObjSortedList_ReadFromFile

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_WriteToFile($oSL, $sPATH_FILE, $sDELIM = Default, $fOVERWRITE = True)
    ; Description: Schreibt die Schlüssel-Wert-Paare in eine Text-Datei (Zeilenstruktur s. '_ReadFromFile').
    ; Die Werte können wahlweise überschrieben oder angehängt werden.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $sDELIM Trennzeichen zw. Schlüssel u. Wert ('Default' verwendet Opt('GUIDataSeparatorChar') )
    ; $fOVERWRITE 'True' (Standard) überschreibt, 'False' hängt an
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 Fehler beim Lesen der SortedList
    ; 2 Fehler beim Öffnen der Datei
    ; 3 Fehler beim Schreiben in die Datei
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_WriteToFile(ByRef $oSL, $sPATH_FILE, $sDELIM = Default, $fOVERWRITE = True)
    If IsKeyword($sDELIM) Then $sDELIM = Opt('GUIDataSeparatorChar')
    If $fOVERWRITE Then
    $fOVERWRITE = 8 + 2
    Else
    $fOVERWRITE = 8 + 1
    EndIf
    Local $sToWrite = '', $aToWrite = _ObjSortedList_AsArray($oSL)
    If @error Then Return SetError(1, 0, -1)
    For $i = 1 To $aToWrite[0][0]
    $sToWrite &= $aToWrite[$i][0] & $sDELIM & $aToWrite[$i][1] & @CRLF
    Next
    Local $fh = FileOpen($sPATH_FILE, $fOVERWRITE)
    If @error Then Return SetError(2, 0, -1)
    FileWrite($fh, $sToWrite)
    If @error Then Return SetError(3, 0, -1)
    Return FileClose($fh)
    EndFunc ;==>_ObjSortedList_WriteToFile

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_AddPair($oSL, $KEY, $VALUE)
    ; Description: Fügt einer SortedList ein Schlüssel-Wert-Paar hinzu.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel
    ; $VALUE Wert
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel bereits in Liste enthalten
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_AddPair(ByRef $oSL, $KEY, $VALUE)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    $oSL.Add($KEY, $VALUE)
    Return 1
    EndFunc ;==>_ObjSortedList_AddPair

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_AddArray($oSL, $ARRAY, $iStart = 0, $iUb = 0)
    ; Description: Fügt ein Array (oder Teile davon) einer SortedList hinzu.
    ; (Array[n][0]=Key, Array[n][1]=Value)
    ; Parameter(s): $oSL SortedList-Objekt
    ; $ARRAY 2D-Array mit Schlüssel-Wert-Paaren
    ; $iStart Index im Array mit erstem zu übernehmenden Paar (Standard 0)
    ; $iUb Index des letzten zu übernehmenden Paares (Standard 0 = bis Ende)
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 fehlerhaftes Array übergeben (falsche Dimension)
    ; String m. FehlIndex, @error 3 doppelte Schlüssel in Array, nur erstmaliges Auftreten verwendet
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_AddArray(ByRef $oSL, ByRef $ARRAY, $iStart = 0, $iUb = 0)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If UBound($ARRAY, 0) <> 2 Or UBound($ARRAY) < 1 Then Return SetError(2, 0, -1)
    If ($iUb <= 0) Or ($iUb > UBound($ARRAY) - 1) Then $iUb = UBound($ARRAY) - 1
    If $iUb < $iStart Then $iUb = $iStart
    Local $sFailIndex = ''
    For $i = $iStart To $iUb
    If $oSL.ContainsKey($ARRAY[$i][0]) Then
    $sFailIndex &= $i & ','
    ContinueLoop
    EndIf
    $oSL.Add($ARRAY[$i][0], $ARRAY[$i][1])
    Next
    If StringLen($sFailIndex) Then Return SetError(3, 0, StringTrimRight($sFailIndex, 1))
    Return 1
    EndFunc ;==>_ObjSortedList_AddArray

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_Count($oSL)
    ; Description: Gibt die Anzahl Schlüssel-Wert-Paare einer SortedList zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; Return Value(s):
    ; Erfolg: Anzahl Schlüssel-Wert-Paare
    ; Fehler: -1 @error $oSL ist kein Objekt
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_Count(ByRef $oSL)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    Return $oSL.Count
    EndFunc ;==>_ObjSortedList_Count

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_Clear($oSL, $fTRIM = False)
    ; Description: Löscht alle Schlüssel-Wert-Paare einer SortedList.
    ; Optional kann der Speicher freigegeben werden.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $fTRIM 'True' gibt den nicht mehr genutzten Speicher frei, (Standard 'False')
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error $oSL ist kein Objekt
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_Clear(ByRef $oSL, $fTRIM = False)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    $oSL.Clear
    If $fTRIM Then $oSL.TrimToSize
    Return 1
    EndFunc ;==>_ObjSortedList_Clear

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_RemoveByKey($oSL, $KEY, $fTRIM = False)
    ; Description: Löscht ein Schlüssel-Wert-Paar einer SortedList nach Schlüssel.
    ; Optional kann der Speicher freigegeben werden.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel des Paares das gelöscht werden soll
    ; $fTRIM 'True' gibt den nicht mehr genutzten Speicher frei, (Standard 'False')
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel ist nicht in Liste enthalten
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_RemoveByKey(ByRef $oSL, $KEY, $fTRIM = False)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    $oSL.Remove($KEY)
    If $fTRIM Then $oSL.TrimToSize
    Return 1
    EndFunc ;==>_ObjSortedList_RemoveByKey

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_RemoveByIndex($oSL, $INDEX, $fTRIM = False)
    ; Description: Löscht ein Schlüssel-Wert-Paar einer SortedList nach Index.
    ; Optional kann der Speicher freigegeben werden.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $INDEX Index des Paares das gelöscht werden soll
    ; $fTRIM 'True' gibt den nicht mehr genutzten Speicher frei, (Standard 'False')
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Index ist nicht in Liste enthalten
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_RemoveByIndex(ByRef $oSL, $INDEX, $fTRIM = False)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $INDEX < 0 Or $INDEX > $oSL.Count - 1 Then Return SetError(2, 0, -1)
    $oSL.RemoveAt($INDEX)
    If $fTRIM Then $oSL.TrimToSize
    Return 1
    EndFunc ;==>_ObjSortedList_RemoveByIndex

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_Clone($oSL)
    ; Description: Erzeugt eine Kopie der SortedList.
    ; Parameter(s): $oSL SortedList-Objekt
    ; Return Value(s):
    ; Erfolg: Kopie der Liste
    ; Fehler: -1 @error $oSL ist kein Objekt
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_Clone(ByRef $oSL)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    Return $oSL.Clone
    EndFunc ;==>_ObjSortedList_Clone

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_ContainsKey($oSL, $KEY)
    ; Description: Prüft ob die SortedList einen bestimmten Schlüssel enthält.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel
    ; Return Value(s):
    ; Erfolg: True / False vorhanden / nicht vorhanden
    ; Fehler: -1 @error $oSL ist kein Objekt
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_ContainsKey(ByRef $oSL, $KEY)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    Return $oSL.ContainsKey($KEY)
    EndFunc ;==>_ObjSortedList_ContainsKey

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_ContainsVal($oSL, $VALUE)
    ; Description: Prüft ob die SortedList einen bestimmten Wert enthält.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $VALUE Wert
    ; Return Value(s):
    ; Erfolg: True / False vorhanden / nicht vorhanden
    ; Fehler: -1 @error $oSL ist kein Objekt
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_ContainsVal(ByRef $oSL, $VALUE)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    Return $oSL.ContainsValue($VALUE)
    EndFunc ;==>_ObjSortedList_ContainsVal

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_SetValByKey($oSL, $KEY, $NEW_VALUE)
    ; Description: Ändert den Wert eines Schlüssels mit dem Schlüsselnamen.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel
    ; $NEW_VALUE neuer Wert
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_SetValByKey(ByRef $oSL, $KEY, $NEW_VALUE)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    $oSL.SetByIndex($oSL.IndexOfKey($KEY), $NEW_VALUE)
    Return 1
    EndFunc ;==>_ObjSortedList_SetValByKey

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_SetValByIndex($oSL, $INDEX, $NEW_VALUE)
    ; Description: Ändert den Wert eines Schlüssels mit dem Index.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $INDEX Index
    ; $NEW_VALUE neuer Wert
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Index ist nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_SetValByIndex(ByRef $oSL, $INDEX, $NEW_VALUE)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $INDEX < 0 Or $INDEX > $oSL.Count - 1 Then Return SetError(2, 0, -1)
    $oSL.SetByIndex($INDEX, $NEW_VALUE)
    Return 1
    EndFunc ;==>_ObjSortedList_SetValByIndex

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_RenameKeyByName($oSL, $KEY, $NEW_KEYNAME)
    ; Description: Ändert den Namen eines Schlüssels mit dem Schlüsselnamen.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel (alter Name)
    ; $NEW_KEYNAME Schlüssel (neuer Name)
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel nicht in Liste
    ; 3 neuer Schlüsselname bereits vorhanden
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_RenameKeyByName(ByRef $oSL, $KEY, $NEW_KEYNAME)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    If $oSL.ContainsKey($NEW_KEYNAME) Then Return SetError(3, 0, -1)
    Local $val = $oSL.GetByIndex($oSL.IndexOfKey($KEY))
    $oSL.RemoveAt($oSL.IndexOfKey($KEY))
    $oSL.Add($NEW_KEYNAME, $val)
    Return 1
    EndFunc ;==>_ObjSortedList_RenameKeyByName

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_RenameKeyByIndex($oSL, $INDEX, $NEW_KEYNAME)
    ; Description: Ändert den Namen eines Schlüssels mit dem Index.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $INDEX Index
    ; $NEW_KEYNAME Schlüssel (neuer Name)
    ; Return Value(s):
    ; Erfolg: 1
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Index ist nicht in Liste
    ; 3 neuer Schlüsselname bereits vorhanden
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_RenameKeyByIndex(ByRef $oSL, $INDEX, $NEW_KEYNAME)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $INDEX < 0 Or $INDEX > $oSL.Count - 1 Then Return SetError(2, 0, -1)
    If $oSL.ContainsKey($NEW_KEYNAME) Then Return SetError(3, 0, -1)
    Local $val = $oSL.GetByIndex($INDEX)
    $oSL.RemoveAt($INDEX)
    $oSL.Add($NEW_KEYNAME, $val)
    Return 1
    EndFunc ;==>_ObjSortedList_RenameKeyByIndex

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_AsArray(ByRef $oSL, $TYPE = 0)
    ; Description: Gibt die SortedList als 2D-Array zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $TYPE 0 (Standard) 2D-Array m.: Array[0][0]=Anzahl, Array[n][0]=Key, Array[n][1]=Value
    ; 1 1D-Array nur Schlüssel
    ; 2 1D-Array nur Werte
    ; Return Value(s):
    ; Erfolg: Array mit Schlüsseln und/oder Werten
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Liste ist leer
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_AsArray(ByRef $oSL, $TYPE = 0)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $oSL.Count = 0 Then Return SetError(2, 0, -1)
    If $TYPE < 0 Then $TYPE = 0
    If $TYPE > 2 Then $TYPE = 2
    Local $aOut[$oSL.Count + 1]
    $aOut[0] = $oSL.Count
    Switch $TYPE
    Case 0
    ReDim $aOut[$oSL.Count + 1][2]
    $aOut[0][0] = $oSL.Count
    For $i = 0 To $aOut[0][0] - 1
    $aOut[$i + 1][0] = $oSL.GetKey($i)
    $aOut[$i + 1][1] = $oSL.GetByIndex($i)
    Next
    Case 1, 2
    For $i = 0 To $aOut[0] - 1
    If $TYPE = 1 Then
    $aOut[$i + 1] = $oSL.GetKey($i)
    Else
    $aOut[$i + 1] = $oSL.GetByIndex($i)
    EndIf
    Next
    EndSwitch
    Return $aOut
    EndFunc ;==>_ObjSortedList_AsArray

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_GetIndexOfKey($oSL, $KEY)
    ; Description: Gibt den Index eines Schlüssels zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel
    ; Return Value(s):
    ; Erfolg: Index des Schlüssels
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_GetIndexOfKey(ByRef $oSL, $KEY)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    Return $oSL.IndexOfKey($KEY)
    EndFunc ;==>_ObjSortedList_GetIndexOfKey

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_GetKeyByIndex($oSL, $INDEX)
    ; Description: Gibt den Schlüsselnamen für einen Index zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $INDEX Index
    ; Return Value(s):
    ; Erfolg: Schlüssel an Indexposition
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Index nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_GetKeyByIndex(ByRef $oSL, $INDEX)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $INDEX < 0 Or $INDEX > $oSL.Count - 1 Then Return SetError(2, 0, -1)
    Return $oSL.GetKey($INDEX)
    EndFunc ;==>_ObjSortedList_GetKeyByIndex

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_GetKeyByVal($oSL, $VALUE)
    ; Description: Gibt ein 2D-Array mit allen Vorkommen eines Wertes zurück.
    ; Array[0][0]=Anzahl Vorkommen, Array[0][0]=VALUE, Array[n][0]=Index, Array[n][1]=Schlüssel.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $VALUE Wert dessen Vorkommen ermittelt wird
    ; Return Value(s):
    ; Erfolg: Array mit Schlüssel(n) und Index(es) des gefragten wertes
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Wert nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_GetKeyByVal(ByRef $oSL, $VALUE)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsValue($VALUE) Then Return SetError(2, 0, -1)
    Local $aOut[1][2] = [[0, $VALUE]]
    For $i = 0 To $oSL.Count - 1
    If $oSL.GetByIndex($i) == $VALUE Then
    ReDim $aOut[UBound($aOut) + 1][2]
    $aOut[0][0] += 1 ; Anzahl
    $aOut[UBound($aOut) - 1][0] = $i ; Index in Sorted-List
    $aOut[UBound($aOut) - 1][1] = $oSL.GetKey($i) ; Schlüssel
    EndIf
    Next
    Return $aOut
    EndFunc ;==>_ObjSortedList_GetKeyByVal

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_GetValByIndex($oSL, $INDEX)
    ; Description: Gibt den Wert für einen Index zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $INDEX Index
    ; Return Value(s):
    ; Erfolg: Wert an Indexposition
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Index nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_GetValByIndex(ByRef $oSL, $INDEX)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If $INDEX < 0 Or $INDEX > $oSL.Count - 1 Then Return SetError(2, 0, -1)
    Return $oSL.GetByIndex($INDEX)
    EndFunc ;==>_ObjSortedList_GetValByIndex

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

    ;===============================================================================
    ; Function Name: _ObjSortedList_GetValByKey($oSL, $KEY)
    ; Description: Gibt den Wert für einen Schlüssel zurück.
    ; Parameter(s): $oSL SortedList-Objekt
    ; $KEY Schlüssel
    ; Return Value(s):
    ; Erfolg: Wert des Schlüssels
    ; Fehler: -1 @error 1 $oSL ist kein Objekt
    ; 2 Schlüssel nicht in Liste
    ; Author(s): BugFix
    ;===============================================================================
    Func _ObjSortedList_GetValByKey(ByRef $oSL, $KEY)
    If Not IsObj($oSL) Then Return SetError(1, 0, -1)
    If Not $oSL.ContainsKey($KEY) Then Return SetError(2, 0, -1)
    Return $oSL.GetByIndex($oSL.IndexOfKey($KEY))
    EndFunc ;==>_ObjSortedList_GetValByKey

    [/autoit]
    Bsp. Skript
    [autoit]


    #include-once
    #include <Array.au3>
    #include 'objSortedList.au3'

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

    ;== Sortierte Liste erstellen
    $oSL = _ObjSortedList_Create()

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

    ;== Schlüssel-Wertpaare hinzufügen
    _ObjSortedList_AddPair($oSL, 'Tomate', 5)
    _ObjSortedList_AddPair($oSL, 'Birne', 2)
    _ObjSortedList_AddPair($oSL, 'Apfel', 3)
    _ObjSortedList_AddPair($oSL, 'Zwetschke', 20)
    _ObjSortedList_AddPair($oSL, 'Erdbeere', 10)

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

    ;== Anzahl Schlüssel-Wertpaare ausgeben
    ConsoleWrite('Anzahl Paare: ' & _ObjSortedList_Count($oSL) & @CRLF & @CRLF)

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

    ;== alle Schlüssel-Wertpaare als Array(2D) ausgeben
    $aList = _ObjSortedList_AsArray($oSL)
    _ArrayDisplay($aList, 'Schlüssel-Wert Paare')

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

    ;== alle Schlüssel als Array(1D) ausgeben
    $aList = _ObjSortedList_AsArray($oSL, 1)
    _ArrayDisplay($aList, 'Schlüssel')

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

    ;== alle Werte als Array(1D) ausgeben
    $aList = _ObjSortedList_AsArray($oSL, 2)
    _ArrayDisplay($aList, 'Werte')

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

    ;== Wert für SchlüsselName ausgeben
    ConsoleWrite('_GetValByKey(Apfel): ' & _ObjSortedList_GetValByKey($oSL, 'Apfel') & @CRLF & @CRLF)

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

    ;== Wert für Index ausgeben
    ConsoleWrite('_GetValByIndex(4): ' & _ObjSortedList_GetValByIndex($oSL, 4) & @CRLF & @CRLF)

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

    ;== SchlüsselName für Index ausgeben
    ConsoleWrite('Schlüsselname an Index(3): ' & _ObjSortedList_GetKeyByIndex($oSL, 3) & @CRLF & @CRLF)

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

    ;== Liste auf Schlüssel prüfen
    ConsoleWrite('Schlüssel "Birne" enthalten? ' & _ObjSortedList_ContainsKey($oSL, 'Birne') & @CRLF)
    ConsoleWrite('Schlüssel "Kohlrabi" enthalten? ' & _ObjSortedList_ContainsKey($oSL, 'Kohlrabi') & @CRLF & @CRLF)

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

    ;== Liste auf Werte prüfen
    ConsoleWrite('Wert "10" enthalten? ' & _ObjSortedList_ContainsVal($oSL, 10) & @CRLF)
    ConsoleWrite('Wert "17" enthalten? ' & _ObjSortedList_ContainsVal($oSL, 17) & @CRLF & @CRLF)

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

    ;== Wert über SchlüsselNamen ändern
    _ObjSortedList_SetValByKey($oSL, 'Apfel', 6)
    ConsoleWrite('neuer Wert "Apfel": ' & _ObjSortedList_GetValByKey($oSL, 'Apfel') & @CRLF & @CRLF)

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

    ;==Wert über Index ändern
    _ObjSortedList_SetValByIndex($oSL, 1, 18)
    ConsoleWrite('neuer Wert (1): ' & _ObjSortedList_GetValByIndex($oSL, 1) & @CRLF & @CRLF)

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

    ;== SchlüsselIndex abfragen
    ConsoleWrite('Index(Erdbeere): ' & _ObjSortedList_GetIndexOfKey($oSL, 'Erdbeere') & @CRLF & @CRLF)

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

    ;== SchlüsselName ändern über Name
    ConsoleWrite('vor Änderung(by Name): existiert "Erdbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Erdbeere') & @CRLF)
    _ObjSortedList_RenameKeyByName($oSL, 'Erdbeere', 'Himbeere')
    ConsoleWrite('nach Änderung: existiert "Erdbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Erdbeere') & @CRLF)
    ConsoleWrite('nach Änderung: existiert "Himbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Himbeere') & @CRLF & @CRLF)

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

    ;== SchlüsselName ändern über Index
    $oldKey = _ObjSortedList_GetKeyByIndex($oSL, 3)
    ConsoleWrite('vor Änderung(by Index): Schlüssel an Index(3)? ' & $oldKey & @CRLF)
    _ObjSortedList_RenameKeyByIndex($oSL, 3, 'Banane')
    ConsoleWrite('nach Änderung: existiert "' & $oldKey & '"? ' & _ObjSortedList_ContainsKey($oSL, $oldKey) & @CRLF)
    ConsoleWrite('nach Änderung: existiert "Banane"? ' & _ObjSortedList_ContainsKey($oSL, 'Banane') & @CRLF & @CRLF)

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

    ;== Eintrag nach Schlüsselnamen löschen und Speicher freigeben
    ConsoleWrite('vor Löschen(by Name): existiert "Apfel"? ' & _ObjSortedList_ContainsKey($oSL, 'Apfel') & @CRLF)
    _ObjSortedList_RemoveByKey($oSL, 'Apfel', True)
    ConsoleWrite('nach Löschen: existiert "Apfel"? ' & _ObjSortedList_ContainsKey($oSL, 'Apfel') & @CRLF & @CRLF)

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

    ;== Eintrag nach Index löschen und Speicher nicht freigeben
    $oldKey = _ObjSortedList_GetKeyByIndex($oSL, 0)
    ConsoleWrite('vor Löschen(by Index): Schlüssel an Index(0)? ' & $oldKey & @CRLF)
    _ObjSortedList_RemoveByIndex($oSL, 0)
    ConsoleWrite('nach Löschen: existiert "' & $oldKey & '"? ' & _ObjSortedList_ContainsKey($oSL, $oldKey) & @CRLF & @CRLF)

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

    ;== Klon der Liste erstellen und als Array ausgeben
    $oClone = _ObjSortedList_Clone($oSL)
    $aList = _ObjSortedList_AsArray($oClone)
    _ArrayDisplay($aList, 'Schlüssel-Wert Paare')

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

    ;== Inhalt Ursprungsliste leeren (Liste bleibt als Objekt erhalten)
    _ObjSortedList_Clear($oSL)
    ConsoleWrite('Anzahl nach Löschen Liste: ' & _ObjSortedList_Count($oSL) & @CRLF & @CRLF)

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

    ;== Array mit Schlüssel-Wertpaaren erstellen
    ;== Schlüssel müssen EINMALIG sein, doppelte(mehrfache) Schlüssel werden ignoriert
    ;== Indexwerte mehrfacher Schlüssel werden zurückgegeben
    Local $a[7][2] = [['Tomate',5],['Birne',2],['Tomate',5],['Apfel',3],['Zwetschke',20],['Erdbeere',20],['Apfel',5]]
    Local $ret = _ObjSortedList_AddArray($oSL, $a)
    If @error = 3 Then ConsoleWrite('Mehrfach-Schlüssel im Quell-Array an Index: ' & $ret & @CRLF)
    $aList = _ObjSortedList_AsArray($oSL)
    _ArrayDisplay($aList, 'gefüllt aus Array')

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

    ;== Ausgabe Index ($a[n][0]), Schlüsselname ($a[n][1]) eines bestimmten Wertes
    ;== Anzahl gleicher Werte in ($a[0][0]), Wert in ($a[0][1])
    $aSameVal = _ObjSortedList_GetKeyByVal($oSL, 20)
    _ArrayDisplay($aSameVal, 'gleiche Werte')

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

    If MsgBox(262180,"Test INI","Das Bsp.-Skript erzeugt jetzt die Datei:" & @CRLF & _
    @ScriptDir & '\Test.ini' & @CRLF & "Soll die Datei erstellt werden?") = 6 Then

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

    ;== SortedList in INI speichern
    _ObjSortedList_WriteToIni($oSL, @ScriptDir & '\Test.ini', 'SortedList')
    If @error Then
    ConsoleWrite('Schreiben in INI fehlgeschlagen.' & @CRLF)
    Else
    ConsoleWrite('Schreiben in INI erfolgreich.' & @CRLF)

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

    ;== SortedList aus INI erstellen
    $oFromINI = _ObjSortedList_ReadFromIni(@ScriptDir & '\Test.ini', 'SortedList')
    $aList = _ObjSortedList_AsArray($oFromINI)
    _ArrayDisplay($aList, 'erstellt aus INI')
    EndIf

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

    EndIf

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

    If MsgBox(262180,"Test FILE","Das Bsp.-Skript erzeugt jetzt die Datei:" & @CRLF & _
    @ScriptDir & '\TestSort.lst' & @CRLF & "Soll die Datei erstellt werden?") = 6 Then

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

    ;== SortedList in Textdatei speichern (je Zeile: SCHLÜSSEL DELIMITER WERT @CRLF)
    _ObjSortedList_WriteToFile($oSL, @ScriptDir & '\TestSort.lst')
    If @error Then
    ConsoleWrite('Schreiben in FILE fehlgeschlagen.' & @CRLF)
    Else
    ConsoleWrite('Schreiben in FILE erfolgreich.' & @CRLF)

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

    ;== SortedList aus FILE erstellen
    $oFromFile = _ObjSortedList_ReadFromFile(@ScriptDir & '\TestSort.lst')
    $aList = _ObjSortedList_AsArray($oFromFile)
    _ArrayDisplay($aList, 'erstellt aus FILE')
    EndIf

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

    EndIf

    [/autoit]

    Dateien

    objSortedList.au3 26,37 kB – 511 Downloads Bsp_SortedList.au3 6,34 kB – 490 Downloads
  • Excel Tab öffnen ohne Makros

    • BugFix
    • 23. Juli 2010 um 21:19
    Zitat von Superelmo

    Wie sieht es den mit BeforeSave aus?


    Das ist ähnlich, wie beim Makro. Die Sub 'BeforeSave' wird ausgeführt, wenn sie existiert. Du könntest evtl. in diese Sub eine Bedingung einbauen, unter der die Sub abgebrochen wird. Mußt du dir eine entsprechende Bedingung schaffen, die dazu geeignet ist.

  • Aufbau einer Website?

    • BugFix
    • 23. Juli 2010 um 12:47

    Als Aufbau empfiehlt sich deine Hauptseite als Naviagationszentrum zu verwenden und Links auf andere Themen(seiten) zu verwenden. Man kann zwar alles auch auf einer Seite unterbringen - aber dann wird unnütz immer alles geladen, auch wenn nur Teilbereiche gelesen werden sollen.

    Übrigens -- witzig auf deiner Seite: Kontakt/BugFix :rofl:

  • kleiner webcrawler

    • BugFix
    • 23. Juli 2010 um 11:50
    Zitat von cinema

    Laut Quelltext steht die nicht drinnen....


    Ist ja klar. Auf der Hauptübersichtsseite findest du nur die Grobinfos. Für Details muß bei jedem auf die Unterseite gewechselt werden. Von dort sind dann die Daten abrufbar. ;)

  • Excel Tab öffnen ohne Makros

    • BugFix
    • 23. Juli 2010 um 11:25
    Zitat von Superelmo

    Weiß jemand ob ich eine Excel-Tab so öffnen kann, daß die in der Tab enthaltenen Makros nicht ausgeführt werden?


    Wenn das Makro beim Öffnen der Tabelle automatisch ausgeführt wird, hat diese folgende Eigenschaft:
    ActiveWorkbook.RunAutoMacros = xlAutoActivate

    D.h., die beim Laden der Tabelle vorliegende Eigenschaft bestimmt, ob das Makro gestartet wird oder nicht.
    Du kannst also nicht die Tabelle laden und dann Ändern auf nicht Ausführen.
    Wenn du das möchtest, solltest du das Makro erst nach einer Abfrage (Ja/Nein) starten, das kannst du dann programmtechnisch steuern und der User muß halt einen Klick mehr machen.

    Falls du doch Aktivieren/Deaktivieren testen möchtest, so wird es eingesetzt:

    [autoit]

    Const $xlAutoActivate = 3
    Const $xlAutoDeactivate = 4
    $oExcel.ActiveWorkbook.RunAutoMacros($xlAutoDeactivate)

    [/autoit]
  • Fenster wie bei Win 7 an den Rand schieben

    • BugFix
    • 23. Juli 2010 um 11:04

    _IsPressed ist i.A. die Lösung, die man nur dann nimmt, wenn nix anderes geht (also eigentlich nie :D).
    Mein Tipp: Verwende WM_MOUSEMOVE, als wParam kannst du dann auf MK_LBUTTON (Const Wert=1) abprüfen. MK_LBUTTON bedeutet: Maus bewegt und Links geklickt.

  • Frage zu DllCall

    • BugFix
    • 23. Juli 2010 um 10:53

    Ich hab mir mal das Manual angeschaut.
    Dort wird die Syntax für dtcfg so angegeben:

    Code
    Format rundll32.exe NvCpl.dll,dtcfg <command> <display#> 
    [arg1] [arg2] [arg3] [arg4]


    Die Funktion hat also 6 Parameter:
    - dtcfg ==> der Funktionsname
    - <command> ==> Befehlsparameter für diese Funktion (z.B. attach oder setmode)
    - <display#> ==> die Nummer des anzusprechenden Displays
    - [arg1 - 4] ==> 4 optionale Parameter

    Datentyp für command und display# könnte man als 'str' und 'int' annehmen. Schwieriger wird es bei den optionalen Parametern. Denn wenn man mal im Manual blättert, werden sowohl Strings als auch Integerwerte an diese Argumente übergeben. 8|

    Aber was spricht eigentlich dagegen, die Befehle als Kommandozeile aufzurufen?
    z.B. "rundll32.exe NvCpl.dll,dtcfg setmode 2 1024 768 32 75" mit Run() aufrufen.

  • GDI+ Bild zerschnippelt anzeigen

    • BugFix
    • 23. Juli 2010 um 10:20

    Ich bin nicht der Grafikspezialist, aber grundsätzlich sollte das machbar sein.
    Du mußt das Bild im Binärformat laden, den Header abrechnen und dann je nach Farbtiefe die Anzahl Bytes für dein Bildsegment auslesen.
    Wurde letztens hier im Forum bereits erklärt, mußt du mal etwas suchen.

  • 5000x BugFix

    • BugFix
    • 22. Juli 2010 um 13:41

    Auch wenn grundsätzlich die Anzahl der Posts keine hauptrangiges Qualitätsmerkmal ist, denke ich aufgrund der Resonanz, dass ich mich doch recht gut einbringe. ;)
    Also Danke für eure Bauchpinseleien :rofl:
    Obwohl ich schon fast als programmiertechnisches Urzeitmonster durchgehe ( oder gerade deswegen? ), war ich ja von Anfang an sehr angetan von AutoIt. Ich hab es auch nie als Automatisierungstool verstanden, sondern immer gleich die Programmiertechnologie im Vordergrund gesehen.
    Solange AutoIt auf meinen Windows-Systemen läuft, werde ich euch auch erhalten bleiben - versprochen. :thumbup:

  • Funktionen wiederholen

    • BugFix
    • 22. Juli 2010 um 10:12

    Du kannst doch mehrere Funktionen registrieren. Wenn sich der Zeitpunkt des Starts überschneidet werden diese Pseudoparallel ausgeführt. Also erst eine und sofort anschließend die andere.
    Bsp.(Kollision alle 2 sec):

    [autoit]

    AdlibRegister('No1', 1000)
    AdlibRegister('No2', 2000)

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

    $t = TimerInit()
    Do
    Sleep(50)
    Until TimerDiff($t) >= 10000
    AdlibUnRegister('No1')
    AdlibUnRegister('No2')

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

    Func No1()
    ConsoleWrite('1: ' & @MIN & ':' & @SEC & @CRLF)
    EndFunc

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

    Func No2()
    ConsoleWrite('2: ' & @MIN & ':' & @SEC & @CRLF)
    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™