Введение
MSFlexGrid контрол используется для вывода табличных данных. Об этом контроле пойдёт речь в этой статье. Контрол MSFlexGrid допускает форматирование текста внутри ячеек и вставка в таблицу картинок. Возможна связь контрола с базой данных. Для подключения контрола MSFlexGrid к проекту откройте меню Project|Components и отметьте пункт “Microsoft FlexGrid control”.
Доступ к содержимому ячеек
Количество строк и колонок указывается свойствами, соответственно, Rows и Cols. Отсчёт строк и колонок начинается с 0. Текущую строку указывает свойство Row, а текущую колонку свойство Col.
Debug.Print "Всего строк " & MSFlexGrid.Rows
Debug.Print "Всего колонок " & MSFlexGrid.Cols
Debug.Print "Текущая строка " & MSFlexGrid.Row
Debug.Print "Текущая колонка " & MSFlexGrid.Col
Доступ к содержимому текущей ячейки (которая выделена пользователем) осуществляется через свойство Text.
Debug.Print MSFlexGrid.Text
MSFlexGrid.Text = "Привет!"
Для доступа к содержимому произвольной ячейки используется свойство TextArray. Оно имеет один параметр - Index. Это индекс ячейки, содержимое которой нужно изменить или получить. Он вычисляется следующим образом. К номеру столбца ячейки прибавляется произведение ее номера строки на количество колонок, определяемое свойством Cols. Для расчёта индекса ячейки удобно использовать эту функцию:
Function GetCellIndex (MSFlexGrid As MSFlexGrid, row As Integer, col As Integer)
GetCellIndex = row * MSFlexGrid.Cols + col
End Function
Также можно добавлять строки с помощью метода AddItem.
MSFlexGrid.AddItem "Строка"
Разделителем колонок служит vbTab.
MSFlexGrid.AddItem "Строка1" & vbTab & "Строка2" & vbTab & "Строка3"
Удалять строки можно, используя метод RemoveItem. Первый параметр - index указывает, какую строку нужно удалить. Для первой строки index = 0.
MSFlexGrid.RemoveItem 2
Форматирование текста
В ячейках может содержаться текст, изображение, а может и то и другое. В MSFlexGrid возможно форматирование текста: выделение курсивом, подчёркиванием, полужирным, изменением цвета фона и текста, выравнивание текста, изменение шрифта и размера шрифта, стиль текста и др.
Свойства, служащие для форматирования текста ячеек представлены в таблице.
Свойство |
Тип данных |
Значение по умолчанию |
Описание |
CellAlignment |
Integer |
0 |
Выравнивание содержимого ячейки. |
CellBackColor |
OLE_Color |
0 |
Цвет фона ячейки. |
CellFontBold |
Boolean |
False |
Задаёт жирное начертание. |
CellFontItalic |
Boolean |
False |
Задаёт начертание курсивом. |
CellFontName |
String |
MS Sans Serif |
Название шрифта. |
CellFontSize |
Single |
8,25 |
Размер шрифта. |
CellFontStrikeThrough |
Boolean |
False |
Задаёт перечёркнутое начертание. |
CellFontUnderline |
Boolean |
False |
Задает подчеркнутое начертание. |
CellFontWidth |
Single |
0 |
Ширина шрифта в точках. |
CellFontColor |
OLE_Color |
0 |
Цвет шрифта ячейки. |
Все эти свойства не доступны в Design time. Свойства применяются к текущей ячейке.
Свойство CellAlignment может принимать значение одной из констант:
Константа |
Значение |
Описание |
flexAlignLeftTop |
0 |
Слева сверху. |
flexAlignLeftCenter |
1 |
Слева в центре. Это значение по умолчанию для ячеек, содержащих текст. |
flexAlignLeftBottom |
2 |
Слева снизу. |
flexAlignCenterTop |
3 |
В центре сверху. |
flexAlignCenterCenter |
4 |
В центре ячейки. |
flexAlignCenterBottom |
5 |
В центре снизу. |
flexAlignRightTop |
6 |
Справа сверху. |
flexAlignRightCenter |
7 |
Справа в центре. Это значение по умолчанию для ячеек, содержащих числа. |
flexAlignRightBottom |
8 |
Справа снизу. |
flexAlignGeneral |
9 |
Общее выравнивание. Слева в центре, если ячейка содержит текст и справа в центре, если ячейка содержит число. |
Вставка изображения в ячейку
В ячейку можно вставлять изображения. Для этого служит свойство CellPicture типа Picture. Можно вставлять изображения любого типа, с которыми умеет работать VB. Это Bitmap (bmp), Icon (ico), Windows Metafile (wmf), JPEG (jpg) и GIF (gif). Если вставить анимированное GIF изображение, то показывается только первый кадр. Изображение можно загрузить из файла, используя функцию LoadPicture или из другого объекта, например Picture или Image.
Set MSFlexGrid.CellPicture = LoadPicture ("C:\Windows\Облака.bmp")
Set MSFlexGrid.CellPicture = Image1.Picture
Изображение также можно выравнивать. Для этого служит свойство CellPictureAlignment. Оно может принимать значение одной из следующих констант:
flexAlignLeftTop = 0
flexAlignLeftCenter = 1
flexAlignLeftBottom = 2
flexAlignCenterTop = 3
flexAlignCenterCenter = 4
flexAlignCenterBottom = 5
flexAlignRightTop = 6
flexAlignRightCenter = 7
flexAlignRightBottom = 8
Что означают эти константы, думаю, понятно из их названия.
Заголовки строк и колонок
Заголовки строк и колонок в MSFlexGrid представляют собой нескроллируемую строку/колонку. Наличие заголовков строк и колонок устанавливается свойствами FixedRows и FixedCols соответственно.
Содержимое заголовков определяется свойством FormatString. Следующий пример показывает, как установить заголовки колонок:
Dim s As String
s = "<ID|Name|Email|Order"
MSFlexGrid.FormatString = s
Заголовки строк определяются похожим образом:
Dim s As String
s = ";Первый|Второй|Третий|Четвёртый"
MSFlexGrid.FormatString = s
Цвет фона всех заголовков можно установить свойством BackColorFixed. Цвет шрифта заголовков определяет свойство ForeColorFixed.
Заголовок - это группа ячеек, так что к нему применимы все те же способы форматирования содержимого, что и для других ячеек.
Ширина, высота строк и колонок
Ширина колонок устанавливается свойством ColWidth. Единственный параметр index указывает индекс колонки, ширину которой получаем или устанавливаем. Свойство имеет тип Long и устанавливается в твипах.
MsgBox MSFlexGrid.ColWidth (2)
MSFlexGrid.ColWidth (2) = 1500
Высота колонок определяется свойством RowHeight, также имеющим тип Long и измеряющимся в твипах. В качестве параметра задаётся индекс строки.
MsgBox MSFlexGrid.RowHeight (34)
MSFlexGrid.RowHeight (34) = 200
Также можно установить минимальную высоту строк. Это делается с помощью свойства RowHeightMin.
Пользователь и сам может изменять высоту строк и ширину колонок. Но для этого нужно установить соответствующее значение свойства AllowUserResizing. Это свойство имеет тип AllowUserResizeSettings и может принимать значение одной из следующих констант:
Константа |
Значение |
Описание |
flexResizeNone |
0 |
Пользователь не может изменять ни высоту строк, ни ширину колонок. Это значение устанавливается по умолчанию. |
flexResizeColumns |
1 |
Пользователь может изменять только ширину колонок. |
flexResizeRows |
2 |
Пользователь может изменять только высоту строк. |
flexResizeBoth |
3 |
Пользователь может изменять и высоту строк, и ширину колонок. |
Свойства, определяющие внешний вид контрола
В MSFlexGrid достаточно гибко регулируется внешний вид. Очень много свойств, определяющих цвета разных элементов контрола. Все они имеют тип OLE_Color. Они перечислены в этой таблице:
Свойство |
Значение по умолчанию |
Описание |
BackColor |
&H80000005& |
Цвет фона части контрола, занятой данными (все ячейки). |
BackColorBkg |
&H00808080& |
Цвет остальной части контрола. |
BackColorFixed |
&H8000000F& |
Цвет фона заголовков. |
BackColorSel |
&H8000000D& |
Цвет выделения. |
ForeColor |
&H80000008& |
Цвет шрифта. |
ForeColorFixed |
&H80000012& |
Цвет шрифта заголовков. |
ForeColorSel |
&H8000000E& |
Цвет шрифта выделенной части. |
GridColor |
&H00C0C0C0& |
Цвет линий, разделяющих ячейки. |
GridColorFixed |
&H00000000& |
Цвет линий, разделяющих ячейки заголовка. |
Другие свойства, определяющие вид контрола:
Свойство |
Тип данных |
Значение по умолчанию |
Описание |
Appearance |
AppearanceSettings |
flex3D |
Наличие 3D эффектов. |
BorderStyle |
BorderStyleSettings |
flexBorderSingle |
Наличие окантовки. |
GridLines |
GridLineSettings |
flexGridFlat |
Тип линий, разделяющих ячейки. |
GridLinesFixed |
GridLineSettings |
flexGridInset |
Тип линий, разделяющих ячейки заголовка. |
GridLineWidth |
Integer |
1 |
Толщина линий. |
HighLight |
HighLightSettings |
flexHighlightAlways |
Определяет, при каких условиях будет видно выделение ячеек цветом. |
ScrollBars |
ScrollBarsSettings |
flexScrollBarBoth |
Наличие вертикальных и горизонтальных полос прокрутки. |
TextStyle |
TextStyleSettings |
flexTextFlat |
Стиль текста. |
TextStyleFixed |
TextStyleSettings |
flexTextFlat |
Стиль текста в заголовке. |
Свойство GridLines и GridLinesFixed могут принимать значения одной из констант:
Константа |
Значение |
Описание |
flexGridNone |
0 |
Нет линий. |
flexGridFlat |
1 |
Обычные 2D линии. |
flexGridInset |
2 |
Вдавленные линии. |
flexGridRaised |
3 |
Приподнятые линии. |
Свойство HighLight может принимать значение одной из следующих констант:
Константа |
Значение |
Описание |
flexHighlightNever |
0 |
Выделение ячеек не будет видно. |
flexHighlightAlways |
1 |
Выделение ячеек видно всегда. |
flexHighLightWithFocus |
2 |
Выделение будет видно, только если фокус находится на контроле. |
Пример можно скачать
здесь.