It's possible to change grid color from listview in ahk v2?
Thanks!
ListviewGrid
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: ListviewGrid
It seems impossible.
Code: Select all
Gui1 := Gui()
Lv1 := Gui1.Add("ListView", "w400 h300 BackgroundE1BEE7 +Multi Grid Checked", [, "Items"])
SetListViewHeaderCheckBox(Lv1)
Lv1.OnNotify(-316, HDN_ITEMSTATEICONCLICK)
Loop 10
Lv1.Add(,, "Item " A_Index)
Gui1.BackColor := 'EEAA99'
For Hwnd, GuiCtrlObj in Gui1{
DllCall("uxtheme\SetWindowTheme", "ptr", GuiCtrlObj.hwnd, "str", "DarkMode_Explorer", "ptr", 0)
}
Gui1.Show()
Return
; ----------------------------------------------------------------------------------------------------------------------
; To get notified about a click on the header's checkbox and to prevent the default processing we need
; to intercept the HDN_ITEMSTATEICONCLICK notification.
HDN_ITEMSTATEICONCLICK(Ctrl, L) {
Static OffFmt := (4 * 3) + (A_PtrSize * 2)
HHDR := NumGet(L, "UPtr")
Item := NumGet(L, A_PtrSize * 3, "Int")
HDITEM := NumGet(L, 8 + (A_PtrSize * 3), "UPtr")
Fmt := NumGet(HDITEM, OffFmt, "Int")
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ToolTip(Fmt & 0x0080 ? "Uncheck!" : "Check!") ; HDF_CHECKED = 0x0080
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NumPut("Int", Fmt ^ 0x0080, HDITEM, OffFmt) ; toggle the 'checked' state
SendMessage(0x120C, Item, HDITEM, HHDR) ; HDM_SETITEM = 0x120C
Return 1 ; prevent normal notification processing
}
; ----------------------------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------------------------
; Originally written by teadrinker -> https://www.autohotkey.com/boards/viewtopic.php?p=283437#p283437
SetListViewHeaderCheckBox(ListView) {
Static HDITEM_SIZE := 4 * 6 + (A_PtrSize * 6), OffFmt := (4 * 3) + (A_PtrSize * 2)
HHDR := SendMessage(0x101F, 0, 0, ListView) ; LVM_GETHEADER
ControlSetStyle("+0x0400", HHDR) ; HDS_CHECKBOXES = 0x0400
HDITEM := Buffer(HDITEM_SIZE, 0)
NumPut("UInt", 0x0004, HDITEM) ; HDI_FORMAT = 0x0004
SendMessage(0x120B, 0, HDITEM, HHDR) ; HDM_GETITEM = 0x120B
Fmt := NumGet(HDITEM, OffFmt, "Int") ; HDM_SETITEM = 0x120C
NumPut("UInt", Fmt | 0x0040, HDITEM, OffFmt) ; HDF_CHECKBOX = 0x0040
SendMessage(0x120C, 0, HDITEM, HHDR) ; HDM_SETITEM = 0x120C
}
Who is online
Users browsing this forum: Draken, marypoppins_1 and 30 guests