Hi,
ich würde gerne in einer ListView in ganz bestimmten Feldern die Textfarbe ändern,
also nicht ne komplette Spalte.
Hat jemand eine Idee wie das funktioniert ? Oder geht das vielleicht gar nicht ?
Markus
Hi,
ich würde gerne in einer ListView in ganz bestimmten Feldern die Textfarbe ändern,
also nicht ne komplette Spalte.
Hat jemand eine Idee wie das funktioniert ? Oder geht das vielleicht gar nicht ?
Markus
Also sowas wie in einem Kalender wenn ein tag noch frei ist dann grün ansonsten rot, sowas?
Hab hier einen Code aus dem Englischen Forum der dir weiterhelfen wird:
#include <GuiConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>
Opt("GUICloseOnESC", 0) ; ESC does not close GUI
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Opt('MustDeclareVars', 1)
OnAutoItExitRegister("Event_GUIClose")
Opt("GUIEventOptions", 1) ;0=default, 1=just notification, 2=GuiCtrlRead tab index
Global $mainWin_hWnd, $listView_hWnd, $listView_ID, $colorButton_hWnd, $colorButton_ID
Global $aMasterList[6], $aColors[4]
_Main()
ExitStageLeft(0)
;;;;;;;;;;;;;;;;;;;;;;;;;;
; _Main() - Main function
;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _Main()
createMainWin()
createListView()
createColorButton()
createMasterList()
setupColorsArray()
GUISetOnEvent($GUI_EVENT_CLOSE, "Event_GUIClose")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUICtrlSetOnEvent($colorButton_ID, "handle_Color_btn")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]loadListView() ; importand to do this after registering WM_NOTIFY events
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(500)
WEnd
EndFunc ;==>_Main
[/autoit] [autoit][/autoit] [autoit]Func ExitStageLeft($ret)
Exit ($ret)
EndFunc ;==>ExitStageLeft
Func Event_GUIClose()
ExitStageLeft(1)
EndFunc ;==>Event_GUIClose
Func createMainWin()
$mainWin_hWnd = GUICreate("Test2", 250, 200, -1, -1, BitOR($WS_CAPTION, $WS_SIZEBOX))
ConsoleWrite("+++: $mainWin_hWnd = " & $mainWin_hWnd & @CRLF)
if ($mainWin_hWnd == 0) Then exit (1)
EndFunc ;==>createMainWin
Func createListView()
$listView_ID = GUICtrlCreateListView("", 10, 10, 230, 160, $LVS_REPORT)
$listView_hWnd = GUICtrlGetHandle($listView_ID)
_GUICtrlListView_InsertColumn($listView_hWnd, 0, "Color#+Name", 120)
_GUICtrlListView_InsertColumn($listView_hWnd, 1, "Ax", 50)
_GUICtrlListView_InsertColumn($listView_hWnd, 2, "Bx", 50)
EndFunc ;==>createListView
Func createColorButton()
$colorButton_ID = GUICtrlCreateButton("Bump row 3's color", 10, 170, 100, 30)
$colorButton_hWnd = GUICtrlGetHandle($colorButton_ID)
EndFunc ;==>createColorButton
Func createMasterList()
$aMasterList[0] = "Name1|A1|B1~0"
$aMasterList[1] = "Name2|A2|B2~1"
$aMasterList[2] = "Name3|A3|B3~2"
$aMasterList[3] = "Name4|A4|B4~0"
$aMasterList[4] = "Name5|A5|B5~1"
$aMasterList[5] = "Name6|A6|B6~2"
EndFunc ;==>createMasterList
Func loadListView()
Local $item, $parts, $colornum, $str, $iIndex, $hWnd
$hWnd = $listView_hWnd
_GUICtrlListView_DeleteAllItems($hWnd)
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_BeginUpdate($hWnd)
[/autoit] [autoit][/autoit] [autoit]For $item In $aMasterList
$parts = StringSplit($item, "~") ; split the item from the colornum
$item = $parts[1]
$colornum = $parts[2]
$parts = StringSplit($item, "|") ; break up the item into parts
$str = StringFormat("(%d) ", $colornum) & $parts[1] ; prefix with the colornum
$iIndex = _GUICtrlListView_AddItem($hWnd, $str, -1, $colornum)
_GUICtrlListView_AddSubItem($hWnd, $iIndex, $parts[2], 1)
_GUICtrlListView_AddSubItem($hWnd, $iIndex, $parts[3], 2)
Next
_GUICtrlListView_EndUpdate($hWnd)
EndFunc ;==>loadListView
Func setupColorsArray()
$aColors[0] = RGB2BGR($COLOR_BLACK) ; 0x000000 - Normal
$aColors[1] = RGB2BGR($COLOR_RED) ; 0xFF0000 - Secure
$aColors[2] = RGB2BGR($COLOR_BLUE) ; 0x0000FF - CNS
$aColors[3] = RGB2BGR($COLOR_YELLOW) ; 0xFFFF00 - Other
EndFunc ;==>setupColorsArray
Func RGB2BGR($iColor)
Local $sH = Hex($iColor, 6)
Return '0x' & StringRight($sH, 2) & StringMid($sH, 3, 2) & StringLeft($sH, 2)
EndFunc ;==>RGB2BGR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WM_NOTIFY(0 - Handle the WM_NOTIFY event
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
Local $hWndFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $listView_hWnd
Switch $iCode
Case $NM_CUSTOMDRAW
Local $iDrawStage, $tCustDraw
$tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $ilParam)
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT ; 0x00010001
setItemColor($tCustDraw, $hWndFrom)
Return $CDRF_NOTIFYSUBITEMDRAW
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func setItemColor($tCustDraw, $hWnd)
Local $iIndex, $color, $colornum
$iIndex = DllStructGetData($tCustDraw, 'dwItemSpec')
$colornum = _GUICtrlListView_GetItemParam($hWnd, $iIndex)
$color = $aColors[$colornum]
DllStructSetData($tCustDraw, 'clrText', $color)
EndFunc ;==>setItemColor
Func handle_Color_btn()
Local $item, $parts
$item = $aMasterList[2]
$parts = StringSplit($item, "~") ; split the item from the colornum
$parts[2] += 1
$parts[2] = Mod($parts[2], 4)
$item = $parts[1] & "~" & $parts[2]
$aMasterList[2] = $item
loadListView()
EndFunc ;==>handle_Color_btn
also ich komme nicht ganz klar mit Deinem Beispielscript.
Vielleicht gebe ich einfach mal ein paar Codezeilen vor ...
;*** GUI definieren
$hGUIShow = GUICreate("ListView ...",1040,300,-1,-1,-1,-1)
$hListView = GUICtrlCreatelistview("Spalte1|Spalte2|Spalte3|Spalte4",10,50,500,150,-1,$LVS_EX_SNAPTOGRID)
$hButton = GUICtrlCreateButton("Ok",400,230,50,30,-1,-1)
GUISetState(@SW_SHOW,$hGUIShow)
;*** ListView befüllen
GUICtrlCreateListViewItem("Eintrag1|Eintrag2|Eintrag3|Eintrag4", $hListView)
;***
So, wie bekomme ich es jetzt hin daß zum Beispiel" Eintrag4" (Text) grün dargestellt wird oder wenn das nicht funtioniert das die ganze Zeile ("Eintrag1 - Eintrag4")
grün dargestellt wird ?
Also so kannst du auf jeden fall mal die ganze zeile farbig machen.. aber das denke ich ist bekannt!
*EDIT: Für die jeweiligen SubItems hab ich jetzt noch was anderes gefunden! Hier im deutschen Forum von BugFix: https://autoit.de/index.php?page=Thread&threadID=10104
#include <GUIConstants.au3>
#include <GUIListView.au3>
main()
Func main()
GUICreate("ListView ...", 520, 210)
GUISetFont(10)
$list = GUICtrlCreatelistview("Spalte1|Spalte2|Spalte3|Spalte4", 10, 10, 500, 150, -1, $LVS_EX_SNAPTOGRID)
$ok = GUICtrlCreateButton("Ok", 210, 170, 100, 30, -1, -1)
GUISetState()
GUICtrlCreateListViewItem("Eintrag1|Eintrag2|Eintrag3|Eintrag4", $list)
GUICtrlSetColor(-1, 0x00AA00)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $ok Then
Exit
EndIf
WEnd
EndFunc
Hi,
ja das mit der Zeile war bekannt.
Die UDF von Bugfix hab ich auch schon gefunden. Hab's auch ausprobiert bekomme aber ne Fehlermeldung.
Ich denke ich mache da was falsch. Habe Bugfix ne Nachricht geschrieben, mal sehen ...
Trotzdem Danke !
Markus
PN an BugFix widerspricht irgendwie den Forengedanken.
Warum postest du nicht einfach das Script, sagst dazu dass du BugFix UDF verwendest (mit link) dann hast du innerhalb von paar Stunden wahrscheinlich ne Antwort.
Anders hast du jetzt nen Thread auf, in dem du nichts von deinem Script preisgibst, das interessant ist, und wartest auf die PN von BugFix
Hi,
sorry da war ich etwas zu schnell mit meiner Mailschreiberei...
Ich habe aber mittlerweile meinen Fehler gefunden.
Also mit der UDF von Bugfix funktioniert's problemlos !
Gruß
Markus