Выравнивание значков подпунктов списка - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть база данных MS_Access 2010, которая использует элемент управления просмотра списка.Мне удалось центрировать или выровнять по правому краю значки заголовков некоторых столбцов, используя вызов API в примере.Чего я не могу найти, так это сделать то же самое с подпунктами этого столбца. Мне нужно, чтобы значки были центрированы по эстетическим соображениям.

Я нашел эту статью, но она не работает в среде Access.

Значок центрального подэлемента в ListView

Кроме того, создание подкласса элемента управления listview кажется ненужным, поскольку пример заголовков также работает без подкласса элемента управления listview.

Option Compare Database
Option Explicit

Private Const IDC_HAND = 32649&
Private Declare Function LoadCursorLong Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWndLock As Long) As Long

Private Type LV_ITEM
    mask As Long
    iItem As Long
    iSubItem As Long
    State As Long
    stateMask As Long
    pszText As String
    cchTextMax As Long
    iImage As Long
    lParam As Long
    iIndent As Long
End Type

Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETTOPINDEX As Long = (LVM_FIRST + 39)
Private Const LVM_GETCOUNTPERPAGE As Long = (LVM_FIRST + 40)
Private Const LVM_GETHEADER = (LVM_FIRST + 31)
Private Const LVM_SETITEMSTATE As Long = (LVM_FIRST + 43)

Private Const LVIS_FOCUSED As Long = &H1
Private Const LVIS_SELECTED As Long = &H2
Private Const LVIF_STATE As Long = &H8

Private Const HDI_BITMAP = &H10
Private Const HDI_IMAGE = &H20
Private Const HDI_FORMAT = &H4
Private Const HDI_TEXT = &H2

Private Const HDF_BITMAP_ON_RIGHT = &H1000
Private Const HDF_BITMAP = &H2000
Private Const HDF_IMAGE = &H800
Private Const HDF_STRING = &H4000
Private Const HDF_LEFT = &H0
Private Const HDF_RIGHT = &H1
Private Const HDF_CENTER = &H2

Private Const HDM_FIRST = &H1200
Private Const HDM_SETITEM = (HDM_FIRST + 4)
Private Const HDM_SETIMAGELIST = (HDM_FIRST + 8)
Private Const HDM_GETIMAGELIST = (HDM_FIRST + 9)

Private Type HD_ITEM
    mask As Long
    cxy As Long
    pszText As String
    hbm As Long
    cchTextMax As Long
    fmt As Long
    lParam As Long
    iImage As Long
    iOrder As Long
End Type

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 

Это код, который фактически центрирует значки заголовков: переменная выравнивания содержит следующие значения: HDF_LEFT / HDF_RIGHT / HDF_CENTER

Private Sub showHeaderIcon(colNo As Long, imgIconNo As Long, showImage As Boolean, align As Long)

    Dim hHeader As Long
    Dim HD As HD_ITEM

    hHeader = SendMessage(LV.hWnd, LVM_GETHEADER, 0, ByVal 0)

    'set up the required structure members
    With HD
        .mask = HDI_IMAGE Or HDI_FORMAT
        .pszText = LV.ColumnHeaders(colNo + 1).text
        If showImage Then
            .fmt = HDF_STRING Or align Or HDF_IMAGE Or HDF_BITMAP_ON_RIGHT
            .iImage = imgIconNo
        Else
            .fmt = HDF_STRING Or align
        End If
    End With

    'modify the header
    Call SendMessage(hHeader, HDM_SETITEM, colNo, HD)
End Sub

Как я могу сделать то же самое для каждого подпункта одного и того же столбца?Надеюсь, вы можете помочь?Thx, Emphyrio

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...