Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

4.9. Элемент msFlexGrid.

Элемент управления MSFlexGrid представляет собой сетку таблицы, в которую можно записывать элементы двумерного массива. Он предназначен только для выровненного по столбцам отображения таблицы. На панели элементов управления пиктограмма этого элемента отсутствует, поэтому его нужно вызвать, выполнив: “Проект \ Компоненты \ MSFlexGrid Control 6.0”. В окне возле этого компонента нужно поставить галочку и нажать ОК. В результате пиктограмма этого элемента появится на панели элементов управления. После этого он доступен для размещения на форме. Основные свойства элемента MSFlexGrid:

Таб. 4.8.

Свойство

Значение свойства

Name

Имя элемента

Height, Width

Высота и ширина всего элемента

Rows

Количество строк в сетке, начиная с нулевой

RowHeight

Высота строк в сетке

Cols

Количество столбцов в сетке, начиная с нулевого

ColWidth

Ширина столбцов в сетке

FixedRows

Количество фиксированных строк

FixedCols

Количество фиксированных столбцов

TextMatrix (i,j)

Значение элемента, помещаемого в ячейку i-ой строки и j-ого столбца

FormatString

Устанавливает ширину столбцов и выравнивание для нулевых строк и столбцов

Sort

Упорядочивает строки таблицы

В качестве префикса для имени используется msg.

Свойства Rows и Cols определяют количество строк и столбцов в сетке, включая нулевые строки и столбцы, которые называют строками и столбцами заголовков или фиксированными строками и столбцами. Они обрамляют сетку слева и сверху.

Свойства FixedRows и FixedCols определяют количества фиксированных строк и столбцов, соответственно. Число фиксированных строк и столбцов должно быть, по крайней мере, на 1 меньше соответственных значений свойств Rows и Cols. Если вообще фиксированные столбцы не нужны, то можно положить:

MSFG.FixedCols = 0.

Свойство TextMatrix(i,j) определяет значение содержимого ячейки i-ой строки и j-ого столбца. Это значение может иметь тип String или любой числовой тип. Свойства Height и Width определяют высоту и ширину всей сетки, а свойства RowHeight и ColWidth определяют высоту строк и ширину столбцов, соответственно.

Свойство FormatString устанавливает форматирование нулевых строк и столбцов. Это свойство содержит сегменты, отделяющиеся символом вертикальной черты (“|”). Текст между этими символами определяет заголовок столбца и может также содержать специальные символы выравнивания. Эти символы выравнивают текст слева (“<”), по центру (“^”) и справа (“>”). Ширина текста определяет ширину соответствующего данному сегменту столбца. Вся строка определяет “шапку” таблицы.

Форматная строка FormatString может содержать символ (“;”). Появление этого символа в форматной строке будет означать, что все следующие за ним символы будут интерпретироваться как заголовки строк таблицы.

Примеры:

  1. установка заголовков столбцов таблицы:

FG.FormatString=”^ Код |< Название|^ План|> Выполнение”

В результате получим:

Код

Название

План

Выполнение

Рис. 4.1. Установка заголовков столбцов в элементе MSFlexGrid.

  1. установка заголовков строк таблицы:

FG.FormatString= “; ФИО | Адрес | Телефон ”

В результате в фиксированном столбце получаем заголовки строк:

ФИО

Адрес

Телефон


Рис.4.2. Установка заголовков строк в элементе MSFlexGrid.

  1. установка заголовков строк и столбцов:

FG.FormatString s = “< ФИО |^ Таб. № |< Адрес |< Телефон ;” _

“| Сажин А.И. | Громов В.С. | Поляков И.П.“

Получаем таблицу:

ФИО

Таб. №

Адрес

Телефон

Сажин А.И.

Громов В.С.

Поляков И.П.

Рис. 4.3а. Установка заголовков столбцов и строк в MSFlexGrid.

Если бы требовалось, чтобы левая верхняя ячейка была пустой, то в строке s вместо “ФИО” нужно было бы набрать несколько пробелов:

FG.FormatString= “ |^ Таб. № |< Адрес |< Телефон ; “ _

“| Сажин | Громов | Поляков“.

Тогда получили бы:

Таб. №

Адрес

Телефон

Сажин А.И.

Громов В.С.

Поляков И.П.

Рис. 4.3б. Установка заголовков столбцов и строк в MSFlexGrid.

Из этих примеров видно, что при использовании свойства FormatString ширина нулевого столбца определяется наиболее длинным текстом в его строках, а ширины остальных столбцов зависят от длины текста в заголовках столбцов, т.е. в элементах нулевой строки.

Часто элемент MSFlexGrid используется для отображения на форме двумерных массивов (матриц). В этих случаях использовать свойство FormatString нецелесообразно, т.к. нет необходимости иметь разные ширины столбцов. При выводе числовой матрицы они должны быть одинаковы. Сделать это можно следующим образом:

Пусть требуется отобразить в элементе MSFlexGrid числовую матрицу размерности M x N. Приведем фрагмент соответствующего кода:

Dim m%, n%, a%(), i%, j%

m = InputBox(“Введите количество строк матрицы”)

n = InputBox(“Введите количество столбцов матрицы”)

ReDim a(1 To m, 1 To n)

FG.Rows = m +1: FG.Cols = n + 1

For i = 0 To m

FG.RowHeight(i) = FG.Height \ (m + 2)

Next i

For j = 0 To n

FG.ColWidth(j) = FG.Width \ (n + 2)

Next j

Делим на m + 2 и n + 2, чтобы появляющиеся иногда на элементе полосы прокрутки не загораживали последнюю строку и столбец. Теперь вводим матрицу и отображаем ее в нашем элементе FG:

For i = 1 To m

For j = 1 To n

a(i, j) = Int(Rnd*100)

FG.TextMatrix(i, j) = a(i, j)

Next j, i

Хорошо было бы еще пронумеровать строки и столбцы матрицы. Сделаем и это:

For i = 1 To m

FG.TextMatrix(i, 0) = i

Next i

For j = 1 To n

FG.TextMatrix(0, j) = j

Next j

Чтобы закрасить, например, синим цветом ячейку с координатами (i, j), а символы на ней вывести белым цветом, нужно выполнить:

FG.Row = i

FG.Col = j

FG.CellBackColor = vbBlue

FG.CellForeColor = vbWhite

Свойство CellBackColor возвращает или устанавливает цвет фона индивидуальных ячеек или области ячеек. Свойство CellForeColor возвращает или устанавливает цвет символов в индивидуальных ячейках или области ячеек. Эти свойства недоступны в режиме design. Чтобы установить цвета разных элементоы объекта MSFlexGrid, используются свойства BackColorBkg (цвет незанятого сеткой поля), BackColorFixed (цвет фона ячеек нулевых строк и столбцов), ForeColorFixed (цвет символов в нулевый строках и столбцах), BackColorSel и ForeColorSel (цвет фона и символов в выбранной ячейке, соответственно).

Чтобы установить один и тот же цвет фона всех ненулевых ячеек, используется свойство BackColor и, соответстенно, для символов - ForeColor.

Свойства MouseCol и MouseRow определяют координаты столбца и строки выбранной щелчком мышки ячейки элемента MSFlexGrid. Это позволяет создать процедуру заполнения данными или редактирования выбираемых мышкой ячеек:

Private Sub fg_Click()

Dim i%, j%, n%

i = fg.MouseRow

j = fg.MouseCol

n = InputBox(“Введите помещаемое в выбранную ячейку значение”)

fg.TextArray(i * fg.Cols + j)

End Sub

Можно еще создать функцию, определяющую ячейку, по которой щелкнули мышкой:

Function GetCellindex(row, col) As Integer

GetCellindex = row * fg.Cols + col

End Function

Теперь в процедуре Sub fg_Click() последнюю строку кода можно записать так:

fg.TextArray(GetCellindex(i,j)) = n

Использованное здесь свойство TextArray позволяет устанавливать или получать содержимое ячейки без программного задания значений свойств Row и Col. Оно имеет синтаксис:

object.TextArray(cellindex) [ = string ]

Здесь: cellindex – целочисленное выражение, определяющее ячейку для

чтения или записи данных;

string – строковое выражение, определяющее содержимое

выбранной ячейки.

Параметр cellindex для выбранной мышкой ячейки вычисляется по формуле: cellindex = row * fg.Cols + col.

Если требуется программно выбрать некоторый диапазон ячеек, то можно воспользоваться свойствами RowSel и ColSel. Они возвращают или устанавливают начальный или конечный столбец (или строку, соответственно) требующегося диапазона ячеек. Оба свойства доступны только в режиме run. Их синтаксис:

object.RowSel [ = value ]

object.ColSel [ = value ]

Здесь value – это выражение, принимающее значение типа Long и определяющее начальный столбец или строку диапазона ячеек. Свойства RowSel и ColSel можно использовать, чтобы выделить определенную область на элементе MSFlexGrid или прочесть размерности области, которую пользователь выбрал с помощью программного кода. Выбранной будет область между строками с номерами Row и RowSel и столбцами Col и ColSel. При этом RowSel может быть как выше, так и ниже Row, а ColSel – как левее, так и правее Col.

Чтобы выбрать блок ячеек, нужно сначала программно задать значения Row и Col, а затем RoeSel и ColSel.

Пример: следующий код позволяет выбрать диапазон ячеек в третьем столбце MSFlexGrid:

fg.Col = 3

fg.Row = 4: fg.RowSel = 7

Аналогично, код:

fg.Row = 5

fg.Col = 2: fg.ColSel = 7

выбирает диапазон ячеек в 5-ой строке.

Если задать:

fg.Row = 2: fg.Col = 2

fg.RowSel = 7: fg.ColSel = 5

то будет выделен блок ячеек, находящихся между указанными границами диапазонов строк и столбцов.

Не следует путать понятия Cell и Sel. Cell – это ячейка, а Sel – это сокращение от слова Selection (выбор).

Пример. Ввести элементы целочисленного двумерного массива и отобразить полученную матрицу в элементе MSFlexGrid. Ячейки элемента MSFlexGrid, в которых окажутся простые числа, закрасить красным цветом, а текст в них сделать белым. Откроем новый проект и разместим на форме элемент MSFlexGrid, которому дадим имя FG, и две командные кнопки. Для кнопки Command2 запишем код, завершающий работу программы:

Private Sub Command2_Click()

End

End Sub

Для кнопки Command1 запишем код, решающий нашу задачу:

Private Sub Command1_Click()

Dim m%, n%, a%(), i%, j%, k%, f As Boolean

m = InputBox(“Введите количество строк матрицы”)

n = InputBox(“Введите количество столбцов матрицы”)

ReDim a(1 To m, 1 To n)

FG.Rows = m +1: FG.Cols = n +1

For i = 0 To m

FG.RowHeight(i) = FG.Height \ (m + 2)

If i <> 0 Then FG.TextMatrix(i, 0) = i

Next i

For j = 0 To n

FG.ColWidth(j) = FG.Width \ (n + 2)

If j <> 0 Then FG.TextMatrix(0, j) = j

Next j

Randomize

For i = 1 To m

For j = 1 To n

a(i, j) = Int(Rnd*100)

FG.TextMatrix(i, j) = a(i, j)

Next j,i

Теперь среди элементов матрицы ищем простые числа и закрашиваем соответствующие им ячейки элемента MSFlexGrid:

For i = 1 To m

For j = 1 To n

f = True

For k = 2 To a(i, j) \ 2

If a(i, j) mod k = 0 Then f = False: Exit For

Next k

FG.Row = i: FG.Col = j

If f Then

FG.CellBackColor = vbRed

FG.CellForeColor = vbWhite

Else

FG.CellForeColor= vbBlack

End If

Next j, i

Запустив приложение на выполнение, получим:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]