У меня есть база данных 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