ListIcon Scroll Position Saving
Posted: Thu Aug 23, 2012 5:18 pm
I wrote this because I had problems with a listicon jumping around when items were added, and I didnt like it.
So basically you write:
My code actually worked without the final RedrawWindow, but It doesn't flicker when included and I wouldnt want my control displaying old information, so better to be safe than sorry.
Tested on Win7 x64
**edit... you didnt need the r.RECT declare (now removed), that was for an earlier method, lol**
Code: Select all
Procedure ListViewSaveScroll(gadget,disableredraw=1)
If IsGadget(gadget)
If CountGadgetItems(gadget)
If disableredraw
SendMessage_(GadgetID(gadget),#WM_SETREDRAW,0,0)
EndIf
SetProp_(GadgetID(gadget),@"ListScrollPos",GetScrollPos_(GadgetID(gadget),#SB_VERT))
EndIf
EndIf
EndProcedure
Procedure ListViewRestoreScroll(gadget,enableredraw=1)
If IsGadget(gadget)
If CountGadgetItems(gadget)
Protected r.RECT,p=GetProp_(GadgetID(gadget),@"ListScrollPos")
r\left=#LVIR_BOUNDS
SendMessage_(GadgetID(gadget),#LVM_GETITEMRECT,0,@r)
SendMessage_(GadgetID(gadget),#LVM_SCROLL,0,(r\bottom-r\top)*p)
If enableredraw
SendMessage_(GadgetID(gadget),#WM_SETREDRAW,-1,0)
RedrawWindow_(GadgetID(gadget),0,0,#RDW_ERASE|#RDW_FRAME|#RDW_INVALIDATE|#RDW_ALLCHILDREN)
EndIf
EndIf
EndIf
EndProcedure
Code: Select all
ListViewSaveScroll(listview)
;modify list
ListViewRestoreScroll(listview)
Tested on Win7 x64
**edit... you didnt need the r.RECT declare (now removed), that was for an earlier method, lol**