Я использую Delphi XE, и я хочу, чтобы стандартный ListView работал и выглядел так, как будто я хочу. Я хочу, чтобы listview был vsReport, поэтому у меня могут быть группы для моих элементов. Во время разработки я создал столбцы (один столбец с именем Тема), две группы и несколько элементов для каждой группы.Как предотвратить заголовок ListView от перекрытия верхней части первой группы?
Во время разработки ListView отлично смотрится, но во время выполнения моя первая группа частично скрыта под заголовком столбца. Вот изображения:
В DesignTime:
во время выполнения:
и вот мой DFM
object Form2: TForm2
Left = 326
Top = 150
Caption = 'Form2'
ClientHeight = 636
ClientWidth = 1289
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object ListView1: TListView
Left = 0
Top = 0
Width = 205
Height = 636
Align = alLeft
Columns = <
item
Caption = 'Topic'
Width = 200
end>
ColumnClick = False
DoubleBuffered = True
FullDrag = True
Groups = <
item
Header = 'First group'
GroupID = 0
State = []
HeaderAlign = taLeftJustify
FooterAlign = taLeftJustify
Subtitle = 'Options bellow'
TitleImage = 1
end
item
Header = 'Settings'
GroupID = 1
State = [lgsNormal]
HeaderAlign = taLeftJustify
FooterAlign = taLeftJustify
Subtitle = 'Other options here'
TitleImage = 0
end>
HideSelection = False
HotTrack = True
HotTrackStyles = [htUnderlineCold, htUnderlineHot]
Items.ItemData = {
059E000000030000000000000000000000FFFFFFFF0000000000000000000000
000A4600690072007300740020006900740065006D000100000001000000FFFF
FFFF0000000000000000000000000B5300650063006F006E0064002000690074
0065006D000200000002000000FFFFFFFF000000000100000000000000134600
69007300720074002000730065007400740069006E0067007300200069007400
65006D00}
GroupView = True
RowSelect = True
ParentDoubleBuffered = False
ShowWorkAreas = True
TabOrder = 0
ViewStyle = vsReport
OnClick = ListView1Click
ExplicitTop = 8
ExplicitHeight = 497
end
end
Как предотвратить это?
Параметр 'RecreateWnd()' на 'только TListView' будет достаточно. Изменение «ViewStyle» является излишним, так как это воссоздает окно формы и все дочерние элементы управления. –
Спасибо вам обоим. Реми Лебо, ваш комментарий тоже очень помог. Спасибо – user1137313
В качестве теста я создал 'TForm', метод' CreateWnd() 'напрямую вызывает те же API, что и' TListView', и в результате ListView не обнаруживает проблемы. Очень странно. Возможно, есть что-то лишнее, что «TListView» делает, чтобы запутать основное окно в том, как он управляет своим контентом по отношению к встроенному управлению заголовком. –