+ Reply to Thread
Results 1 to 11 of 11

Listview and colored line

  1. #1
    Maileen
    Guest

    Listview and colored line

    Hi,

    I would like to color 1 line over 2 in my listview.
    till now i've just found how to color font of its items, but not row by
    itself.

    is it possible to color rows of a Listview component ?
    if yes, how ?
    thx,

    Maileen

  2. #2
    Chip Pearson
    Guest

    Re: Listview and colored line

    You can't format the individual items in the list.

    --
    Cordially,
    Chip Pearson
    Microsoft MVP - Excel
    Pearson Software Consulting, LLC
    www.cpearson.com


    "Maileen" <[email protected]> wrote in message
    news:eHIshUx%[email protected]...
    > Hi,
    >
    > I would like to color 1 line over 2 in my listview.
    > till now i've just found how to color font of its items, but
    > not row by itself.
    >
    > is it possible to color rows of a Listview component ?
    > if yes, how ?
    > thx,
    >
    > Maileen




  3. #3
    Rob van Gelder
    Guest

    Re: Listview and colored line

    If you want to colour all of the listitems, do a search for: Const
    LVM_SETTEXTBKCOLOR

    I dont know of a way to colour individual rows

    --
    Rob van Gelder - http://www.vangelder.co.nz/excel


    "Maileen" <[email protected]> wrote in message
    news:eHIshUx%[email protected]...
    > Hi,
    >
    > I would like to color 1 line over 2 in my listview.
    > till now i've just found how to color font of its items, but not row by
    > itself.
    >
    > is it possible to color rows of a Listview component ?
    > if yes, how ?
    > thx,
    >
    > Maileen




  4. #4
    Michel Pierron
    Guest

    Re: Listview and colored line

    Hi Maileen;
    You can try this for demo.
    Place a listview on an userform and:
    In UserForm module:

    Option Explicit
    Private Declare Function SetWindowLong& Lib "user32" Alias _
    "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long _
    , ByVal wCmd As Long) As Long
    Private Const GWL_WNDPROC As Long = (-4&)
    Private hWnd As Long

    Private Sub UserForm_Initialize()
    Dim i&
    hWnd = GetWindow(FindWindow(vbNullString, Me.Caption), 5)
    With Me.ListView1
    ..ColumnHeaders.Add , , "Item Column", .Width * 1 / 3
    ..ColumnHeaders.Add , , "Subitem 1", .Width * 1 / 3
    ..ColumnHeaders.Add , , "Subitem 2", .Width * 1 / 3
    For i = 0 To 99
    With .ListItems.Add(, , "Item " & Format(i, "00"))
    ..SubItems(1) = "Subitem 1"
    ..SubItems(2) = "Subitem 2"
    End With
    Next
    End With
    OldProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Call SetWindowLong(hWnd, GWL_WNDPROC, OldProc)
    End Sub

    In standard module:
    Option Explicit
    ' Constants used for customdraw routine
    Private Const NM_CUSTOMDRAW = (-12&)
    Private Const WM_NOTIFY As Long = &H4E&
    Private Const CDDS_PREPAINT As Long = &H1&
    Private Const CDRF_NOTIFYITEMDRAW As Long = &H20&
    Private Const CDDS_ITEM As Long = &H10000
    Private Const CDDS_ITEMPREPAINT As Long = CDDS_ITEM Or CDDS_PREPAINT
    Private Const CDRF_NEWFONT As Long = &H2&

    ' The NMHDR structure contains information about a notification message.
    ' The pointer to this structure is specified as the lParam member of a
    WM_NOTIFY message.
    Private Type NMHDR
    hWndFrom As Long ' Window handle of control sending message
    idFrom As Long ' Identifier of control sending message
    code As Long ' Specifies the notification code
    End Type

    ' Struct of the NMCUSTOMDRAW struct
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type

    ' Generic customdraw struct
    Private Type NMCUSTOMDRAW
    hdr As NMHDR
    dwDrawStage As Long
    hDC As Long
    rc As RECT
    dwItemSpec As Long
    uItemState As Long
    lItemlParam As Long
    End Type

    ' Listview specific customdraw struct
    Private Type NMLVCUSTOMDRAW
    NMCW As NMCUSTOMDRAW
    ForeColorText As Long
    BackColorText As Long
    ' if IE >= 4.0 this member of the struct can be used
    'iSubItem As Integer
    End Type

    ' Function used to manipulate memory data
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (lpDest As Any, lpSource As Any, ByVal cBytes&)
    ' Function used to call the next window proc in the "chain" for the
    subclassed window
    Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal
    lParam&)
    ' This var will hold a pointer to the original message handler so we MUST
    ' save it so that it can be restored before we exit the app. if we don't
    ' restore it.... CRASH!!!!
    Public OldProc As Long

    ' WARNING -----------------------------------------------
    ' Do not try to step through this function in debug mode !
    ' You will crash also, do no set any break points in this function !
    ' You will crash subclassing is non-trivial and should be handled with
    ' extreame care !
    ' There are ways to use a "Debug" dll to allow you to set breakpoints in
    ' subclassed code in the IDE but this was not implimented for this demo.
    ' WARNING -----------------------------------------------

    ' This is implementation of the message handling routine
    ' determine which message was recieved
    Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long _
    , ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case iMsg
    Case WM_NOTIFY
    ' If it's a WM_NOTIFY message copy the data from the
    ' address pointed to by lParam into a NMHDR struct
    Dim UDT_NMHDR As NMHDR
    CopyMemory UDT_NMHDR, ByVal lParam, 12&
    With UDT_NMHDR
    If .code = NM_CUSTOMDRAW Then
    ' If the code member of the struct is NM_CUSTOMDRAW, copy
    ' the data pointed to by lParam into a NMLVCUSTOMDRAW struct
    Dim UDT_NMLVCUSTOMDRAW As NMLVCUSTOMDRAW
    ' This is now OUR copy of the struct
    CopyMemory UDT_NMLVCUSTOMDRAW, ByVal lParam, Len(UDT_NMLVCUSTOMDRAW)
    With UDT_NMLVCUSTOMDRAW.NMCW
    ' Determine whether or not this is one of the messages we are interested in
    Select Case .dwDrawStage
    ' If it's a prepaint message, tell windows WE want first dibs on
    ' painting for each item and then exit without letting VB get this message
    Case CDDS_PREPAINT
    WindowProc = CDRF_NOTIFYITEMDRAW
    Exit Function
    Case CDDS_ITEMPREPAINT
    ' Set the forecolor for items in the listview.
    ' Set the backcolor for items in the listview.
    If (.dwItemSpec Mod 2) = 0 Then
    UDT_NMLVCUSTOMDRAW.ForeColorText = vbRed
    UDT_NMLVCUSTOMDRAW.BackColorText = &HC0C0C0
    ' Copy our copy of the struct back to the memory address pointed to by
    lParam
    CopyMemory ByVal lParam, UDT_NMLVCUSTOMDRAW, Len(UDT_NMLVCUSTOMDRAW)
    End If
    ' Tell windows that we changed the font and do not allow VB to get this
    message
    WindowProc = CDRF_NEWFONT
    Exit Function
    End Select
    End With
    End If
    End With
    End Select
    ' Pass all messages on to VB and then return the value to windows
    WindowProc = CallWindowProc(OldProc, hWnd, iMsg, wParam, lParam)
    End Function

    Sub CustomListView()
    UserForm1.Show
    End Sub

    Regards,
    MP

    "Maileen" <[email protected]> a écrit dans le message de
    news:eHIshUx%[email protected]...
    > Hi,
    >
    > I would like to color 1 line over 2 in my listview.
    > till now i've just found how to color font of its items, but not row by
    > itself.
    >
    > is it possible to color rows of a Listview component ?
    > if yes, how ?
    > thx,
    >
    > Maileen



  5. #5
    Rob van Gelder
    Guest

    Re: Listview and colored line

    Michel,

    Hooking the WinProc event handler... Now that's impressive.


    --
    Rob van Gelder - http://www.vangelder.co.nz/excel


    "Michel Pierron" <[email protected]> wrote in message
    news:eff87e8%[email protected]...
    > Hi Maileen;
    > You can try this for demo.
    > Place a listview on an userform and:
    > In UserForm module:
    >
    > Option Explicit
    > Private Declare Function SetWindowLong& Lib "user32" Alias _
    > "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
    > Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    > (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    > Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long _
    > , ByVal wCmd As Long) As Long
    > Private Const GWL_WNDPROC As Long = (-4&)
    > Private hWnd As Long
    >
    > Private Sub UserForm_Initialize()
    > Dim i&
    > hWnd = GetWindow(FindWindow(vbNullString, Me.Caption), 5)
    > With Me.ListView1
    > .ColumnHeaders.Add , , "Item Column", .Width * 1 / 3
    > .ColumnHeaders.Add , , "Subitem 1", .Width * 1 / 3
    > .ColumnHeaders.Add , , "Subitem 2", .Width * 1 / 3
    > For i = 0 To 99
    > With .ListItems.Add(, , "Item " & Format(i, "00"))
    > .SubItems(1) = "Subitem 1"
    > .SubItems(2) = "Subitem 2"
    > End With
    > Next
    > End With
    > OldProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    > End Sub
    >
    > Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    > Call SetWindowLong(hWnd, GWL_WNDPROC, OldProc)
    > End Sub
    >
    > In standard module:
    > Option Explicit
    > ' Constants used for customdraw routine
    > Private Const NM_CUSTOMDRAW = (-12&)
    > Private Const WM_NOTIFY As Long = &H4E&
    > Private Const CDDS_PREPAINT As Long = &H1&
    > Private Const CDRF_NOTIFYITEMDRAW As Long = &H20&
    > Private Const CDDS_ITEM As Long = &H10000
    > Private Const CDDS_ITEMPREPAINT As Long = CDDS_ITEM Or CDDS_PREPAINT
    > Private Const CDRF_NEWFONT As Long = &H2&
    >
    > ' The NMHDR structure contains information about a notification message.
    > ' The pointer to this structure is specified as the lParam member of a
    > WM_NOTIFY message.
    > Private Type NMHDR
    > hWndFrom As Long ' Window handle of control sending message
    > idFrom As Long ' Identifier of control sending message
    > code As Long ' Specifies the notification code
    > End Type
    >
    > ' Struct of the NMCUSTOMDRAW struct
    > Private Type RECT
    > Left As Long
    > Top As Long
    > Right As Long
    > Bottom As Long
    > End Type
    >
    > ' Generic customdraw struct
    > Private Type NMCUSTOMDRAW
    > hdr As NMHDR
    > dwDrawStage As Long
    > hDC As Long
    > rc As RECT
    > dwItemSpec As Long
    > uItemState As Long
    > lItemlParam As Long
    > End Type
    >
    > ' Listview specific customdraw struct
    > Private Type NMLVCUSTOMDRAW
    > NMCW As NMCUSTOMDRAW
    > ForeColorText As Long
    > BackColorText As Long
    > ' if IE >= 4.0 this member of the struct can be used
    > 'iSubItem As Integer
    > End Type
    >
    > ' Function used to manipulate memory data
    > Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    > (lpDest As Any, lpSource As Any, ByVal cBytes&)
    > ' Function used to call the next window proc in the "chain" for the
    > subclassed window
    > Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" _
    > (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal
    > lParam&)
    > ' This var will hold a pointer to the original message handler so we MUST
    > ' save it so that it can be restored before we exit the app. if we don't
    > ' restore it.... CRASH!!!!
    > Public OldProc As Long
    >
    > ' WARNING -----------------------------------------------
    > ' Do not try to step through this function in debug mode !
    > ' You will crash also, do no set any break points in this function !
    > ' You will crash subclassing is non-trivial and should be handled with
    > ' extreame care !
    > ' There are ways to use a "Debug" dll to allow you to set breakpoints in
    > ' subclassed code in the IDE but this was not implimented for this demo.
    > ' WARNING -----------------------------------------------
    >
    > ' This is implementation of the message handling routine
    > ' determine which message was recieved
    > Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long _
    > , ByVal wParam As Long, ByVal lParam As Long) As Long
    > Select Case iMsg
    > Case WM_NOTIFY
    > ' If it's a WM_NOTIFY message copy the data from the
    > ' address pointed to by lParam into a NMHDR struct
    > Dim UDT_NMHDR As NMHDR
    > CopyMemory UDT_NMHDR, ByVal lParam, 12&
    > With UDT_NMHDR
    > If .code = NM_CUSTOMDRAW Then
    > ' If the code member of the struct is NM_CUSTOMDRAW, copy
    > ' the data pointed to by lParam into a NMLVCUSTOMDRAW struct
    > Dim UDT_NMLVCUSTOMDRAW As NMLVCUSTOMDRAW
    > ' This is now OUR copy of the struct
    > CopyMemory UDT_NMLVCUSTOMDRAW, ByVal lParam, Len(UDT_NMLVCUSTOMDRAW)
    > With UDT_NMLVCUSTOMDRAW.NMCW
    > ' Determine whether or not this is one of the messages we are interested
    > in
    > Select Case .dwDrawStage
    > ' If it's a prepaint message, tell windows WE want first dibs on
    > ' painting for each item and then exit without letting VB get this message
    > Case CDDS_PREPAINT
    > WindowProc = CDRF_NOTIFYITEMDRAW
    > Exit Function
    > Case CDDS_ITEMPREPAINT
    > ' Set the forecolor for items in the listview.
    > ' Set the backcolor for items in the listview.
    > If (.dwItemSpec Mod 2) = 0 Then
    > UDT_NMLVCUSTOMDRAW.ForeColorText = vbRed
    > UDT_NMLVCUSTOMDRAW.BackColorText = &HC0C0C0
    > ' Copy our copy of the struct back to the memory address pointed to by
    > lParam
    > CopyMemory ByVal lParam, UDT_NMLVCUSTOMDRAW, Len(UDT_NMLVCUSTOMDRAW)
    > End If
    > ' Tell windows that we changed the font and do not allow VB to get this
    > message
    > WindowProc = CDRF_NEWFONT
    > Exit Function
    > End Select
    > End With
    > End If
    > End With
    > End Select
    > ' Pass all messages on to VB and then return the value to windows
    > WindowProc = CallWindowProc(OldProc, hWnd, iMsg, wParam, lParam)
    > End Function
    >
    > Sub CustomListView()
    > UserForm1.Show
    > End Sub
    >
    > Regards,
    > MP
    >
    > "Maileen" <[email protected]> a écrit dans le message de
    > news:eHIshUx%[email protected]...
    >> Hi,
    >>
    >> I would like to color 1 line over 2 in my listview.
    >> till now i've just found how to color font of its items, but not row by
    >> itself.
    >>
    >> is it possible to color rows of a Listview component ?
    >> if yes, how ?
    >> thx,
    >>
    >> Maileen

    >




  6. #6
    Stephen Bullen
    Guest

    Re: Listview and colored line

    Hi Rob,

    > Hooking the WinProc event handler... Now that's impressive.


    ... and *very* dangerous in an interpreted environment! Save regularly!

    Regards

    Stephen Bullen
    Microsoft MVP - Excel
    www.oaltd.co.uk



  7. #7
    Peter T
    Guest

    Re: Listview and colored line

    Stephen Bullen wrote:
    > > Hooking the WinProc event handler... Now that's impressive.

    >
    > .. and *very* dangerous in an interpreted environment! Save regularly!
    >
    > Regards
    >
    > Stephen Bullen


    I think it looks impressive too, but for me crashes every time! Despite
    fully heeding all safety warnings. VBE closed (no breaks), running from
    Alt-F8, xl2k/w98se.

    Regards,
    Peter T



  8. #8
    Rob van Gelder
    Guest

    Re: Listview and colored line

    It worked for me just fine - XL2003

    Some of the line wrapping on that post screwed me up.
    There was one that I missed were the line contained the word Message. It was
    accepted without error by VBA, but was in fact a comment from the previous
    line.

    --
    Rob van Gelder - http://www.vangelder.co.nz/excel


    "Peter T" <peter_t@discussions> wrote in message
    news:[email protected]...
    > Stephen Bullen wrote:
    >> > Hooking the WinProc event handler... Now that's impressive.

    >>
    >> .. and *very* dangerous in an interpreted environment! Save regularly!
    >>
    >> Regards
    >>
    >> Stephen Bullen

    >
    > I think it looks impressive too, but for me crashes every time! Despite
    > fully heeding all safety warnings. VBE closed (no breaks), running from
    > Alt-F8, xl2k/w98se.
    >
    > Regards,
    > Peter T
    >
    >




  9. #9
    Peter T
    Guest

    Re: Listview and colored line

    Rob van Gelder wrote:
    > It worked for me just fine - XL2003
    >
    > Some of the line wrapping on that post screwed me up.
    > There was one that I missed were the line contained the word Message. It

    was
    > accepted without error by VBA, but was in fact a comment from the previous
    > line.


    Hi Rob,

    I'm very pleased you made me have another look. I thought I had carefully
    "un line wrapped". I caught the line ending in "Message" which as you say
    did not glow red. But there was another one I missed - lParam at the end of
    the commented line starting "Copy our copy". After removing the stray
    "lParam" all works fine.

    Michel - please accept my apologies for casting aspersions on your amazing
    code!!

    I hope you will not mind if I take the liberty of reposting your code,
    exactly as original but (hopefully) without any line wrapping.

    Regards,
    Peter T

    Michel Pierron's code:

    In UserForm module:
    '''start code Userform
    Option Explicit
    Private Declare Function SetWindowLong& Lib "user32" Alias _
    "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long _
    , ByVal wCmd As Long) As Long
    Private Const GWL_WNDPROC As Long = (-4&)
    Private hWnd As Long

    Private Sub UserForm_Initialize()
    Dim i&
    hWnd = GetWindow(FindWindow(vbNullString, Me.Caption), 5)
    With Me.ListView1
    ..ColumnHeaders.Add , , "Item Column", .Width * 1 / 3
    ..ColumnHeaders.Add , , "Subitem 1", .Width * 1 / 3
    ..ColumnHeaders.Add , , "Subitem 2", .Width * 1 / 3
    For i = 0 To 99
    With .ListItems.Add(, , "Item " & Format(i, "00"))
    ..SubItems(1) = "Subitem 1"
    ..SubItems(2) = "Subitem 2"
    End With
    Next
    End With
    OldProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub

    Private Sub UserForm_QueryClose(Cancel As Integer, _
    CloseMode As Integer)
    Call SetWindowLong(hWnd, GWL_WNDPROC, OldProc)
    End Sub
    '''end code Userform
    In standard module:

    ''''''start code standard module
    Option Explicit
    ' Constants used for customdraw routine
    Private Const NM_CUSTOMDRAW = (-12&)
    Private Const WM_NOTIFY As Long = &H4E&
    Private Const CDDS_PREPAINT As Long = &H1&
    Private Const CDRF_NOTIFYITEMDRAW As Long = &H20&
    Private Const CDDS_ITEM As Long = &H10000
    Private Const CDDS_ITEMPREPAINT As Long = CDDS_ITEM Or CDDS_PREPAINT
    Private Const CDRF_NEWFONT As Long = &H2&

    ' The NMHDR structure contains information about a
    ' notification message.
    ' The pointer to this structure is specified as the lParam member of
    'a WM_NOTIFY message.
    Private Type NMHDR
    hWndFrom As Long ' Window handle of control sending message
    idFrom As Long ' Identifier of control sending message
    code As Long ' Specifies the notification code
    End Type

    ' Struct of the NMCUSTOMDRAW struct
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type

    ' Generic customdraw struct
    Private Type NMCUSTOMDRAW
    hdr As NMHDR
    dwDrawStage As Long
    hDC As Long
    rc As RECT
    dwItemSpec As Long
    uItemState As Long
    lItemlParam As Long
    End Type

    ' Listview specific customdraw struct
    Private Type NMLVCUSTOMDRAW
    NMCW As NMCUSTOMDRAW
    ForeColorText As Long
    BackColorText As Long
    ' if IE >= 4.0 this member of the struct can be used
    'iSubItem As Integer
    End Type

    ' Function used to manipulate memory data
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (lpDest As Any, lpSource As Any, ByVal cBytes&)
    ' Function used to call the next window proc in the "chain" for the
    ' subclassed Window
    Declare Function CallWindowProc& Lib "user32" Alias _
    "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, _
    ByVal Msg&, ByVal wParam&, ByVal lParam&)
    ' This var will hold a pointer to the original message handler
    ' so we MUST save it so that it can be restored before we
    ' exit the app.
    ' if we don't restore it.... CRASH!!!!
    Public OldProc As Long

    ' WARNING -----------------------------------------------
    ' Do not try to step through this function in debug mode !
    ' You will crash also, do no set any break points in this function !
    ' You will crash subclassing is non-trivial and should be handled with
    ' extreame care !
    'There are ways to use a "Debug" dll to allow you to set breakpoints in
    ' subclassed code in the IDE but this was not implimented for this demo.
    ' WARNING -----------------------------------------------

    ' This is implementation of the message handling routine
    ' determine which message was recieved
    Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long _
    , ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case iMsg
    Case WM_NOTIFY
    ' If it's a WM_NOTIFY message copy the data from the
    ' address pointed to by lParam into a NMHDR struct
    Dim UDT_NMHDR As NMHDR
    CopyMemory UDT_NMHDR, ByVal lParam, 12&
    With UDT_NMHDR
    If .code = NM_CUSTOMDRAW Then
    ' If the code member of the struct is NM_CUSTOMDRAW, copy
    ' the data pointed to by lParam into a NMLVCUSTOMDRAW struct
    Dim UDT_NMLVCUSTOMDRAW As NMLVCUSTOMDRAW
    ' This is now OUR copy of the struct
    CopyMemory UDT_NMLVCUSTOMDRAW, ByVal lParam, Len(UDT_NMLVCUSTOMDRAW)
    With UDT_NMLVCUSTOMDRAW.NMCW
    ' Determine whether or not this is one of the messages we are
    ' interested in
    Select Case .dwDrawStage
    ' If it's a prepaint message, tell windows WE want first dibs on
    ' painting for each item and then exit without letting VB get
    ' this message
    Case CDDS_PREPAINT
    WindowProc = CDRF_NOTIFYITEMDRAW
    Exit Function
    Case CDDS_ITEMPREPAINT
    ' Set the forecolor for items in the listview.
    ' Set the backcolor for items in the listview.
    If (.dwItemSpec Mod 2) = 0 Then
    UDT_NMLVCUSTOMDRAW.ForeColorText = vbRed
    UDT_NMLVCUSTOMDRAW.BackColorText = &HC0C0C0
    ' Copy our copy of the struct back to the memory address pointed
    ' to by lParam
    CopyMemory ByVal lParam, UDT_NMLVCUSTOMDRAW, Len(UDT_NMLVCUSTOMDRAW)
    End If
    ' Tell windows that we changed the font and do not allow VB to
    ' get this Message
    WindowProc = CDRF_NEWFONT
    Exit Function
    End Select
    End With
    End If
    End With
    End Select
    ' Pass all messages on to VB and then return the value to windows
    WindowProc = CallWindowProc(OldProc, hWnd, iMsg, wParam, lParam)
    End Function

    Sub CustomListView()
    UserForm1.Show
    End Sub

    ''''''end code standard module




  10. #10
    Valued Forum Contributor ImranBhatti's Avatar
    Join Date
    03-27-2014
    Location
    Rawalpindi,Pakistan
    MS-Off Ver
    Office 365
    Posts
    1,784

    Re: Listview and colored line

    invalid outside procedure error on this

    Select Case iMsg
    Teach me Excel VBA

  11. #11
    Forum Moderator AliGW's Avatar
    Join Date
    08-10-2013
    Location
    Retired in Ipswich, Suffolk, but grew up in Sawley, Derbyshire (England)
    MS-Off Ver
    MS 365 Subscription Insider Beta Channel v. 2404 (Windows 11 22H2 64-bit)
    Posts
    79,369

    Re: Listview and colored line

    This thread is 16 years old ...
    Ali


    Enthusiastic self-taught user of MS Excel who's always learning!
    Don't forget to say "thank you" in your thread to anyone who has offered you help.
    You can reward them by clicking on * Add Reputation below their user name on the left, if you wish.

    Forum Rules (updated August 2023): please read them here.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1