ListviewGrid

Get help with using AutoHotkey (v2 or newer) and its commands and hotkeys
thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

ListviewGrid

19 May 2023, 13:45

It's possible to change grid color from listview in ahk v2?

Thanks!
WKen
Posts: 189
Joined: 21 Feb 2023, 00:01

Re: ListviewGrid

19 May 2023, 17:29

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
}

Return to “Ask for Help (v2)”

Who is online

Users browsing this forum: Draken, marypoppins_1 and 30 guests