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

Beiträge von funkey

  • GUICtrlCreate Problem mit Spalte

    • funkey
    • 4. September 2012 um 16:40

    RedHead: Bitte 'Bearbeiten-Button' verwenden und nicht zweimal innerhalb einer Minute posten.

  • Texteingabe inkl. Enter

    • funkey
    • 4. September 2012 um 12:34

    Hab zur Zeit ein ähnliches Problem. Es funktioniert zwar mit ControlSetText und ControlSend auf den ersten Blick problemlos. Aber da ich zu Simulationszwecken alle 2 Sekunden den Wert eines Edit-Controls neu setzen muss, stört ControlSend den meinen Ablauf auf dem PC ein wenig (Tastenanschläge werden nicht immer richtig angenommen). Vielleicht findet da ja jemand eine andere Lösung, wenn nicht ist es aber auch nicht so schlimm.

  • Amazon Kindle - Kaufen?

    • funkey
    • 4. September 2012 um 09:46

    Ich hab zwar einen anderen PDF-Reader, würde mir aber das nächste mal sicher einen Kindle kaufen, alleine schon wegen dem Display.

  • Modulo als Bitoperation

    • funkey
    • 4. September 2012 um 09:09

    Hier sind 3 Möglichkeiten aufgeführt:
    http://graphics.stanford.edu/~seander/bitha…lusDivisionEasy

  • LibNoDave-UDF zur Kommunikation mit Simatic SPS

    • funkey
    • 3. September 2012 um 17:55

    Hallo.
    Anbei mal die aktuellste LibNoDave-UDF, die ich finden konnte.

    Zitat von m-obi

    Wie kann ich denn einen DB auslesen von einem Zähler (CTU)?


    Du willst aktuelle Zählerwerte auslesen?
    Das sollte mit _daveReadBytes() und _DaveGetCounterValue() gehen.

    Zu zweitens. Keine Ahnung. Ich setze normalerweise keine Ausgänge, wenn dann Merker, die dann die Ausgänge setzen. Abe könnte es sein, dass die Ausgänge bereits im Programm verwendet wurden, dann werden sie natürlich von der SPS wieder überschrieben.

    P.S.: Hast du alle Funktionen umbenannt??

    Dateien

    LibNoDave.au3 119,08 kB – 597 Downloads
  • Schriftfarbe aus Worddatei auslesen

    • funkey
    • 29. August 2012 um 17:42

    docx-Dateien kann man ja in rar umbenennen und entpacken.
    Mach mal eine Datei mit schwarz und eine Datei mit rot und such dann im Archiv nach unterschieden.
    Das wäre zumindest mein Lösungsansatz, wie einfach oder schwer das wird kann ich dir aber nicht sagen.

  • LibNoDave-UDF zur Kommunikation mit Simatic SPS

    • funkey
    • 29. August 2012 um 15:37

    Nein, aber warum braucht man die?
    Müsste doch genügen bei _daveNewInterface() das Protokoll $daveProtoPPI zu übergeben.

  • LibNoDave-UDF zur Kommunikation mit Simatic SPS

    • funkey
    • 29. August 2012 um 09:01

    Am besten ist natürlich AGLink, wahrscheinlich aber am teuersten. Ich würde einfach mal mit LibNoDave probieren und wenn es dann einfach nicht will, eine andere (kostenpflichtige) Variante wählen.

  • LibNoDave-UDF zur Kommunikation mit Simatic SPS

    • funkey
    • 29. August 2012 um 08:53

    Ich benutze IPS7LNK von Träger, AGLink von Deltalogic, LibNoDave und eine eigene DLL, welche aber noch nicht fertig ist (nur lesen zur Zeit).
    Ich habe noch nichts mit einer S7-1200 zu tun gehabt. Man hört aber, dass LibNoDave nur teilweise funktioniert (SPS-Forum). Verbunden wird mit Rack und Slot = 0.

  • LibNoDave-UDF zur Kommunikation mit Simatic SPS

    • funkey
    • 29. August 2012 um 07:54

    Nein, aber ich muss mal suchen, wo ich die aktuellste Version im Einsatz habe. Ich hab da einen ziemlichen Wirrwarr, denn mit jedem neuen Projekt habe ich die UDF ein wenig angepasst.
    Und mittlerweile arbeite ich mit 4 verschiedenen Bibliotheken (DLLs) für die Kommunikation mit einer S7-SPS. (Und ich habe auch schon die Kommunikation direkt in AutoIt nachgebaut, zumindest TCP)

  • mp3 zusammenfügen

    • funkey
    • 27. August 2012 um 09:18

    Das ist aber komisch, das sollte nicht richtig funktionieren. Wird die Länge richtig angezeigt? Wie sieht es mit den Tags aus?

  • mp3 zusammenfügen

    • funkey
    • 27. August 2012 um 09:15

    Damit kann man sicher mehere Dateien binär in eine einzige Mp3 verknüpfen, aber abgespielt wird dann sicher trotzdem nur die erste Datei.
    Nur mit AttoIt ist das sicher nicht ohne weiteres möglich, ich würde Merge MP3 verwenden.

  • Dll erstellen und mit AutoIt nutzen - FreeBasic Tutorial

    • funkey
    • 20. August 2012 um 12:58

    Vielen Dank! Sehr nützliches Tutorial!

  • Neues Control: Living Graph

    • funkey
    • 20. August 2012 um 10:20

    @Dieter: Hast du dir das Beispiel-Skript mal angeschaut? Das wird absichtilich nach 3 Sekunden gemacht um diese Funktionalität zu zeigen.

    BugFix : Ich hätte da einen Bug zum fixen ;):
    Wenn man beim erstem Control die Strichstärke auf 2 oder mehr erhöht, dann sieht man auch beim zweiten Control eine Veränderung.
    Außerdem wollte ich fragen wofür man denn die Density braucht? Kann man die nicht aus Größe des Controls und Laufzeit (EpochTime) errechnen?

  • Neues Control: Living Graph

    • funkey
    • 20. August 2012 um 09:51

    Gefällt mir sehr gut und kann ich sicher brauchen! :thumbup:

    Thanks for sharing!

  • _FileWriteFromArray2D und _FileReadToArray2D

    • funkey
    • 16. August 2012 um 18:56

    Hab's mir noch nicht angeschaut, wird aber sicher super laufen. Aber sollte es nicht _FileReadToArray2D heißen?

  • Computername über DLL ermitteln

    • funkey
    • 14. August 2012 um 17:17

    Normalerweise sollten 100 Zeichen genügen dachte ich. Ich hab jedenfalls keine Namen über 20 Zeichen vergeben. Man kann aber natürlich auf Nummer sicher gehen und 65536 anstelle von 100 schreiben, da AutoIt Strings mit mindestens dieser Größe bereitstellt.

  • Arraylimit von 65.530 übersteigen

    • funkey
    • 14. August 2012 um 16:22

    Die alte Funktion, mit der das AutoIt-Limit übergangen wurde war fehlerhaft, wie im Trac 1833 beschrieben.
    Wenn das Windows-Limit von 4094 Zeichen pro Eintrag überschritten wurde, dann wurde der String nicht abgeschnitten, sondern einfach nichts mehr angezeigt.
    Das dürfte aber trotzdem irgendwie zu beheben sein, denke ich.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    Dim $A [6][2] ; Array of strings, col 0 is only for documentation
    ; col 1 is the string
    dim $s_long = "XXXXXXXXXX" ; build a very long string
    $s_long = StringReplace($s_long,"X","XXXXXXXXXX") ; 100 bytes
    $s_long = stringreplace($s_long,"X","XXXXXXXXXX") ;1,000 -,,-
    $s_long = StringReplace($s_long,"X","XXXXX") ;5,000 -,,- long
    $A[1][0] = 4093
    $A[1][1] =stringleft($s_long,$A[1][0])
    $A[2][0] = 4094
    $A[2][1] =stringleft($s_long,$A[2][0])
    $A[3][0] = 4095
    $A[3][1] =stringleft($s_long,$A[3][0])
    $A[4][0] = 4096
    $A[4][1] =stringleft($s_long,$A[4][0])
    $A[5][0] = 0
    $A[5][1] = ""

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

    _ArrayDisplayOLD($A)
    _ArrayDisplayNEW($A)

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

    #cs
    Col 0 is the length of col 1 element
    but with one-dimensional array hapens the same,
    Col 0 is hopefuly helpful at display
    #ce

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

    ;aus Version 3.3.6.1
    Func _ArrayDisplayOLD(Const ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|", $sHeader = "")
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)
    ; Dimension checking
    Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
    If $iDimension > 2 Then Return SetError(2, 0, 0)

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

    ; Separator handling
    ;~ If $sSeparator = "" Then $sSeparator = Chr(1)
    If $sSeparator = "" Then $sSeparator = Chr(124)

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

    ; Check the separator to make sure it's not used literally in the array
    If _ArraySearch($avArray, $sSeparator, 0, 0, 0, 1) <> -1 Then
    For $x = 1 To 255
    If $x >= 32 And $x <= 127 Then ContinueLoop
    Local $sFind = _ArraySearch($avArray, Chr($x), 0, 0, 0, 1)
    If $sFind = -1 Then
    $sSeparator = Chr($x)
    ExitLoop
    EndIf
    Next
    EndIf

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

    ; Declare variables
    Local $vTmp, $iBuffer = 64
    Local $iColLimit = 250
    Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)

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

    ; Swap dimensions if transposing
    If $iSubMax < 0 Then $iSubMax = 0
    If $iTranspose Then
    $vTmp = $iUBound
    $iUBound = $iSubMax
    $iSubMax = $vTmp
    EndIf

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

    ; Set limits for dimensions
    If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
    If $iItemLimit < 1 Then $iItemLimit = $iUBound
    If $iUBound > $iItemLimit Then $iUBound = $iItemLimit

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

    ; Set header up
    If $sHeader = "" Then
    $sHeader = "Row " ; blanks added to adjust column size for big number of rows
    For $i = 0 To $iSubMax
    $sHeader &= $sSeparator & "Col " & $i
    Next
    EndIf

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

    ; Convert array into text for listview
    Local $avArrayText[$iUBound + 1]
    For $i = 0 To $iUBound
    $avArrayText[$i] = "[" & $i & "]"
    For $j = 0 To $iSubMax
    ; Get current item
    If $iDimension = 1 Then
    If $iTranspose Then
    $vTmp = $avArray[$j]
    Else
    $vTmp = $avArray[$i]
    EndIf
    Else
    If $iTranspose Then
    $vTmp = $avArray[$j][$i]
    Else
    $vTmp = $avArray[$i][$j]
    EndIf
    EndIf

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

    ; Add to text array
    $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
    $avArrayText[$i] &= $sSeparator & $vTmp

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

    ; Set max buffer size
    $vTmp = StringLen($vTmp)
    If $vTmp > $iBuffer Then $iBuffer = $vTmp
    Next
    Next
    $iBuffer += 1

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

    ; GUI Constants
    Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
    Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
    Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
    Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
    Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
    Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
    Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
    Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
    Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
    Local Const $_ARRAYCONSTANT_LVM_INSERTITEMW = (0x1000 + 77)
    Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
    Local Const $_ARRAYCONSTANT_LVM_SETITEMW = (0x1000 + 76)
    Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
    Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
    Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
    Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
    Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
    Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
    Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
    Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"

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

    Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
    Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
    Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
    DllStructSetData($tItem, "Param", 0)
    DllStructSetData($tItem, "Text", $pBuffer)
    DllStructSetData($tItem, "TextMax", $iBuffer)

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

    ; Set interface up
    Local $iWidth = 640, $iHeight = 480
    Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
    Local $aiGUISize = WinGetClientSize($hGUI)
    Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
    Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
    GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
    GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)

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

    ; Fill listview
    Local $aItem
    For $i = 0 To $iUBound
    If GUICtrlCreateListViewItem($avArrayText[$i], $hListView) = 0 Then
    ; use GUICtrlSendMsg() to overcome AutoIt limitation
    $aItem = StringSplit($avArrayText[$i], $sSeparator)
    DllStructSetData($tBuffer, "Text", $aItem[1])

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

    ; Add listview item
    DllStructSetData($tItem, "Item", $i)
    DllStructSetData($tItem, "SubItem", 0)
    DllStructSetData($tItem, "Mask", $iAddMask)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $pItem)

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

    ; Set listview subitem text
    DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
    For $j = 2 To $aItem[0]
    DllStructSetData($tBuffer, "Text", $aItem[$j])
    DllStructSetData($tItem, "SubItem", $j - 1)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMW, 0, $pItem)
    Next
    EndIf
    Next

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

    ; adjust window width
    $iWidth = 0
    For $i = 0 To $iSubMax + 1
    $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
    Next
    If $iWidth < 250 Then $iWidth = 230
    $iWidth += 20

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

    If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100

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

    WinMove($hGUI, "", (@DesktopWidth - $iWidth)/2, Default, $iWidth)

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

    ; Show dialog
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    Switch GUIGetMsg()
    Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
    ExitLoop

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

    Case $hCopy
    Local $sClip = ""

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

    ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
    Local $aiCurItems[1] = [0]
    For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
    If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
    $aiCurItems[0] += 1
    ReDim $aiCurItems[$aiCurItems[0] + 1]
    $aiCurItems[$aiCurItems[0]] = $i
    EndIf
    Next

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

    ; Generate clipboard text
    If Not $aiCurItems[0] Then
    For $sItem In $avArrayText
    $sClip &= $sItem & @CRLF
    Next
    Else
    For $i = 1 To UBound($aiCurItems) - 1
    $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
    Next
    EndIf
    ClipPut($sClip)
    EndSwitch
    WEnd
    GUIDelete($hGUI)

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

    Opt("GUIOnEventMode", $iOnEventMode)
    Opt("GUIDataSeparatorChar", $sDataSeparatorChar)

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

    Return 1
    EndFunc ;==>_ArrayDisplay

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

    ; aus Version 3.3.8.1
    Func _ArrayDisplayNEW(Const ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|", $sHeader = "")
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)
    ; Dimension checking
    Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
    If $iDimension > 2 Then Return SetError(2, 0, 0)

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

    ; Separator handling
    If $sSeparator = "" Then $sSeparator = Chr(124)

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

    ; Check the separator to make sure it's not used literally in the array
    If _ArraySearch($avArray, $sSeparator, 0, 0, 0, 1) <> -1 Then
    For $x = 1 To 255
    If $x >= 32 And $x <= 127 Then ContinueLoop
    Local $sFind = _ArraySearch($avArray, Chr($x), 0, 0, 0, 1)
    If $sFind = -1 Then
    $sSeparator = Chr($x)
    ExitLoop
    EndIf
    Next
    EndIf

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

    ; Declare variables
    Local $vTmp, $iBuffer = 4094 ; AutoIt max item size
    Local $iColLimit = 250
    Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)

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

    ; Swap dimensions if transposing
    If $iSubMax < 0 Then $iSubMax = 0
    If $iTranspose Then
    $vTmp = $iUBound
    $iUBound = $iSubMax
    $iSubMax = $vTmp
    EndIf

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

    ; Set limits for dimensions
    If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
    If $iItemLimit < 1 Then $iItemLimit = $iUBound
    If $iUBound > $iItemLimit Then $iUBound = $iItemLimit

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

    ; Set header up
    If $sHeader = "" Then
    $sHeader = "Row " ; blanks added to adjust column size for big number of rows
    For $i = 0 To $iSubMax
    $sHeader &= $sSeparator & "Col " & $i
    Next
    EndIf

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

    ; Convert array into text for listview
    Local $avArrayText[$iUBound + 1]
    For $i = 0 To $iUBound
    $avArrayText[$i] = "[" & $i & "]"
    For $j = 0 To $iSubMax
    ; Get current item
    If $iDimension = 1 Then
    If $iTranspose Then
    $vTmp = $avArray[$j]
    Else
    $vTmp = $avArray[$i]
    EndIf
    Else
    If $iTranspose Then
    $vTmp = $avArray[$j][$i]
    Else
    $vTmp = $avArray[$i][$j]
    EndIf
    EndIf

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

    ; Add to text array
    $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)

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

    ; Set max buffer size
    If StringLen($vTmp) > $iBuffer Then $vTmp = StringLeft($vTmp, $iBuffer)

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

    $avArrayText[$i] &= $sSeparator & $vTmp
    Next
    Next

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

    ; GUI Constants
    Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
    Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
    Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
    Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
    Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
    Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
    Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
    Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
    Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
    Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
    Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
    Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
    Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
    Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
    Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000

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

    ; Set interface up
    Local $iWidth = 640, $iHeight = 480
    Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
    Local $aiGUISize = WinGetClientSize($hGUI)
    Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
    Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
    GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
    GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)

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

    ; Fill listview
    For $i = 0 To $iUBound
    GUICtrlCreateListViewItem($avArrayText[$i], $hListView)
    Next

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

    ; adjust window width
    $iWidth = 0
    For $i = 0 To $iSubMax + 1
    $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
    Next
    If $iWidth < 250 Then $iWidth = 230
    $iWidth += 20

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

    If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100

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

    WinMove($hGUI, "", (@DesktopWidth - $iWidth) / 2, Default, $iWidth)

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

    ; Show dialog
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    Switch GUIGetMsg()
    Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
    ExitLoop

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

    Case $hCopy
    Local $sClip = ""

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

    ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
    Local $aiCurItems[1] = [0]
    For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
    If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
    $aiCurItems[0] += 1
    ReDim $aiCurItems[$aiCurItems[0] + 1]
    $aiCurItems[$aiCurItems[0]] = $i
    EndIf
    Next

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

    ; Generate clipboard text
    If Not $aiCurItems[0] Then
    For $sItem In $avArrayText
    $sClip &= $sItem & @CRLF
    Next
    Else
    For $i = 1 To UBound($aiCurItems) - 1
    $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
    Next
    EndIf
    ClipPut($sClip)
    EndSwitch
    WEnd
    GUIDelete($hGUI)

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

    Opt("GUIOnEventMode", $iOnEventMode)
    Opt("GUIDataSeparatorChar", $sDataSeparatorChar)

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

    Return 1
    EndFunc ;==>_ArrayDisplay

    [/autoit]
  • Arraylimit von 65.530 übersteigen

    • funkey
    • 14. August 2012 um 14:49

    Komisch in der Beta 3.3.9.1 wurde sogar noch folgendes zur Dokumentation hinzugefügt.

    Code
    - Added #2126: Documentation remark about _ArrayDisplay being able to display a maximum of 65530 items.


    Demnach ist es und war es nicht möglich mehr als die angegebene Anzahl von Elementen darzustellen.

    Hm, komisch.
    Hier noch ein kleines Skript, das meine Theorie unterstützen sollte.

    [autoit]

    #include <Array.au3>

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

    Global $a[65531]
    $a[UBound($a) -1] = "Test"

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

    _ArrayDisplay($a) ;letztes Element sichtbar

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

    GUICreate("Test")
    GUICtrlCreateButton("Hallo", 10, 10)

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

    _ArrayDisplay($a) ;letztes Element nicht mehr sichtbar

    [/autoit]
  • Arraylimit von 65.530 übersteigen

    • funkey
    • 14. August 2012 um 14:34

    Bei mir können maximal 65531 Elemente angezeigt werden (WinXP x86). Ein Control ist ja die ListView selbst. Vielleicht ist das Limit in einer der letzten Beta-Versionen angehoben worden, die du vielleicht benutzt. Oder es hängt wirklich vom Betriebssystem ab, was ich mir aber eigentlich nicht vorstellen kann. Es könnte aber auch die x64-Version von AutoIt andere Limits verwenden!?

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™