Best way to manage state of cells in a Listbox


I am trying to implement in a DesktopListbox some events (with MouseMove, MouseDown, MouseUp, etc) to display using the CellTextPaint some images in a cell on each rows.

I try to emulate a button with the hover / pressed event but I am a bit struggling on how should I store the data to know what image to draw.

I tried to store such information on the celltag but I have some issues when the user change window with alt-tab (or cmd-tab) or when the user move the mouse quickly. The issues are that the property that I store in the celltag are not refreshed correctly and the drawing of the correct image is not done with the correct image.

I wanted to know if there is a better way to do that or if just I need to improve my code to make it work correctly using my current approach

My code looks like this

MouseMove event

var row as integer = me.getRowCurrentMouseLocation()
var column as integer = me.getColumnCurrentMouseLocation()

if row > -1 and row <= me.LastRowIndex then
  if column = me.kOrderColAction then
    var cellX as integer = me.getCellXByColumnAndX(column,x)
    var cellY as integer = me.getCellYByRowAndY(row,y)
    if me.isMouseHoverActionButton(row,column,cellX,cellY) then
      me.CellTagAt(row,column) = "hover"
      me.CellTagAt(row,column) = nil
    end if
    me.CellTagAt(row,me.kOrderColAction) = nil
  end if
end if

RaiseEvent mousemoved(x,y)

and in the CellTextPaint Event, I check the celltag and draw the corresponding image. I have the similar code for the MouseDown that set “pressed” in the celltag

Thank you,