Ich habe ein Tool mit einer GUI, einer Listview in der der Benutzer via Inputs Neue Zeilen einfügen kann, und die Zeilen färben können soll.
Problem:
- Erstelle ich mit der Native-Funktion die Zeile so habe ich den Index der eben angelegten Zeile nicht.
- Erstelle ich mit der UDF-Funktion die Zeile so habe ich die control-ID der eben angelegten Zeile nicht.
Ich dachte:
Zitat von _GUICtrlListView_AddItem - RemarksAs AutoIt uses the $iParam parameter to store the controlID of native-created ListView items, this value should be set sufficiently high for UDF-created items to avoid possible conflict with any existing controls - a starting value of 1000 is recommended.
der Parameter wird mit der jeweiligen ID besetzt. Fehlanzeige:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
;~ Example()
Func Example()
Local $hImage, $idListview, $iRetVal
Local $cID_LVITEM
; Create GUI
GUICreate("ListView Set Extended Style", 400, 300)
$idListview = GUICtrlCreateListView("", 2, 2, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle($idListview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
GUISetState(@SW_SHOW)
; Add columns
_GUICtrlListView_InsertColumn($idListview, 0, "Column 1", 100)
_GUICtrlListView_InsertColumn($idListview, 1, "Column 2", 100)
_GUICtrlListView_InsertColumn($idListview, 2, "Column 3", 100)
; Add items
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 1: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 2: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 3: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
ConsoleWrite("GuiCtrlSetBkColor $iRetVal: " & GuiCtrlSetBkColor($iRetVal, 0xFF0000) & @CRLF)
ConsoleWrite("GuiCtrlSetBkColor $cID_LVITEM: " & GuiCtrlSetBkColor($cID_LVITEM, 0xFF0000) & @CRLF)
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example
Alles anzeigen
Dann habe ich das nochmal gelesen und dachte ich kann dort eine Zahl angeben, die als Control-ID gesetzt wird. Dann wird jedoch die Zeile nicht gefärbt (Grund unbekannt):
Spoiler anzeigen
Example1()
Func Example1()
Local $hImage, $idListview, $iRetVal
Local $cID_LVITEM = 5000
; Create GUI
GUICreate("ListView Set Extended Style", 400, 300)
$idListview = GUICtrlCreateListView("", 2, 2, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle($idListview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
GUISetState(@SW_SHOW)
; Add columns
_GUICtrlListView_InsertColumn($idListview, 0, "Column 1", 100)
_GUICtrlListView_InsertColumn($idListview, 1, "Column 2", 100)
_GUICtrlListView_InsertColumn($idListview, 2, "Column 3", 100)
; Add items
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 1: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
$cID_LVITEM += 1
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 2: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
$cID_LVITEM += 1
$iRetVal = _GUICtrlListView_AddItem($idListview, "Row 3: Col 1", -1, $cID_LVITEM)
ConsoleWrite("$iRetVal: " & $iRetVal & @CRLF)
ConsoleWrite("$cID_LVITEM: " & $cID_LVITEM & @CRLF)
ConsoleWrite("GuiCtrlSetBkColor $iRetVal: " & GuiCtrlSetBkColor($iRetVal, 0xFF0000) & @CRLF)
ConsoleWrite("GuiCtrlSetBkColor $cID_LVITEM: " & GuiCtrlSetBkColor($cID_LVITEM, 0xFF0000) & @CRLF)
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example1
Alles anzeigen
Den Index möchte ich nutzen um mit der Funktion _GUICtrlListView_SetItemText die Zeile im Nachhinein noch bearbeiten zu können. Die ControlID der Zeile soll in einer versteckten Spalten geschrieben werden. Nun habe ich bislang als einzige Lösung GUICtrlSetData statt _GUICtrlListView_SetItemText:
Spoiler anzeigen
Example2()
Func Example2()
Local $hImage, $idListview, $iRetVal
Local $cID_LVITEM1, $cID_LVITEM2, $cID_LVITEM3
; Create GUI
GUICreate("ListView Set Extended Style", 400, 300)
$idListview = GUICtrlCreateListView("C1|C2|C3|C4|C5|C6", 2, 2, 394, 268)
$cID_LVITEM1 = GUICtrlCreateListViewItem("A|B|C|D|E|", $idListview)
$cID_LVITEM2 = GUICtrlCreateListViewItem("A|B|C|D|E|", $idListview)
$cID_LVITEM3 = GUICtrlCreateListViewItem("A|B|C|D|E|", $idListview)
GUISetState(@SW_SHOW)
ConsoleWrite("$cID_LVITEM1: " & $cID_LVITEM1 & @CRLF)
ConsoleWrite("$cID_LVITEM2: " & $cID_LVITEM2 & @CRLF)
ConsoleWrite("$cID_LVITEM3: " & $cID_LVITEM3 & @CRLF)
ConsoleWrite("GuiCtrlSetBkColor $cID_LVITEM2: " & GuiCtrlSetBkColor($cID_LVITEM2, 0xFF0000) & @CRLF)
GUICtrlSetData($cID_LVITEM2, "A|B|C|D|E|" & $cID_LVITEM2)
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example
Alles anzeigen
Kennt ihr alternative Lösungswege?