RedHead: Bitte 'Bearbeiten-Button' verwenden und nicht zweimal innerhalb einer Minute posten.
Beiträge von funkey
-
-
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.
-
Ich hab zwar einen anderen PDF-Reader, würde mir aber das nächste mal sicher einen Kindle kaufen, alleine schon wegen dem Display.
-
Hier sind 3 Möglichkeiten aufgeführt:
http://graphics.stanford.edu/~seander/bitha…lusDivisionEasy -
Hallo.
Anbei mal die aktuellste LibNoDave-UDF, die ich finden konnte.Zitat von m-obiWie 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??
-
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. -
Nein, aber warum braucht man die?
Müsste doch genügen bei _daveNewInterface() das Protokoll $daveProtoPPI zu übergeben. -
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.
-
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. -
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) -
Das ist aber komisch, das sollte nicht richtig funktionieren. Wird die Länge richtig angezeigt? Wie sieht es mit den Tags aus?
-
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. -
Vielen Dank! Sehr nützliches Tutorial!
-
@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? -
Gefällt mir sehr gut und kann ich sicher brauchen!

Thanks for sharing!
-
Hab's mir noch nicht angeschaut, wird aber sicher super laufen. Aber sollte es nicht _FileReadToArray2D heißen?
-
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.
-
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
[/autoit] [autoit][/autoit] [autoit]
; 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] = ""_ArrayDisplayOLD($A)
[/autoit] [autoit][/autoit] [autoit]
_ArrayDisplayNEW($A)#cs
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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;aus Version 3.3.6.1
[/autoit] [autoit][/autoit] [autoit]
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); Separator handling
[/autoit] [autoit][/autoit] [autoit]
;~ If $sSeparator = "" Then $sSeparator = Chr(1)
If $sSeparator = "" Then $sSeparator = Chr(124); Check the separator to make sure it's not used literally in the array
[/autoit] [autoit][/autoit] [autoit]
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; Declare variables
[/autoit] [autoit][/autoit] [autoit]
Local $vTmp, $iBuffer = 64
Local $iColLimit = 250
Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator); Swap dimensions if transposing
[/autoit] [autoit][/autoit] [autoit]
If $iSubMax < 0 Then $iSubMax = 0
If $iTranspose Then
$vTmp = $iUBound
$iUBound = $iSubMax
$iSubMax = $vTmp
EndIf; Set limits for dimensions
[/autoit] [autoit][/autoit] [autoit]
If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
If $iItemLimit < 1 Then $iItemLimit = $iUBound
If $iUBound > $iItemLimit Then $iUBound = $iItemLimit; Set header up
[/autoit] [autoit][/autoit] [autoit]
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; Convert array into text for listview
[/autoit] [autoit][/autoit] [autoit]
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; Add to text array
[/autoit] [autoit][/autoit] [autoit]
$vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
$avArrayText[$i] &= $sSeparator & $vTmp; Set max buffer size
[/autoit] [autoit][/autoit] [autoit]
$vTmp = StringLen($vTmp)
If $vTmp > $iBuffer Then $iBuffer = $vTmp
Next
Next
$iBuffer += 1; GUI Constants
[/autoit] [autoit][/autoit] [autoit]
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"Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
[/autoit] [autoit][/autoit] [autoit]
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); Set interface up
[/autoit] [autoit][/autoit] [autoit]
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); Fill listview
[/autoit] [autoit][/autoit] [autoit]
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]); Add listview item
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tItem, "Item", $i)
DllStructSetData($tItem, "SubItem", 0)
DllStructSetData($tItem, "Mask", $iAddMask)
GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $pItem); Set listview subitem text
[/autoit] [autoit][/autoit] [autoit]
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; adjust window width
[/autoit] [autoit][/autoit] [autoit]
$iWidth = 0
For $i = 0 To $iSubMax + 1
$iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
Next
If $iWidth < 250 Then $iWidth = 230
$iWidth += 20If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100
[/autoit] [autoit][/autoit] [autoit]WinMove($hGUI, "", (@DesktopWidth - $iWidth)/2, Default, $iWidth)
[/autoit] [autoit][/autoit] [autoit]; Show dialog
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hGUI)While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
ExitLoopCase $hCopy
[/autoit] [autoit][/autoit] [autoit]
Local $sClip = ""; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
[/autoit] [autoit][/autoit] [autoit]
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; Generate clipboard text
[/autoit] [autoit][/autoit] [autoit]
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)Opt("GUIOnEventMode", $iOnEventMode)
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIDataSeparatorChar", $sDataSeparatorChar)Return 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_ArrayDisplay; aus Version 3.3.8.1
[/autoit] [autoit][/autoit] [autoit]
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); Separator handling
[/autoit] [autoit][/autoit] [autoit]
If $sSeparator = "" Then $sSeparator = Chr(124); Check the separator to make sure it's not used literally in the array
[/autoit] [autoit][/autoit] [autoit]
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; Declare variables
[/autoit] [autoit][/autoit] [autoit]
Local $vTmp, $iBuffer = 4094 ; AutoIt max item size
Local $iColLimit = 250
Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator); Swap dimensions if transposing
[/autoit] [autoit][/autoit] [autoit]
If $iSubMax < 0 Then $iSubMax = 0
If $iTranspose Then
$vTmp = $iUBound
$iUBound = $iSubMax
$iSubMax = $vTmp
EndIf; Set limits for dimensions
[/autoit] [autoit][/autoit] [autoit]
If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
If $iItemLimit < 1 Then $iItemLimit = $iUBound
If $iUBound > $iItemLimit Then $iUBound = $iItemLimit; Set header up
[/autoit] [autoit][/autoit] [autoit]
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; Convert array into text for listview
[/autoit] [autoit][/autoit] [autoit]
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; Add to text array
[/autoit] [autoit][/autoit] [autoit]
$vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1); Set max buffer size
[/autoit] [autoit][/autoit] [autoit]
If StringLen($vTmp) > $iBuffer Then $vTmp = StringLeft($vTmp, $iBuffer)$avArrayText[$i] &= $sSeparator & $vTmp
[/autoit] [autoit][/autoit] [autoit]
Next
Next; GUI Constants
[/autoit] [autoit][/autoit] [autoit]
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; Set interface up
[/autoit] [autoit][/autoit] [autoit]
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); Fill listview
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $iUBound
GUICtrlCreateListViewItem($avArrayText[$i], $hListView)
Next; adjust window width
[/autoit] [autoit][/autoit] [autoit]
$iWidth = 0
For $i = 0 To $iSubMax + 1
$iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
Next
If $iWidth < 250 Then $iWidth = 230
$iWidth += 20If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100
[/autoit] [autoit][/autoit] [autoit]WinMove($hGUI, "", (@DesktopWidth - $iWidth) / 2, Default, $iWidth)
[/autoit] [autoit][/autoit] [autoit]; Show dialog
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hGUI)While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
ExitLoopCase $hCopy
[/autoit] [autoit][/autoit] [autoit]
Local $sClip = ""; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
[/autoit] [autoit][/autoit] [autoit]
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; Generate clipboard text
[/autoit] [autoit][/autoit] [autoit]
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)Opt("GUIOnEventMode", $iOnEventMode)
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIDataSeparatorChar", $sDataSeparatorChar)Return 1
[/autoit]
EndFunc ;==>_ArrayDisplay -
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.
[autoit]
Hier noch ein kleines Skript, das meine Theorie unterstützen sollte.#include <Array.au3>
[/autoit][autoit][/autoit][autoit]Global $a[65531]
[/autoit][autoit][/autoit][autoit]
$a[UBound($a) -1] = "Test"_ArrayDisplay($a) ;letztes Element sichtbar
[/autoit][autoit][/autoit][autoit]GUICreate("Test")
[/autoit][autoit][/autoit][autoit]
GUICtrlCreateButton("Hallo", 10, 10)_ArrayDisplay($a) ;letztes Element nicht mehr sichtbar
[/autoit] -
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!?