Forum-Umstellung Problemsammlung

  • wie Sch*** alles ist

    i2c: Ich glaube jeder weiß, das Ihr gute Arbeit leostet und wir wissen, das es nicht von heute auf morgen, aber wir "meckern" doch nur, weil wir das Ende nicht abwarten können und uns darauf schon so sehhhhhr freuen. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ein weiteres Problem entdeckt:
    Ich weiß nicht ob es mehrere Posts betrifft, aber in "_String_Balanced --> Text zwischen korrespondierenden Klammern" ist alles aus den Fugen geraten. Die Anhänge werden als Text dargestellt.

    Liegt am AutoIt-Highlighter. Ich hab ihn erstmal deaktiviert und bau gleich ein alternatives, etwas abgespecktes Paket um den Betrieb erstma zu gewährleisten.

    Edit: Hab einen Highlighter auf Basis der WCF-eigenen Highlighter-Klasse erstellt. Etwas eingeschränkt aber für den Moent muss es reichen.

    Spoiler anzeigen
    [autoit]

    #Region - TimeStamp
    ; 2013-12-30 14:43:59 v 0.4
    #EndRegion - TimeStamp

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Sammlung von Array-UDF
    ;
    ; Enthaltene Funktionen:
    ;
    ; _ArraySort_2ary() ==> [durch _Array2DSortFree() ersetzt]
    ; sortiert 2D Arrays mehrstufig
    ; !! Nicht entfernen: Wird von _Array2DSortByLen() verwendet
    ;
    ; _Array2DSortFree()
    ; sortiert 2D Arrays mehrstufig, jede Spalte kann in eigener Richtung sortiert werden
    ; ein bis alle Spalten sind ineinander sortierbar
    ; sortiert auch 1D-Arrays auf- oder absteigend
    ; Sortierung wahlweise alphabetisch oder numerisch
    ; !! Bemerkung:
    ; Die Funktion ist auskommentiert, da die verwendeten SQLite-Includes am Anfang des aufrufenden
    ; Skripts stehen müssen. Somit bringt jedes Include von 'ArrayMore.au3' in SciTE eine Fehlermeldung
    ; wegen der SQLite-Includes (auch wenn andere Funktionen genutzt werden prüft SciTE stets das ganze Include).
    ; Um diese Funktion zu verwenden, muß sie separat gespeichert und includiert oder direkt in das Skript
    ; kopiert werden.
    ;
    ; _Array2DSortByLen()
    ; sortiert 1D/2D Arrays nach Länge der Einträge
    ;
    ; _ArraySortDblDel() ** Funktion auskommentiert - siehe Funktionskopf
    ; sortiert 1D/2D Arrays und entfernt doppelte Einträge
    ; in 2.ter Dimension begrenzt auf 2 Vorkommen
    ;
    ; _Array2DDblDel()
    ; entfernt doppelte Einträge in 1D/2D Arrays
    ;
    ; _Array2DAdd()
    ; fügt einen Eintrag einem 1D/2D-Array hinzu
    ; Spaltenwerte in 2D-Arrays sind durch '|' zu trennen
    ; wird die Funktion ohne Wertübergabe aufgerufen, wird die Arraygröße um 1 erhöht
    ;
    ; _Array2DInsert()
    ; fügt 1 Element (leer oder mit Daten) an gegebener Position ein
    ; arbeitet mit 1D/2D Arrays
    ;
    ; _Array2DSplit()
    ; splittet 1D/2D Arrays ab gegebener Position in 2 Arrays
    ; optional wird eine Anzahl Elemente in ein Zielarray exportiert
    ;
    ; _Array2DEmptyDel()
    ; löscht leere Zeilen, in 2D Arrays Zeilen oder optional Spalten
    ;
    ; _Array2DJoin()
    ; verbindet 2 Arrays zu einem, 1D/2D -Arrays, auch untereinander
    ; Größe der 2.ten Dimension muß nicht übereinstimmen
    ;
    ; _Array2DDelete
    ; löscht eine Zeile oder Spalte aus einem (1D)2D -Array am gegebenen Index
    ;
    ; _Array2DSearch()
    ; sucht nach allen oder einmaligem Auftreten des Suchbegriffs in einem 1D/2D -Array
    ; ein Array mit dem/den gefundenen Index(es) wird zurückgeliefert
    ;
    ; _Array2DMirror()
    ; spiegelt ein 2D-Array, Zeilen werden zu Spalten und umgekehrt
    ;
    ; _SubArrayGetEntry()
    ; gibt den Wert eines Elements aus einem 1D/2D-Array als Element eines 1D/2D-Arrays zurück
    ;
    ; _SubArraySetEntry()
    ; setzt den Wert eines Elements in einem 1D/2D-Array als Element eines 1D/2D-Arrays
    ;
    ; _Array2DSortByCountSameEntries()
    ; sortiert ein Array nach der Anzahl gleicher Elemente, bei 2D für eine angegebene Spalte
    ;
    ; _Array2DPop()
    ; gibt den letzten Wert eines 1D/2D-Arrays zurück und löscht ihn gleichzeitig vom Array
    ;
    ; _Array2DPush()
    ; fügt Einzelwerte oder Arrays in 1D/2D-Arrays ein ohne deren Größe zu verändern
    ; es kann vom Anfang oder vom Ende eingefügt werden, überzählige Elemente werden 'herausgeschoben'
    ;
    ; _Array2DMinMax()
    ; gibt den minimalen od. maximalen Wert eines 1D/2D-Array zurück
    ; Überprüfung einer oder aller Spalten
    ;
    ;----------------------------------------------------------------------------------------------------------------------
    #include-once
    #include <Array.au3>
    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _ArraySort_2ary(ByRef $ARRAY [, $DIM_1ST=0 [, $DESCENDING=0 [$REVERSE=False]]])
    ;
    ; Description sort an 2D-Array 2-ary
    ; BaseIndex is 0
    ; sort the whole array
    ;
    ; Parameter $ARRAY: Array to sort
    ; optional $DIM_1ST: MainSortIndex; 1st Dim. [0] or last occurence in 2nd Dim.[all other values] (default 0)
    ; optional $DESCENDING: Sort ascending[0]/descending[1] (default 0)
    ; optional $REVERSE: Sort 2nd Dimension reverse to 1st Dimension (default False)
    ;
    ; Return Succes 0 ByRef 2-ary sorted Array
    ; Failure 1 set @error
    ; @error = 1 given array is not array
    ; @error = 2 given array has only 1 dimension
    ;
    ; Requirements By using numeric entry, be sure that type is "number" for correct sort
    ; Works with any occurences in 2nd Dimension
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _ArraySort_2ary(ByRef $ARRAY, $DIM_1ST=0, $DESCENDING=0, $REVERSE=False)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    Local $FIRST = 0, $LAST, $arOutFIRST, $sortYES = 0, $u, $i
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then Return SetError(2,0,1)
    If $DIM_1ST <> 0 Then $DIM_1ST = $UBound2nd-1
    Local $arTmp[1][$UBound2nd]
    _ArraySort($ARRAY,$DESCENDING,0,0,$DIM_1ST)
    If $REVERSE Then
    Switch $DESCENDING
    Case 0
    $DESCENDING = 1
    Case 1
    $DESCENDING = 0
    EndSwitch
    EndIf
    For $u = 0 To $UBound2nd-1
    For $i = 0 To UBound($ARRAY)-1
    If $sortYES = 0 Then
    If $u > 0 Then
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) And _
    ( $ARRAY[$i][$u-1] = $ARRAY[$i+1][$u-1] )Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    Else
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    EndIf
    ElseIf $sortYES = 1 Then
    If ( $i = UBound($ARRAY)-1 ) Or ( $ARRAY[$i][$u] <> $ARRAY[$i+1][$u] ) Then
    $sortYES = 0
    $LAST = $i +1
    ReDim $arTmp[$LAST-$FIRST][$UBound2nd]
    $arOutFIRST = $FIRST
    For $k = 0 To UBound($arTmp)-1
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$arOutFIRST][$l]
    Next
    $arOutFIRST += 1
    Next
    $arOutFIRST = $FIRST
    Switch $DIM_1ST
    Case 0
    If $u = $UBound2nd-1 Then
    _ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1)
    Else
    _ArraySort($arTmp,$DESCENDING,0,0,$u+1)
    EndIf
    For $k = 0 To UBound($arTmp)-1
    For $l = 1 To $UBound2nd-1
    $ARRAY[$arOutFIRST][$l] = $arTmp[$k][$l]
    Next
    $arOutFIRST += 1
    Next
    Case $UBound2nd-1
    If $u = $UBound2nd-1 Then
    _ArraySort($arTmp,$DESCENDING,0,0,0)
    Else
    _ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1-$u-1)
    EndIf
    For $k = 0 To UBound($arTmp)-1
    For $l = 0 To $UBound2nd-2
    $ARRAY[$arOutFIRST][$l] = $arTmp[$k][$l]
    Next
    $arOutFIRST += 1
    Next
    EndSwitch
    EndIf
    EndIf
    Next
    $sortYES = 0
    Next
    Return 0
    EndFunc ;==>_ArraySort_2ary
    #cs s. Bemerkungen in Funktionsliste
    ;==================================================================================================
    ; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC [, $NUM=False])
    ; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
    ; 1D Sortierung Auf- oder Absteigend
    ; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
    ; richtung (je Spalte) frei wählbar
    ; auch einzelne Spalte sortierbar
    ; Parameter(s): $ARRAY Das zu sortierende Array
    ; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
    ; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
    ; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
    ; _Array2DSortFree($ar2Sort, '1|0,0|1')
    ; optional $NUM "False" sortiert alphabetisch (Standard), "True" sortiert numerisch
    ; Return Value(s): Erfolg 0
    ; Fehler 1 Set Error 1 $ARRAY ist kein Array
    ; 2 1D-Array, aber Spaltenangabe für 2D
    ; 3 SQL-Fehler
    ; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
    ; Requirements: #include <SQLite.au3>
    ; #include <SQLite.dll.au3>
    ; #include <Array.au3>
    ; Note: Es ist dringend erforderlich, die SQLite-Includes am Beginn des aufrufenden
    ; Skriptes auszuführen. Anderenfalls schlägt die Initialisierung der SQLite.dll
    ; durch _SQLite_Startup() fehl.
    ; Version: 3.2.12.0
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC, $NUM=False)
    If Not IsArray($ARRAY) Then Return SetError(1,0,1)
    Local $tableStr = "CREATE TABLE tblTEST ("
    Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
    Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
    Local $hQuery, $aRow, $asc, $i, $k
    $sCOL_ASC = StringStripWS($sCOL_ASC, 8)
    Local $ub2nd = UBound($ARRAY, 2)
    If @error = 2 Then
    If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
    If StringRight($sCOL_ASC, 1) = 0 Then
    _ArraySort($ARRAY)
    Else
    _ArraySort($ARRAY, 1)
    EndIf
    Return 0
    Else
    Local $aOut[UBound($ARRAY)][$ub2nd]
    EndIf
    _SQLite_Startup ()
    If @error > 0 Then Return SetError(3,0,1)
    $hSQL = _SQLite_Open ()
    If @error > 0 Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    For $i = 0 To UBound($ARRAY, 2) -1
    $tableStr &= "'field" & $i & "',"
    Next
    $tableStr = StringTrimRight($tableStr, 1) & ");"
    For $i = 0 To UBound($ARRAY) -1
    $insertStr &= $insertBase
    For $k = 0 To UBound($ARRAY, 2) -1
    $insertStr &= "'" & $ARRAY[$i][$k] & "',"
    Next
    $insertStr = StringTrimRight($insertStr, 1) & ");"
    Next
    If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    If StringInStr($sCOL_ASC, ',') Then
    Local $aOrder = StringSplit($sCOL_ASC, ',')
    For $i = 1 To UBound($aOrder) -1
    If StringInStr($sCOL_ASC, '|') Then
    Local $var = StringSplit($aOrder[$i], '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc & ','
    Else
    $sortOrder &= 'field' & $var[1] & $asc & ','
    EndIf
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    Next
    $sortOrder = StringTrimRight($sortOrder, 1) & ';'
    Else
    If (StringLen($sCOL_ASC) = 3) And (StringInStr($sCOL_ASC, '|')) Then
    Local $var = StringSplit($sCOL_ASC, '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc
    Else
    $sortOrder &= 'field' & $var[1] & $asc
    EndIf
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    EndIf
    If _SQlite_Query (-1, $sortStr & $sortOrder, $hQuery) <> $SQLITE_OK Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    $i = 0
    While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
    For $k = 0 To UBound($ARRAY,2) -1
    $ARRAY[$i][$k] = $aRow[$k]
    Next
    $i += 1
    WEnd
    _SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
    _SQLite_Close ()
    _SQLite_Shutdown ()
    Return 0
    EndFunc ;==>_Array2DSortFree
    #ce
    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DSortByLen(ByRef $ARRAY [, $iDESCENDING=0])
    ;
    ; Description - Sorts an 1D/2D Array by Length.
    ; - BaseIndex is 0; sorts the whole array.
    ;
    ; Parameter $ARRAY: Array to sort
    ; optional $iDESCENDING: Sort ascending[0]/descending[1] (default 0)
    ;
    ; Return Succes 0 ByRef sorted Array by Length
    ; Failure 1 set @error = 1; no array
    ;
    ; Requirements Func _ArraySort_2ary()
    ; #include <array.au3>
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DSortByLen(ByRef $ARRAY, $iDESCENDING=0)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    If $iDESCENDING <> 0 Then $iDESCENDING = 1
    Local $i, $k
    Local $UBound2nd = UBound($ARRAY,2)
    Local $arTmp[1] = ['']
    If @error = 2 Then
    ReDim $arTmp[UBound($ARRAY)][2]
    For $i = 0 To UBound($ARRAY)-1
    $arTmp[$i][0] = StringLen($ARRAY[$i])
    $arTmp[$i][1] = $ARRAY[$i]
    $ARRAY[$i] = ''
    Next
    _ArraySort($arTmp,$iDESCENDING,0,0,0)
    For $i = 0 To UBound($arTmp)-1
    $ARRAY[$i] = $arTmp[$i][1]
    Next
    Else
    ReDim $arTmp[UBound($ARRAY)][$UBound2nd+1]
    For $i = 0 To UBound($ARRAY)-1
    For $k = 0 To $UBound2nd-1
    $arTmp[$i][$k] = StringLen($ARRAY[$i][$k])
    Next
    $arTmp[$i][$UBound2nd] = $i
    Next
    _ArraySort_2ary($arTmp, 0, $iDESCENDING)
    For $i = 0 To UBound($arTmp)-1
    For $k = 0 To $UBound2nd-1
    $arTmp[$i][$k] = $ARRAY[$arTmp[$i][$UBound2nd]][$k]
    Next
    Next
    ReDim $arTmp[UBound($ARRAY)][$UBound2nd]
    $ARRAY = $arTmp
    EndIf
    Return 0
    EndFunc ;==>_ArraySortByLen

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DDblDel(ByRef $ARRAY [, $CASESENS=0])
    ;
    ; Description - From an 1D/2D Array will delete double entries (2D -> combination by '[n][0]' to '[n][x]').
    ; - Autodetection 1D/2D Array
    ; - By using string, you can choose case sensitivity.
    ;
    ; Parameter $ARRAY: Array to delete double
    ; optional $CASESENS: Case sensitivity off[0] or on[1] (default 0)
    ;
    ; Return Succes Count of doubles
    ; ByRef Array without doubles
    ; Failure 1 and set @error = 1; no array
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DDblDel(ByRef $ARRAY, $CASESENS=0)
    Local $arTmp[1] = [''], $dbl = 0, $count = 0, $x, $l, $val, $valTmp, $i, $k, $sDelim = Chr(1)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    Local $Ubound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    For $i = 0 To UBound($ARRAY)-1
    $dbl = 0
    For $k = 0 To UBound($arTmp)-1
    Switch $CASESENS
    Case 0
    If $arTmp[$k] = $ARRAY[$i] Then
    $dbl = 1
    $count += 1
    EndIf
    Case 1
    If $arTmp[$k] == $ARRAY[$i] Then
    $dbl = 1
    $count += 1
    EndIf
    EndSwitch
    Next
    If $dbl = 0 Then
    If $arTmp[0] = "" Then
    $arTmp[0] = $ARRAY[$i]
    Else
    ReDim $arTmp[UBound($arTmp)+1]
    $arTmp[UBound($arTmp)-1] = $ARRAY[$i]
    EndIf
    Else
    $dbl = 0
    EndIf
    Next
    Else
    ReDim $arTmp[UBound($ARRAY)][$Ubound2nd]
    Local $indexNew = -1
    For $i = 0 To UBound($ARRAY)-1
    $dbl = 0
    $val = ''
    $valTmp = ''
    For $l = 0 To $Ubound2nd-1
    $val &= $ARRAY[$i][$l] & $sDelim
    Next
    If $indexNew > -1 Then
    For $k = 0 To $indexNew
    For $l = 0 To $Ubound2nd-1
    $valTmp &= $arTmp[$k][$l] & $sDelim
    Next
    Switch $CASESENS
    Case 0
    If $valTmp = $val Then
    $dbl = 1
    $count += 1
    EndIf
    Case 1
    If $valTmp == $val Then
    $dbl = 1
    $count += 1
    EndIf
    EndSwitch
    $valTmp = ''
    Next
    EndIf
    If $dbl = 0 Then
    $indexNew += 1
    For $l = 0 To $Ubound2nd-1
    $arTmp[$indexNew][$l] = $ARRAY[$i][$l]
    Next
    Else
    $dbl = 0
    EndIf
    Next
    ReDim $arTmp[$indexNew+1][$Ubound2nd]
    EndIf
    $ARRAY = $arTmp
    Return $count
    EndFunc ; ==>_ArrayDblDel

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

    ;------------------------------------------------------------------------------------------------------------
    ;
    ; Function _Array2DAdd(ByRef $avArray, $sValue='')
    ;
    ; Description Redim Array Size and add an Array element at last position
    ; Works with any occurences in 2nd Dimension
    ; Works also with 1D-Array
    ;
    ; Parameter $avArray Given Array
    ; optional $sValue Value of new Element, parts must be seperate with '|'
    ;
    ; Return Succes 0
    ; Failure 1 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 given parts of Element too less/much
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;------------------------------------------------------------------------------------------------------------
    Func _Array2DAdd(ByRef $avArray, $sValue='')
    If ( Not IsArray($avArray) ) Then Return SetError(1,0,1)
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then
    ReDim $avArray[UBound($avArray)+1]
    $avArray[UBound($avArray)-1] = $sValue
    Else
    Local $arValue
    ReDim $avArray[UBound($avArray)+1][$UBound2nd]
    If $sValue = '' Then
    For $i = 0 To $UBound2nd-2
    $sValue &= '|'
    Next
    EndIf
    $arValue = StringSplit($sValue, '|')
    If $arValue[0] <> $UBound2nd Then
    SetError(2)
    Return 0
    EndIf
    For $i = 0 To $UBound2nd-1
    $avArray[UBound($avArray)-1][$i] = $arValue[$i+1]
    Next
    EndIf
    Return 0
    EndFunc ;==>_Array2DAdd

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

    ;------------------------------------------------------------------------------------------------------------
    ;
    ; Function _Array2DInsert(ByRef $avArray, $iElement [, $sValue=''])
    ;
    ; Description Insert an Array element on a given position
    ; Works with any occurences in 2nd Dimension
    ; Works also with 1D-Array
    ;
    ; Parameter $avArray Given Array
    ; $iElement 0-based Array Index, to insert new Element
    ; optional $sValue Value of new Element, parts must be seperate with '|'
    ;
    ; Return Succes 0
    ; Failure 1 set @error
    ; @error = 1 given array is not array
    ; @error = 2 given parts of Element too less/much
    ; @error = 3 $iElement larger then Ubound
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;------------------------------------------------------------------------------------------------------------
    Func _Array2DInsert(ByRef $avArray, $iElement, $sValue='')
    If ( Not IsArray($avArray) ) Then Return SetError(1,0,1)
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then
    Local $arTMP[UBound($avArray)+1]
    If $iElement > UBound($avArray) Then Return SetError(3,0,1)
    For $i = 0 To UBound($arTMP)-1
    If $i < $iElement Then
    $arTMP[$i] = $avArray[$i]
    ElseIf $i = $iElement Then
    If $i < UBound($avArray) Then
    $arTMP[$i] = $sValue
    $arTMP[$i+1] = $avArray[$i]
    Else
    $arTMP[$i] = $sValue
    EndIf
    ElseIf ($i > $iElement) And ($i < UBound($avArray))Then
    $arTMP[$i+1] = $avArray[$i]
    EndIf
    Next
    Else
    Local $arTMP[UBound($avArray)+1][$UBound2nd], $arValue
    If $sValue = '' Then
    For $i = 0 To $UBound2nd-2
    $sValue &= '|'
    Next
    EndIf
    $arValue = StringSplit($sValue, '|')
    If $arValue[0] <> $UBound2nd Then Return SetError(2,0,1)
    If $iElement > UBound($avArray) Then Return SetError(3,0,1)
    For $i = 0 To UBound($arTMP)-1
    If $i < $iElement Then
    For $k = 0 To $UBound2nd-1
    $arTMP[$i][$k] = $avArray[$i][$k]
    Next
    ElseIf $i = $iElement Then
    If $i < UBound($avArray) Then
    For $k = 0 To $UBound2nd-1
    $arTMP[$i][$k] = $arValue[$k+1]
    $arTMP[$i+1][$k] = $avArray[$i][$k]
    Next
    Else
    For $k = 0 To $UBound2nd-1
    $arTMP[$i][$k] = $arValue[$k+1]
    Next
    EndIf
    ElseIf ($i > $iElement) And ($i < UBound($avArray))Then
    For $k = 0 To $UBound2nd-1
    $arTMP[$i+1][$k] = $avArray[$i][$k]
    Next
    EndIf
    Next
    EndIf
    $avArray = $arTMP
    Return 0
    EndFunc ;==>_Array2DInsert

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

    ;------------------------------------------------------------------------------------------------------------
    ; Funktion _Array2DSplit(ByRef $AR_SOURCE, ByRef $AR_TARGET, $iFROM=-1 [, $ANZ=-1])
    ;
    ; Beschreibung Splittet ein 1D/2D Array ab Indexposition, optional wird Anzahl Einträge ausgelagert
    ;
    ; Parameter $AR_SOURCE Array mit Ausgangsdaten
    ; $AR_TARGET Array mit abgesplitteten Daten
    ; $iFROM Index ab dem gesplittet wird
    ; optional $ANZ Anzahl Elemente, die abgesplittet werden sollen
    ;
    ; Rückgabe Erfolg 0
    ; Fehler 1 @error = 1 Ausgangsvariablen sind keine Arrays
    ; @error = 2 kein Startindex oder Index außerhalb Bereich
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;------------------------------------------------------------------------------------------------------------
    Func _Array2DSplit(ByRef $AR_SOURCE, ByRef $AR_TARGET, $iFROM=-1, $ANZ=-1)
    If ( Not IsArray($AR_SOURCE) ) Or ( Not IsArray($AR_TARGET) ) Then Return SetError(1,0,1)
    If $ANZ = -1 Then $ANZ = UBound($AR_SOURCE)-$iFROM
    If ( $iFROM < 0 ) Or ( $iFROM > UBound($AR_SOURCE)-1 ) Or ( $ANZ < 1 ) Or ( $ANZ > (UBound($AR_SOURCE)-$iFROM) ) Then Return SetError(2,0,1)
    Local $i, $j, $k
    Local $UBound2nd = UBound($AR_SOURCE,2)
    If @error = 2 Then
    Local $arTMP[UBound($AR_SOURCE)-$ANZ]
    ReDim $AR_TARGET[$ANZ]
    For $k = 0 To $iFROM-1
    $arTMP[$k] = $AR_SOURCE[$k]
    Next
    $j = 0
    For $i = $iFROM To $iFROM+$ANZ-1
    $AR_TARGET[$j] = $AR_SOURCE[$i]
    $j += 1
    Next
    For $i = $iFROM+$ANZ To UBound($AR_SOURCE)-1
    $arTMP[$k] = $AR_SOURCE[$i]
    $k +=1
    Next
    $AR_SOURCE = $arTMP
    Return 0
    Else
    Local $arTMP[UBound($AR_SOURCE)-$ANZ][$UBound2nd]
    ReDim $AR_TARGET[$ANZ][$UBound2nd]
    For $k = 0 To $iFROM-1
    For $i = 0 To $UBound2nd-1
    $arTMP[$k][$i] = $AR_SOURCE[$k][$i]
    Next
    Next
    $j = 0
    For $i = $iFROM To $iFROM+$ANZ-1
    For $l = 0 To $UBound2nd-1
    $AR_TARGET[$j][$l] = $AR_SOURCE[$i][$l]
    Next
    $j += 1
    Next
    For $i = $iFROM+$ANZ To UBound($AR_SOURCE)-1
    For $l = 0 To $UBound2nd-1
    $arTMP[$k][$l] = $AR_SOURCE[$i][$l]
    Next
    $k +=1
    Next
    $AR_SOURCE = $arTMP
    Return 0
    EndIf
    EndFunc ;==>_Array2DSplit

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DEmptyDel(ByRef $avArray [, $Col=0])
    ;
    ; Description Delete empty Array elements
    ; Delete all emty Rows or all empty Columns
    ; Works also with 1D-Array (only Rows)
    ;
    ; Parameter $avArray Given Array
    ; optional $Col set 1 to delete empty Columns; default is 0 to delete empty Rows
    ;
    ; Return Succes 0 ByRef the given Array without empty Elements, resized
    ; Failure 1 and set @error = 1
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DEmptyDel(ByRef $avArray, $Col=0)
    If ( Not IsArray($avArray) ) Then Return SetError(1,0,1)
    Local $i, $k, $notEmpty
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then
    Local $arTMP[UBound($avArray)], $indexNew = -1
    For $i = 0 To UBound($avArray)-1
    If $avArray[$i] <> '' Then
    $indexNew += 1
    $arTMP[$indexNew] = $avArray[$i]
    EndIf
    Next
    ReDim $arTMP[$indexNew+1]
    Else
    If $Col = 0 Then
    Local $arTMP[1][$UBound2nd], $val, $len
    For $i = 0 To UBound($avArray)-1
    $val = ''
    For $k = 0 To $UBound2nd-1
    $val &= $avArray[$i][$k]
    Next
    If $val <> 0 Then
    $len = 0
    For $k = 0 To UBound($arTMP,2)-1
    $len &= StringLen($arTMP[UBound($arTMP)-1][$k])
    Next
    If $len = 0 Then
    For $k = 0 To $UBound2nd-1
    $arTMP[UBound($arTMP)-1][$k] = $avArray[$i][$k]
    Next
    Else
    ReDim $arTMP[UBound($arTMP)+1][$UBound2nd]
    For $k = 0 To $UBound2nd-1
    $arTMP[UBound($arTMP)-1][$k] = $avArray[$i][$k]
    Next
    EndIf
    EndIf
    Next
    Else
    Local $arTMP[UBound($avArray)][1], $val, $len
    For $k = 0 To $UBound2nd-1
    $val = ''
    $notEmpty = 0
    For $i = 0 To UBound($avArray)-1
    $val &= $avArray[$i][$k]
    If $val <> '' Then
    $notEmpty = 1
    ExitLoop
    EndIf
    Next
    If $notEmpty = 1 Then
    $len = 0
    For $i = 0 To UBound($arTMP)-1
    $len &= StringLen($arTMP[$i][UBound($arTMP,2)-1])
    Next
    If $len = 0 Then
    For $i = 0 To UBound($avArray)-1
    $arTMP[$i][0] = $avArray[$i][$k]
    Next
    Else
    ReDim $arTMP[UBound($avArray)][UBound($arTMP,2)+1]
    For $i = 0 To UBound($avArray)-1
    $arTMP[$i][UBound($arTMP,2)-1] = $avArray[$i][$k]
    Next
    EndIf
    EndIf
    Next
    EndIf
    EndIf
    $avArray = $arTMP
    Return 0
    EndFunc ;==>_Array2DEmptyDel

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Fuction _Array2DJoin(ByRef $ARRAY, ByRef $AR2JOIN)
    ;
    ; Description Join 2 Arrays, 1D/2D can be mixed
    ;
    ; Parameter $ARRAY 1st array, will be joined with 2nd
    ; $AR2JOIN 2nd array
    ;
    ; Return Succes 0 ByRef $ARRAY
    ; Failure 1 set @error = 1; given array(s) are not array
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DJoin(ByRef $ARRAY, ByRef $AR2JOIN)
    If ( Not IsArray($ARRAY) ) Or ( Not IsArray($AR2JOIN) ) Then Return SetError(1,0,1)
    Local $UB2ndAR = UBound($ARRAY,2), $i, $k
    If @error = 2 Then $UB2ndAR = 0
    Local $UB2nd2JOIN = UBound($AR2JOIN,2)
    If @error = 2 Then $UB2nd2JOIN = 0
    Select
    Case $UB2ndAR = 0 And $UB2nd2JOIN = 0
    For $i = 0 To UBound($AR2JOIN)-1
    ReDim $ARRAY[UBound($ARRAY)+1]
    $ARRAY[UBound($ARRAY)-1] = $AR2JOIN[$i]
    Next
    Return -1
    Case $UB2ndAR > 0 And $UB2nd2JOIN = 0
    Local $arTmp = $AR2JOIN
    ReDim $AR2JOIN[UBound($AR2JOIN)][$UB2ndAR]
    For $i = 0 To UBound($arTmp)-1
    $AR2JOIN[$i][0] = $arTmp[$i]
    Next
    Case $UB2ndAR = 0 And $UB2nd2JOIN > 0
    Local $arTmp = $ARRAY
    ReDim $ARRAY[UBound($ARRAY)][$UB2nd2JOIN]
    For $i = 0 To UBound($arTmp)-1
    $ARRAY[$i][0] = $arTmp[$i]
    Next
    Case $UB2ndAR > 0 And $UB2nd2JOIN > 0
    Select
    Case $UB2ndAR < $UB2nd2JOIN
    ReDim $ARRAY[UBound($ARRAY)][$UB2nd2JOIN]
    Case $UB2ndAR > $UB2nd2JOIN
    ReDim $AR2JOIN[UBound($AR2JOIN)][$UB2ndAR]
    EndSelect
    EndSelect
    For $i = 0 To UBound($AR2JOIN)-1
    ReDim $ARRAY[UBound($ARRAY)+1][UBound($ARRAY,2)]
    For $k = 0 To UBound($AR2JOIN,2)-1
    $ARRAY[UBound($ARRAY)-1][$k] = $AR2JOIN[$i][$k]
    Next
    Next
    Return 0
    EndFunc ;==>_Array2DJoin

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Fuction _Array2DDelete(ByRef $ARRAY, $iDEL, $bCOL=False)
    ;
    ; Description Delete one row on a given index in an 1D/2D -Array
    ;
    ; Parameter $ARRAY the array, where one row will deleted
    ; $iDEL Row(Column)-Index to delete
    ; $bCOL If True, delete column instead of row (default False)
    ;
    ; Return Succes 0 ByRef $ARRAY
    ; Failure 1 set @error = 1; given array are not array
    ; set @error = 2; want delete column, but not 2D-array
    ; set @error = 3; index is out of range
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DDelete(ByRef $ARRAY, $iDEL, $bCOL=False)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    Local $UBound2nd = UBound($ARRAY,2), $k
    If $bCOL Then
    If $UBound2nd = 0 Then Return SetError(2,0,1)
    If ( $iDEL < 0 ) Or ( $iDEL > $UBound2nd-1 ) Then Return SetError(3,0,1)
    Else
    If ( $iDEL < 0 ) Or ( $iDEL > UBound($ARRAY)-1 ) Then Return SetError(3,0,1)
    EndIf
    If $UBound2nd = 0 Then
    Local $arTmp[UBound($ARRAY)-1]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    $arTmp[$k] = $ARRAY[$i]
    $k += 1
    EndIf
    Next
    Else
    If $bCOL Then
    Local $arTmp[UBound($ARRAY)][$UBound2nd-1]
    For $i = 0 To UBound($ARRAY)-1
    $k = 0
    For $l = 0 To $UBound2nd-1
    If $l <> $iDEL Then
    $arTmp[$i][$k] = $ARRAY[$i][$l]
    $k += 1
    EndIf
    Next
    Next
    Else
    Local $arTmp[UBound($ARRAY)-1][$UBound2nd]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$i][$l]
    Next
    $k += 1
    EndIf
    Next
    EndIf
    EndIf
    $ARRAY = $arTmp
    Return 0
    EndFunc ;==>_Array2DDelete

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

    ;----------------------------------------------------------------------------------------------------------------------
    ;
    ; Function _Array2DSearch(ByRef $avArray, $vWhat2Find [, $iDim=-1 [, $iStart=0 [, $iEnd=0 [, $iCaseSense=0 [, $fPartialSearch=False [, $1stFound=False]]]]]])
    ;
    ; Description Finds all Entry's like $vWhat2Find in an 1D/2D Array
    ; Works with all occurences in 2nd Dimension
    ; Search in all occurences or only in a given column
    ; To set numeric values for default, you can use -1
    ;
    ; Parameter $avArray The array to search
    ; $vWhat2Find What to search $avArray for
    ; optional $iDim Index of Dimension to search; default -1 (all)
    ; optional $iStart Start array index for search; default 0
    ; optional $iEnd End array index for search; default 0
    ; optional $iCaseSense If set to 1 then search is case sensitive; default 0
    ; optional $fPartialSearch If set to True then executes a partial search. default False
    ; optional $1stFound If set to True, only one match will be searched; default False
    ;
    ; Return Succes Array with Index of matches, Array[0] includes the count of matches
    ; In an 2D Array you got for every match [iRow|iCol]
    ; Array[0] = 0 if no element found
    ; If option 1stFound is set, Array[0] = FoundIndex; if no element found Array[0] = -1
    ; Failure 1 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 given dim is out of range
    ; @error = 4 $iStart is out of range
    ; @error = 8 $iEnd is out of range
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DSearch(ByRef $avArray, $vWhat2Find, $iDim=-1, $iStart=0, $iEnd=0, $iCaseSense=0, $fPartialSearch=False, $1stFound=False)
    Local $error = 0, $1D, $arFound[1]=[0], $i, $k
    If $1stFound Then $arFound[0] = -1
    If ( Not IsArray($avArray) ) Then Return SetError(1,0,1)
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then $1D = True
    If ( $iEnd = 0 ) Or ( $iEnd = -1 ) Then $iEnd = UBound($avArray)-1
    If $iStart = -1 Then $iStart = 0
    If $iCaseSense = -1 Then $iCaseSense = 0
    If $iCaseSense <> 0 Then $iCaseSense = 1
    Select
    Case ( $iDim > $UBound2nd ) Or ( $iDim < -1 )
    $error += 2
    Case ( $iStart < 0 ) Or ( $iStart > UBound($avArray)-1 )
    $error += 4
    Case ( $iEnd < $iStart ) Or ( $iEnd > UBound($avArray)-1 )
    $error += 8
    EndSelect
    If $error <> 0 Then Return SetError($error,0,1)
    If $fPartialSearch <> True Then $fPartialSearch = False
    If $1D Then
    For $i = $iStart To $iEnd
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    Next
    Else
    For $i = $iStart To $iEnd
    If $iDim = -1 Then
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 0 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    EndSelect
    Else
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    EndIf
    Next
    EndIf
    Return $arFound
    EndFunc ;==>_Array2DSearch

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DMirror(ByRef $ARRAY)
    ;
    ; Description In an array will mirrored rows and columns.
    ; Row will be column and contrary.
    ; Works with any occurences in 2nd Dimension (parent array)
    ;
    ; Parameter $ARRAY 2D-Array
    ;
    ; Return Succes 0 rows and columns are mirrored
    ; Failure 1 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 given array has'nt 2 dimensions
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DMirror(ByRef $ARRAY)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    Local $i, $k
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then Return SetError(2,0,1)
    Local $arTMP[$UBound2nd][UBound($ARRAY)]
    For $i = 0 To UBound($ARRAY) -1
    For $k = 0 To UBound($ARRAY,2) -1
    $arTMP[$k][$i] = $ARRAY[$i][$k]
    Next
    Next
    $ARRAY = $arTMP
    Return 0
    EndFunc ;==>_Array2DMirror

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _SubArray2DGetEntry(ByRef $ARRAY, $SubRow, $ParentRow [, $SubCol=-1 [, $ParentCol=-1])
    ;
    ; Description For Array with Array as entry you got the determined entry
    ; Works with any occurences in 2nd Dimension (parent array and sub-array too)
    ; Works also with 1D-Array
    ;
    ; Parameter $ARRAY Given array with array as entrys
    ; $SubRow 0-based row -index of the entry inside the sub-array, you want to got
    ; $ParentRow 0-based row -index of parent-array
    ; optional $SubCol 0-based column -index of sub-array, (if exists)
    ; optional $ParentCol 0-based column -index of parent-array, (if exists)
    ;
    ; Return Succes value from determined sub-array
    ; Failure 1 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 row -index for parent-array out of range
    ; @error = 3 col -index for parent-array out of range
    ; @error = 4 col -index for parent-array is given, but array is 1D
    ; @error = 5 row -index for sub-array out of range
    ; @error = 6 col -index for sub-array out of range
    ; @error = 7 col -index for sub-array is given, but array is 1D
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _SubArray2DGetEntry(ByRef $ARRAY, $SubRow, $ParentRow, $SubCol=-1, $ParentCol=-1)
    If (Not IsArray($ARRAY)) Then Return SetError(1,0,1)
    If ($ParentRow < 0) Or ($ParentRow > UBound($ARRAY)-1) Then Return SetError(2,0,1)
    Local $Ub2ndParent = UBound($ARRAY, 2)
    If @error Then
    If $ParentCol <> -1 Then Return SetError(4,0,1)
    ElseIf ($ParentCol < -1) Or ($ParentCol > $Ub2ndParent-1) Then
    Return SetError(3,0,1)
    EndIf
    Switch $ParentCol
    Case -1
    Local $arSub = $ARRAY[$ParentRow]
    Case Else
    Local $arSub = $ARRAY[$ParentRow][$ParentCol]
    EndSwitch
    If ($SubRow < 0) Or ($SubRow > UBound($arSub)-1) Then Return SetError(5,0,1)
    Local $Ub2ndSub = UBound($arSub, 2)
    If @error Then
    If $SubCol <> -1 Then
    Return SetError(7,0,1)
    Else
    Return $arSub[$SubRow]
    EndIf
    Else
    If ($SubCol < 0) Or ($SubCol > $Ub2ndSub) Then
    Return SetError(6,0,1)
    Else
    Return $arSub[$SubRow][$SubCol]
    EndIf
    EndIf
    EndFunc ;==>_SubArray2DGetEntry

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _SubArray2DSetEntry(ByRef $ARRAY, $Entry, $SubRow, $ParentRow [, $SubCol=-1 [, $ParentCol=-1])
    ;
    ; Description For Array with Array as entry you set the determined entry
    ; Works with any occurences in 2nd Dimension (parent array and sub-array too)
    ; Works also with 1D-Array
    ;
    ; Parameter $ARRAY Given array with array as entrys
    ; $Entry Value you want to set in the sub-array
    ; $SubRow 0-based row -index of the entry inside the sub-array, you want to set
    ; $ParentRow 0-based row -index of parent-array
    ; optional $SubCol 0-based column -index of sub-array, (if exists)
    ; optional $ParentCol 0-based column -index of parent-array, (if exists)
    ;
    ; Return Succes 0 value is set
    ; Failure 1 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 row -index for parent-array out of range
    ; @error = 3 col -index for parent-array out of range
    ; @error = 4 col -index for parent-array is given, but array is 1D
    ; @error = 5 row -index for sub-array out of range
    ; @error = 6 col -index for sub-array out of range
    ; @error = 7 col -index for sub-array is given, but array is 1D
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _SubArray2DSetEntry(ByRef $ARRAY, $Entry, $SubRow, $ParentRow, $SubCol=-1, $ParentCol=-1)
    If (Not IsArray($ARRAY)) Then Return SetError(1,0,1)
    If ($ParentRow < 0) Or ($ParentRow > UBound($ARRAY)-1) Then Return SetError(2,0,1)
    Local $Ub2ndParent = UBound($ARRAY, 2)
    If @error Then
    If $ParentCol <> -1 Then Return SetError(4,0,1)
    ElseIf ($ParentCol < -1) Or ($ParentCol > $Ub2ndParent-1) Then
    Return SetError(3,0,1)
    EndIf
    Switch $ParentCol
    Case -1
    Local $arSub = $ARRAY[$ParentRow]
    Case Else
    Local $arSub = $ARRAY[$ParentRow][$ParentCol]
    EndSwitch
    If ($SubRow < 0) Or ($SubRow > UBound($arSub)-1) Then Return SetError(5,0,1)
    Local $Ub2ndSub = UBound($arSub, 2)
    If @error Then
    If $SubCol <> -1 Then
    Return SetError(7,0,1)
    Else
    $arSub[$SubRow] = $Entry
    EndIf
    Else
    If ($SubCol < 0) Or ($SubCol > $Ub2ndSub) Then
    Return SetError(6,0,1)
    Else
    $arSub[$SubRow][$SubCol] = $Entry
    EndIf
    EndIf
    Switch $ParentCol
    Case -1
    $ARRAY[$ParentRow] = $arSub
    Case Else
    $ARRAY[$ParentRow][$ParentCol] = $arSub
    EndSwitch
    Return 0
    EndFunc ;==>_SubArray2DSetEntry

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DSortByCountSameEntries(ByRef $ARRAY [, $iCol=0 [, $DESCENDING=1]])
    ;
    ; Description - Sorts an 1D/2D Array by count of same entries (2D - in a given column)
    ; - Count de- or ascending
    ;
    ; Parameter $ARRAY: Array to sort
    ; optional $iCol: Column with same entries to sort (default 0)
    ; optional $DESCENDING: Sort ascending[0]/descending[1] (default 1)
    ;
    ; Return Success 0 sorted array
    ; Failure 1 @error = 1, given array is not array
    ;
    ; Requirements _ArraySort_2ary() with #include <array.au3>
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DSortByCountSameEntries(ByRef $ARRAY, $iCol=0, $DESCENDING=1)
    If ( Not IsArray($ARRAY) ) Then Return SetError(1,0,1)
    If $DESCENDING <> 1 Then $DESCENDING = 0
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    Dim $aTMP[UBound($ARRAY)][2]
    For $i = 0 To UBound($ARRAY)-1
    $aTMP[$i][0] = 1
    $aTMP[$i][1] = $ARRAY[$i]
    Next
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If ($i > 0) And ($i < UBound($ARRAY)-1) Then
    If $ARRAY[$i] <> $aTMP[$k][1] Then
    For $x = $k To $i-1
    $aTMP[$x][0] = $i-$k
    Next
    $k = $i
    EndIf
    ElseIf $i = UBound($ARRAY)-1 Then
    If $ARRAY[$i] <> $aTMP[$k][1] Then
    For $x = $k To $i-1
    $aTMP[$x][0] = $i-$k
    Next
    $k = $i
    Else
    For $x = $k To $i
    $aTMP[$x][0] = $i-$k+1
    Next
    EndIf
    EndIf
    Next
    _ArraySort_2ary($aTMP, 0, $iCol, $DESCENDING)
    For $i = 0 To UBound($ARRAY)-1
    $ARRAY[$i] = $aTMP[$i][1]
    Next
    Else
    Dim $aTMP = $ARRAY
    ReDim $aTMP[UBound($ARRAY)][$UBound2nd+1]
    For $i = 0 To UBound($ARRAY)-1
    $aTMP[$i][$UBound2nd] = 1
    Next
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If ($i > 0) And ($i < UBound($ARRAY)-1) Then
    If $ARRAY[$i][$iCol] <> $aTMP[$k][$iCol] Then
    For $x = $k To $i-1
    $aTMP[$x][$UBound2nd] = $i-$k
    Next
    $k = $i
    EndIf
    ElseIf $i = UBound($ARRAY)-1 Then
    If $ARRAY[$i][$iCol] <> $aTMP[$k][$iCol] Then
    For $x = $k To $i-1
    $aTMP[$x][$UBound2nd] = $i-$k
    Next
    $k = $i
    Else
    For $x = $k To $i
    $aTMP[$x][$UBound2nd] = $i-$k+1
    Next
    EndIf
    EndIf
    Next
    _ArraySort_2ary($aTMP, $UBound2nd, $iCol, $DESCENDING)
    For $i = 0 To UBound($ARRAY)-1
    For $k = 0 To $UBound2nd-1
    $ARRAY[$i][$k] = $aTMP[$i][$k]
    Next
    Next
    EndIf
    Return 0
    EndFunc ;==>_Array2DSortByCountSameEntries

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

    ;===============================================================================
    ;
    ; Function Name: _Array2DPop($ARRAY)
    ; Description: Gibt das letzte Element eines 1D/2D-Arrays zurück und löscht dieses
    ; gleichzeitig vom Array
    ; Return: Erfolg: 1D = 1D-Array mit dem letzten Element
    ; 2D = 1D-Array mit jeweils einem Eintrag pro Spalte des letzten Elements
    ; Array[0] enthält die Anzahl der Elemente
    ; Fehler: Leerstring und @error = 1 ; Variable ist kein Array
    ; Author(s): Cephas <cephas at clergy dot net>
    ; Modified: BugFix ([email='bugfix@autoit.de'][/email]) ==> 2D-Anpassung
    ;
    ;===============================================================================
    Func _Array2DPop(ByRef $ARRAY)
    Local $LastValue = ''
    Local $aOut[1], $UBound2nd = UBound($ARRAY,2)
    If @error = 1 Then
    Return SetError(1,0,'')
    ElseIf @error = 2 Then
    $UBound2nd = 1
    $aOut[0] = $ARRAY[UBound($ARRAY) -1]
    $LastValue = $aOut
    Else
    ReDim $aOut[$Ubound2nd+1]
    $aOut[0] = 0
    For $i = 0 To $Ubound2nd -1
    $aOut[$i+1] = $ARRAY[UBound($ARRAY)-1][$i]
    $aOut[0] += 1
    Next
    $LastValue = $aOut
    EndIf
    If UBound($ARRAY) = 1 Then
    $ARRAY = ''
    Else
    If $UBound2nd = 1 Then
    ReDim $ARRAY[UBound($ARRAY) -1]
    Else
    ReDim $ARRAY[UBound($ARRAY) -1][$UBound2nd]
    EndIf
    EndIf
    Return $LastValue
    EndFunc ;==>_Array2DPop

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

    ;=====================================================================================
    ;
    ; Function Name: _Array2DPush($ARRAY, $Value [, $Direction=0])
    ; Description: Fügt einem Array Werte hinzu ohne die Arraygröße zu verändern.
    ; Werte können vom Ende (Standard) oder vom Anfang des Arrays zugefügt werden.
    ; Entsprechend der Anzahl der einzufügenden Werte wird eine gleiche Anzahl Elemente
    ; aus dem Array 'herausgeschoben' (ge-pusht)
    ; Parameter(s): $ARRAY - Array
    ; $Value - Der einzufügende Wert, oder mehrere Werte als Array
    ; $Direction - 0 = Linksseitiges Schieben (Einfügen vom Ende) (Standard)
    ; 1 = Rechtsseitiges Schieben (Einfügen vom Anfang)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 0
    ; On Failure - 1 und SetError
    ; @error = 1 kein Array
    ; @error = 2 Einfügearray größer als Originalarray
    ; @error = 3 Einfügearray und Originalarray haben unterschiedliche Dimensionen @error = 4 $Value ist Einzelwert, 2D-Array erwartet
    ; @error = 5 $Value ist 1D-Array, 2D-Array erwartet
    ; Author(s): Helias Gerassimou(hgeras)
    ; Modified: BugFix ([email='bugfix@autoit.de'][/email]) ==> 2D-Anpassung
    ;
    ;======================================================================================
    Func _Array2DPush(ByRef $ARRAY, $Value, $Direction=0)
    Local $i, $j, $k
    Local $arStatVal = IsArray($Value)
    Local $UBound1st = UBound($ARRAY)
    If @error = 1 Then Return SetError(1,0,1)
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    If $arStatVal Then
    Local $UbValue = UBound($Value)
    If $UbValue > $UBound1st Then Return SetError(2,0,1)
    If UBound($Value, 2) > 0 Then Return SetError(3,0,1)
    For $k = 0 To $UbValue -1
    If $Direction = 0 Then
    For $i = 0 To ($UBound1st -2)
    $ARRAY[$i] = $ARRAY[$i+1]
    Next
    $i = ($UBound1st -1)
    $ARRAY[$i] = $Value[$k]
    Else
    For $i = ($UBound1st -1) To 1 Step -1
    $ARRAY[$i] = $ARRAY[$i-1]
    Next
    $ARRAY[$i] = $Value[$UbValue -1 -$k]
    EndIf
    Next
    Else
    If $Direction = 0 Then
    For $i = 1 To $UBound1st -1
    $ARRAY[$i-1] = $ARRAY[$i]
    Next
    $ARRAY[$UBound1st-1] = $Value
    Else
    For $i = $UBound1st-1 To 1 Step -1
    $ARRAY[$i] = $ARRAY[$i-1]
    Next
    $ARRAY[0] = $Value
    EndIf
    EndIf
    Else
    Local $UbValue2nd = UBound($Value, 2)
    If @error = 1 Then
    Return SetError(4,0,1)
    ElseIf @error = 2 Then
    Return SetError(5,0,1)
    ElseIf UBound($Value) > $UBound1st Then
    Return SetError(2,0,1)
    ElseIf $Ubound2nd <> $UbValue2nd Then
    Return SetError(3,0,1)
    EndIf
    Local $UbValue = UBound($Value)
    For $k = 0 To $UbValue -1
    If $Direction = 0 Then
    For $i = 0 To ($UBound1st -2)
    For $j = 0 To $UBound2nd -1
    $ARRAY[$i][$j] = $ARRAY[$i+1][$j]
    Next
    Next
    $i = ($UBound1st -1)
    For $j = 0 To $UBound2nd -1
    $ARRAY[$i][$j] = $Value[$k][$j]
    Next
    Else
    For $i = ($UBound1st -1) To 1 Step -1
    For $j = 0 To $UBound2nd -1
    $ARRAY[$i][$j] = $ARRAY[$i-1][$j]
    Next
    Next
    For $j = 0 To $UBound2nd -1
    $ARRAY[$i][$j] = $Value[$UbValue -1 -$k][$j]
    Next
    EndIf
    Next
    EndIf
    Return 0
    EndFunc ;==>_Array2DPush

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

    ;==================================================================================================
    ; Function Name: _Array2DMinMax(ByRef $ARRAY [, $MAX=0 [, $iCol=0 [, $sDelim=';']]])
    ; Description:: gibt den minimalen od. maximalen Wert eines 1D/2D-Array zurück
    ; Überprüfung einer oder aller Spalten
    ; Parameter(s): $ARRAY das zu prüfende Array
    ; $MAX 0 = Minwert (Standard); 1 = Maxwert
    ; $iCol SpaltenIndex 0 = Standard
    ; -1 = alle Spalten werden geprüft
    ; $sDelim Trennzeichen f. Indexwerte, Standard ';'
    ; mit 'Default' Zeichen von Opt('GUIDataSeparatorChar')
    ; Return Value(s): Erfolg Array[0] = Max/Min-Wert; Array[1] = Index(Zeile [, Spalte])
    ; Fehler -1 @error = 1 kein Array übergeben
    ; @error = 2 $iCol überschreitet UBound,2
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _Array2DMinMax(ByRef $ARRAY, $MAX=0, $iCol=0, $sDelim=';')
    If Not IsArray($ARRAY) Then Return SetError(1,0,-1)
    Local $Ub2nd = UBound($ARRAY, 2)-1, $arOut[2] = [0]
    If $MAX <> 0 Then $MAX = 1
    If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar')
    If @error Then
    For $i = 0 To UBound($ARRAY) -1
    If $MAX = 1 Then
    If Number($ARRAY[$i]) > $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i])
    $arOut[1] = $i
    EndIf
    Else
    If $i = 0 Then
    $arOut[0] = Number($ARRAY[$i])
    $arOut[1] = $i
    EndIf
    If Number($ARRAY[$i]) < $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i])
    $arOut[1] = $i
    EndIf
    EndIf
    Next
    Else
    If $iCol > $Ub2nd Then Return SetError(2,0,-1)
    If $iCol < -1 Then $iCol = -1
    If $iCol = -1 Then
    For $i = 0 To UBound($ARRAY) -1
    For $k = 0 To $Ub2nd
    If $MAX = 1 Then
    If Number($ARRAY[$i][$k]) > $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i][$k])
    $arOut[1] = $i & $sDelim & $k
    EndIf
    Else
    If $i = 0 Then
    $arOut[0] = Number($ARRAY[$i][$k])
    $arOut[1] = $i & $sDelim & $k
    EndIf
    If Number($ARRAY[$i][$k]) < $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i][$k])
    $arOut[1] = $i & $sDelim & $k
    EndIf
    EndIf
    Next
    Next
    Else
    For $i = 0 To UBound($ARRAY) -1
    If $MAX = 1 Then
    If Number($ARRAY[$i][$iCol]) > $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i][$iCol])
    $arOut[1] = $i & $sDelim & $iCol
    EndIf
    Else
    If $i = 0 Then
    $arOut[0] = Number($ARRAY[$i][$iCol])
    $arOut[1] = $i & $sDelim & $iCol
    EndIf
    If Number($ARRAY[$i][$iCol]) < $arOut[0] Then
    $arOut[0] = Number($ARRAY[$i][$iCol])
    $arOut[1] = $i & $sDelim & $iCol
    EndIf
    EndIf
    Next
    EndIf
    EndIf
    Return $arOut
    EndFunc ;==>_Array2DMinMax

    [/autoit]
    • Offizieller Beitrag

    Könnt ihr das nachvollziehen:

    Ich bin im Portal/Dashboard (2 Beiträge sind als neu markiert) und klicke auf "alles als gelesen markieren". Dann werden aber die ersten 5 Beiträge als ungelesen markiert. Erst mit dem nächsten Klick wird alles als ungelesen markiert.
    Konnte ich bereits mehrfach reproduzieren.

  • Könnt ihr das nachvollziehen:

    Ich bin im Portal/Dashboard (2 Beiträge sind als neu markiert) und klicke auf "alles als gelesen markieren". Dann werden aber die ersten 5 Beiträge als ungelesen markiert. Erst mit dem nächsten Klick wird alles als ungelesen markiert.
    Konnte ich bereits mehrfach reproduzieren.

    Ja, kann ich bestätigen.

  • Diese Lösung ist noch nicht ganz optimal. Es ist von Haus aus nicht vorgesehen, das man aus dem Dashboard heraus Foren als gelesen markiert. Wurde aber gewünscht.

    Im Moment ist es so, das ich eine interne Klasse aufrufen lasse durch die dann die Themen als gelesen markiert werden. Die Kasse aktualisiert dann die Forenansicht um die ungelesen Markierung zu entfernen. Da wir uns aber auf der Dashboard Seite befinden werden hier die Markierungen nicht entfernt obwohl der Gelesen-Status bereits aktualisiert wurde. Die schnelle Lösung war dann, die aktuelle Seite (Dashboard) komplett neu laden zu lassen. Noch nicht wirklich perfekt - ich hab auch schon eine funktionierende Lösung parat allerdings muss ich dazu ein separates Plugin schreiben. Mach ich aber erst, wenn die Rechtevergabe komplett überarbeitet ist.

    @Andy Du hast in der SB heute irgendwo erwähnt, das die für dich relevanten Informationen im Dashboard jetzt unten links wären. Beziehst du dich dabei auf die "Letzten Beiträge"?

  • Noch etwas zum Dashboard. Das Dashboard bzw. die Sidebar ist vom Prinzip her nichts anderes als ein flexibleres Portal. Es lassen sich auf jede Seite des WCFs abgestimmte Boxen hinterlegen. Zum Beispiel in der Forenübersicht die letzten Beiträge und aktive Themen, auf der Mitgliederseite die Mitgliedersuche und die Teamliste oder eben auf der Startseite der bekannte Inhalt der Portalboxen. Da es sich um ein integriertes System handelt, ist es natürlich deutlich weniger fehlerbehaftet als ein Drittanbieter-Plugin (Portal).

    Das sich die Sidebar auf der rechten Seite befindet liegt einzig und allein an der Philosophie der Entwickler. Man liest von links nach rechts. Daher sollten relevante Inhalte links angezeigt werden und Zusatzinformationen rechts. Ich kann mich dem nur anschliessen und nutze Sidebars auch schon seit langem nach diesem Prinzip.

    Die Optik der Sidebar selbst ist auch nicht ganz mein Fall. Sie ist halt nur ein optionales Beiwerk und hebt sich dementsprechend auch vom Rest der Seite ab. Aber mit ein bisschen CSS schafft man es dann auch ihr den look von Portalboxen aufzuzwingen. Hat für mich aber momentan eher keine Priorität da ich mir immer noch konstruktive und ausgearbeitete Vorschläge zum Thema Design erhoffe.

  • Andy Du hast in der SB heute irgendwo erwähnt, das die für dich relevanten Informationen im Dashboard jetzt unten links wären. Beziehst du dich dabei auf die "Letzten Beiträge"?

    Ja, das was an einem Forum wichtig (sic) ist, sind die Beiträge. Wenn ich die Seite öffne nehmen die relevanten Daten einen minimalen Bereich auf dem Bildschirm ein, dazu noch an exponiert ungünstiger Position umten links!Mit dem Kontrollzentrum links wären die Beiträge wenigstens in der Mitte.

    Hat für mich aber momentan eher keine Priorität da ich mir immer noch konstruktive und ausgearbeitete Vorschläge zum Thema Design erhoffe.

    Design...
    Die grellbunten" Offen/Gelöst -Buttons ziehen die Blicke auf sich, stört massiv den Lesefluss und die Buttons zerhacken den optischen Eindruck der Site. Wer braucht die überhaupt und warum? Sollten als Icons zusammen mit den Beiträge/Umfrage/Abboniert-Icons in diese Zeile.

    Der Avatar bei der letzten Antwort ist ok, vor den Beiträgen aber eher störend, vor allem mit dem Mini-Avatar und ggf "Sternchen" wird Aufmerksamkeit gefordert, die Information ist aber eher irrelevant.
    Die Kontrollzentrum-Überschriften sollten so aussehen wie "Shoutbox" + "Letzte Beiträge" weiße Schrift/blauer Grund.

    Was (mich) weiterhin stört ist das gehovere. Ich muss mit der Maus so lange über den Bildschirm maneuvrieren, bis irgendwann die gesuchten Informationen erscheinen, WENN ich weiß, dass sie an dieser Position sind. Bspw. in der Threaddarstellung "Zitieren/Inhalt melden/Verwarnen..."-Button. Die gehören festgepinnt.
    Btw. ist die Darstellung der einzelnen Postings im Thread also Schriftart/Farbwahl gut gelungen! Wenn jetzt noch die Links sichtbar werden, ist dort alles paletti

    Auf der FORUM-Seite brauchts das hovern der Themenbereiche auch nicht, besser wäre imho gleich eine farbiges Absetzen der einzelnen Zeilen.
    Generell ist weniger=mehr.
    Wir sind hier ein seriöses Programmier-Forum für eine Scriptsprache, und keine Machbarkeitsstudie, was alles bei "modernem" Webdesign möglich ist!

    Vorerst genug gemeckert, du bekommst das hin :thumbup:

    //EDIT was massiv stört, ist dass ich im Browser die Site nur einmal geöffnet haben darf, ansonsten hagelt es Abmeldungs-Meldungen. Die Meldung, dass ich in der SB irgendwelche Zeiten über/unterschritten habe kannst du nach 1 Sekunde direkt wieder ausblenden. So etwas wegzuklicken, dafür ist mir meine Zeit echt zu schade...

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (19. Oktober 2014 um 22:24)

  • Ja, das was an einem Forum wichtig (sic) ist, sind die Beiträge. Wenn ich die Seite öffne nehmen die relevanten Daten einen minimalen Bereich auf dem Bildschirm ein, dazu noch an exponiert ungünstiger Position umten links!Mit dem Kontrollzentrum links wären die Beiträge wenigstens in der Mitte.


    Ok. Das Dachte ich mir. Die SB wird dort zeitnah verschwinden und die Letzten Beiträge somit nach oben rutschen.

    Zitat

    Die grellbunten" Offen/Gelöst -Buttons ziehen die Blicke auf sich, stört massiv den Lesefluss und die Buttons zerhacken den optischen Eindruck der Site. Wer braucht die überhaupt und warum? Sollten als Icons zusammen mit den Beiträge/Umfrage/Abboniert-Icons in diese Zeile.


    Das sind labels. Sozusagen die neuen Präfixe. Wenn die euch allgemein zu bunt sind, geht's auch schlichter. Ob sich da allgemein eine Lösung mit Icons finden lässt ... aktuell keine Ahnung.

    Zitat

    Der Avatar bei der letzten Antwort ist ok, vor den Beiträgen aber eher störend, vor allem mit dem Mini-Avatar und ggf "Sternchen" wird Aufmerksamkeit gefordert, die Information ist aber eher irrelevant.

    Zitat

    Die Kontrollzentrum-Überschriften sollten so aussehen wie "Shoutbox" + "Letzte Beiträge" weiße Schrift/blauer Grund.


    Wie oben erwähnt - ich strebe da einen portalähnlichen look an.

    Zitat

    Was (mich) weiterhin stört ist das gehovere. Ich muss mit der Maus so lange über den Bildschirm maneuvrieren, bis irgendwann die gesuchten Informationen erscheinen, WENN ich weiß, dass sie an dieser Position sind. Bspw. in der Threaddarstellung "Zitieren/Inhalt melden/Verwarnen..."-Button. Die gehören festgepinnt.
    Btw. ist die Darstellung der einzelnen Postings im Thread also Schriftart/Farbwahl gut gelungen! Wenn jetzt noch die Links sichtbar werden, ist dort alles paletti


    Das hovern der Buttons in den Beiträgen wollte ich ursprünglich auch deaktivieren. Dachte dann aber, das sich einige User darüber beschweren würden. Weil die nehmen dann Platz weg etc ..... Wir probieren es mal.

    Zitat

    Auf der FORUM-Seite brauchts das hovern der Themenbereiche auch nicht, besser wäre imho gleich eine farbiges Absetzen der einzelnen Zeilen.


    OK

    Zitat

    //EDIT was massiv stört, ist dass ich im Browser die Site nur einmal geöffnet haben darf, ansonsten hagelt es Abmeldungs-Meldungen. Die Meldung, dass ich in der SB irgendwelche Zeiten über/unterschritten habe kannst du nach 1 Sekunde direkt wieder ausblenden. So etwas wegzuklicken, dafür ist mir meine Zeit echt zu schade...


    Darauf habe ich leider keinen Einfluss. Und die SB verschwindet wie erwähnt balt™

  • @i2c, klasse und schnell umgesetzt! Danke.

    Das hovern der Buttons in den Beiträgen wollte ich ursprünglich auch deaktivieren. Dachte dann aber, das sich einige User darüber beschweren würden. Weil die nehmen dann Platz weg etc ..... Wir probieren es mal.

    Die Buttons sind sowieso immer an dieser Stelle und der Platz auch nicht von anderen Boxen benötigt. Aber das ist jammern auf hohem Niveau...

    SB wird dort zeitnah verschwinden und die Letzten Beiträge somit nach oben rutschen.

    Gut, irgendwo hatte ich es schon mal geschrieben, Chat"Button" mit Anzahl der Teilnehmer in der obersten Zeile zu den Nachrichten, das erspart den Wechsel zu Chat, wenn sowieso niemand online ist. Was ich übrigens klasse finde ist dass die bisherigen Nachrichten im Chat bleiben, auch wenn niemand online ist.

  • Hallo,
    Erst muß ich zugeben das ich mir nicht den gesammten Thread durchgelesen habe, hier geht es auch zu 90% um die Desktop Version...

    Hier geht es jetzt um die mobile Version:
    Grundsätzlich fühlt sich die Seite jetzt viel besser an und läuft auch schneller!
    Hätte aber gerne die Möglichkeit auf die Desktop-Version umzuschalten.
    Ganz oben befindet sich eine Menüzeile, dise lässt sich seit einigen Tagen nicht mehr richtig lesen - ist zu dunkel geworden.
    Es gab auf dem Portal kleine Icons vom TE, welche bei neuen Posts mit einem praktischen Symbol versehen waren. Jetzt muß ich auf die Textdicke achten...
    Auch habe ich keine Möglichkeit mehr zu Stalken, mir wird nicht angezeigt wer wo Online ist :)

    Die Umstellung ist zwar noch nicht 100%ig, aber ich finde es klasse! Top Arbeit!

    Grüße!

    [Edit]
    Habe gerade den OrangeMod Style aktiviert, und dort treten die Probleme überhaupt nicht auf! Und besser noch, wenn ich jetzt am tippen bin kann ich sogar über 2 Zeilen lesen (quer) mit dem standart Style war es nur eine halbe Zeile.

    Einmal editiert, zuletzt von Techmix (20. Oktober 2014 um 17:15)

  • Ja da hat Gun was nettes gebastelt. Ich bin seit gestern abend dabei, nebenbei etwas ähnliches auch als dunkle (blau) Version zu bauen. Ähnelt sich vom Grundaufbau sehr stark. Tendiert eher zum AutoIt-blau gemischt mit etwas orange orange. Grundsätzlich ist ja jetzt bekannt, worauf ihr hier ein Hauptaugenmerk werft.

    Zur Menüzeile: Du meinst warscheinlich die nicht aktiven Eleente?

    Zu den Avataren: Nach Meinung einiger User waren die überflüssig und eher unnötig und störend. Deshalb sind sie in den Themenauflistungen verschwunden.

    Zitat

    Hätte aber gerne die Möglichkeit auf die Desktop-Version umzuschalten.


    Das wird nicht möglich sein. Es gibt keine getrennten Versionen für Desktop und Mobilgeräte.

    • Offizieller Beitrag

    Es gibt keine getrennten Versionen für Desktop und Mobilgeräte.


    Aber zumimdest ist die Darstellung auf Mobilgeräten unvollständig. In der Beitragsliste sind die Spalten für Zugriffe und Antworten nicht sichtbar, somit kann man nicht direkt zum letzten Beitrag springen.

    So sieht es aus: http://piks.nl/zZ4

    EDIT:
    Da war ich zu vorschnell, es ist nur ein anderes Verhalten. Klicke ich am PC auf die Überschrift des Threads, wird zum Start Thema gesprungen. Auf mobilen Geräten springt man damit zum letzten Beitrag.
    Praktisch, wenn man es weiß. ;)

  • Beim "Zum Seitenende"-Scrollbutton hab ich ein instinktives Verlangen, etwas herunterzuladen. Ich hab mich sogar ein paar mal dabei erwischt, bei denen ich ausversehen nach unten gescrollt habe, weil ich wissen wollte, was für ein Download dahinter steckt :/

    Ansonsten : Toll, dass das Logo nicht mehr bei 2012 hängen geblieben ist :D

  • Meine Vorschläge:

    1. Den Unterschied zwischen gelesenen und ungelesenen Topics etwas verstärken (Das Bold für ungelesen fällt kaum auf)

    2. Den Unterschied zwischen offenen und gelösten Topics verändern (z.B. durch Gründe Farbe für gelöst)

  • Den Unterschied zwischen offenen und gelösten Topics verändern

    Mich würde mal interessieren, warum auf eine "un/gelöstes" Topic so viel Wert gelegt wird, dass jemand dafür eine Anzeige benötigt. Mich juckt das nämlich aus mehreren Gründen überhaupt nicht:
    - Gelöst/ungelöst sagt nichts über den Threadverlauf bzw. die letzte gegebene Antwort.
    - Wenn mich das Thema interessiert, ist der Staus gelöst/ungelöst überflüssig, der Thread wird gelesen.
    - Wenn der TE bereits mehrere Lösungsmöglichkeiten genannt bekommen hat, wobei aber die Antwort eines "Spezialisten" noch fehlt, ist jegliche Markierung überflüssig. Der Spezialist schreibt seine "beste" Lösung unter einen gelösten wie ungelösten Thread, ansonsten brauchen wir kein Forum!
    - Die Markierung macht Sinn für "Punktejäger", da man bei Antworten ungelöster Threads eher "Punkte" (Likes/beste Antwort usw.) bekommt. Unabhängig von der Qualität der Antwort werden idR. "schnelle" Antworten bewertet. Ohne Punkte kein Anreiz für Punktejäger, die Menge der Antworten reduziert sich auf diejenigen, die ohne Punkte eine Antwort geben. Threads ohne Markierung => reduziert Menge der "ich weiss auch was"-Antworten => Qualitätsverbesserung.
    - Leichenschänden: Nachgefragt bei Leichenschändern, wieso sie diese Threads ausgegraben haben, bekam ich schon die Antwort "Thread steht doch auf ungelöst!". Nach 7 Jahren....
    - Werden Threads nach einiger Zeit nicht "zwangsgelöst" geschaltet, bringt das System nichts! Werden sie aber nach einiger Zeit ohne Antwort automatisch "zwangsgelöst" geschaltet, braucht man keine gelöst/ungelöst-Markierung.

    Was konkret bringt also die Filterung/Markierung gelöst/ungelöst?

  • Mich würde mal interessieren, warum auf eine "un/gelöstes" Topic so viel Wert gelegt wird, dass jemand dafür eine Anzeige benötigt. Mich juckt das nämlich aus mehreren Gründen überhaupt nicht:

    Ich besuche keinen Thread, der gelöst ist. Setzt der TE den Flag, dann reicht ihm die Lösung, und er weiß schließlich am B(/b?)esten was er will ;)