Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

6.23. Таблицы (msFlexGrid)

Объект (компонент Microsoft FlexGrid. Control 6.0) позволяет представить данные на форме в табличном виде.

Специфичные свойства

Rows, Cols - число строк и колонок в таблице.

GrideLines, ScrollBar ‑ наличие линий в сетке и полосы прокрутки.

ColWidth(i)/RowHeight(i) ‑ширина/высота i-й колонки/строки таблицы (доступно только при выполнении программы).

FixedRows/FixedColsчисло первых строк/колонок, зафиксированных в таблице. Обычно они используются для заголовков строки колонок.

FormatString‑ задает тексты заголовков колонок и строк в виде строки, в ко­­торой заголовки разделены символами: “|” (разделение текста, поме­щаемо­го в различные заголовки), “<”, “>”, “^” (выравнивание текста влево, впра­­во или по центру), “;” (начало информации с заголовками строк).

Пример.Задать заголовки трех колонок с названиями месяцев и четырех строк с названием товаров. Значение FormatString будет:

“|>Январь|>Февраль|>Март;|^Масло|^Сахар|^Мясо|^Хлеб”

ColAlignment(i)‑ выравнивание значений в i-й колонке.

Row,Col,Text ‑ номер строки, колонки (отсчет с нуля) и значение текущей ячей­­ки.

TextMatrix‑ представляет собой массив со всеми ячейками таблицы.

Пример.MSFlexGrid1.TextMatrix(1,2)=”Иванов”

CellPicture‑ задает рисунок для текущей ячейки в виде, например:

Set MSFlexGrid1.CellPicture=LoadPicture(App.Path +”\apple.bmp”)

Sort=n‑ задает порядок сортировки по выделенной колонке таблицы: 0 (не сортировать);1 (по возрастанию); 2 (по убыванию); 3 или 4 (по возрас­танию или убыванию; строки рассматриваются как числа); 5 или 6 (по воз­рас­танию или убыванию без учета регистра); 7 или 8 (по возрастанию или убы­ва­нию с учетом регистра); 9 (пользовательский порядок сортировки, определяемый событием сетки Compare).

Пример.

MSFlexGrid1.Col=0 ‘выделение первой колонки

MSFlexGrid1.Sort=7 ‘сортировка по возрастанию с учетом регистра

MergeCells=n ‑ задает способ объединения данных в ячейках: 0 (объеди­не­ние запрещено); 1 (ячейка может быть объединена со значением в строке или в столбце, прилегающем к ней); 2, 3, 4 (данные могут быть объединены по строкам, столбцам, строкам и столбцам соответственно).

MergeCol, MergeRow‑ задают (True) объединяемые колонки или строки.

Например, если после сортировки значения в некоторых соседних строках совпадают для первых двух колонок, то их можно объединить, что исключит повторение значений:

MSFlexGrid1.MergeCol(0)=True ‘объединяемый первый столбец

MSFlexGrid1.MergeCol(1)=True ‘объединяемый второй столбец

MSFlexGrid1.MergeCells=1 ‘объединение соседних строк и столбцов

В процедуре Load можно динамически изменить свойства таблицы.

Пример. Разработаем программу, реализующую игру “Морской бой” (рис. 6.23.1). В форме размещена таблица размером 7 х 7; ей соответствует массив M(7,7), в котором случайным образом помечены элементы со значением 1. Эти элементы задают местоположение кораблей в таблице, которые игрок должен потопить, щелкая мышкой по соответствующим ячейкам. Игрок должен задать число всех кораблей перед началом игры в поле Text1 (“Число кораблей”).

Для таблицы MFFlexgrid1 зададим свойства: Enabled=False, Fixed­Rows=0, Rows=7, Cols=7, FixedCol=0. Для полей Text1, Text2, Text3 зада­дим для свой­ства Text значения 1, 0, 0, для счетчикаUpDown1 –Bud­dyCon­trol=Text1,SyncBuddy=True,BuddyProperty=Text*.

Рис. 6.23.1. Форма игры “Морской бой”

Приведем тексты процедур.

(General)(Declarations) ‑ раздел глобальных объявлений формы

Dim m(6, 6) As Integer ‘объявление массива из 7 строк и 7 колонок

Private Sub Command1_Click () ‘процедура обработки кнопки “Начало”

Dim i As Integer, j As Integer, k As Integer ‘объявление переменных циклов

Text2.Text= 0: Text3.Text= 0 ‘обнуление значений полей Text2, Text3

Randomize Timer ‘включение счетчика случайных чисел

For i = 0 To 6 ‘очистка массива M и таблицы MSFlexGrid1

For j = 0 To 6 ‘цикл по колонкам

m(i, j) = 0 ‘обнуление текущего элемент массива M

MSFlexGrid1.TextMatrix(i,j)= ”” ‘очистка значения текущей ячейки таблицы

Next ‘конец тела цикла по колонкам массива M

Next ‘конец тела цикла по строкам массива M

For k=1 To Text1.Text ‘цикл формирования местоположения кораблей в таблице

i = 6 * Rnd: j = 6 * Rnd ‘формирование случайных координат ячейки таблицы

If m(i, j)=1 Then k = k ‑ 1 Else m(i, j) = 1 ‘пометка числом 1 ячейки с кораблем

Next ‘конец тела цикла

MSFlexGrid1.Enabled=True ‘разрешение на использование таблицы

End Sub

Private Sub MSFlexGrid1_Click () ‘процедура щелчка по таблице (выстрел)

Text3.Text= Text3.Text+ 1 ‘число выстрелов увеличивается на единицу

If m(MSFlexGrid1.Row, MSFlexGrid1.Col) = 1 Then ‘снаряд попал в корабль

MSFlexGrid1.Text= ”Потоплен” ‘вывод текста в текущую ячейку таблицы

‘обнуление текущего элемента массива M для потопленного корабля

m(MSFlexGrid1.Row, MSFlexGrid1.Col)=0

Text2.Text= Text2.Text+ 1 ‘число потопленных кораблей увеличивается на 1

If Text1.Text= Text2.Text Then ‘потоплен последний корабль

MsgBox ”Победа!”, vbOKOnly, ”Морской бой” ‘сообщение (рис.6.23.1)

MSFlexGrid1.Enabled=False ‘блокировка таблицы

End If

Else ‘снаряд не попал в корабль

MSFlexGrid1.Text= ”X” ‘пометка символом X выстрела по текущей ячейке

End If

End Sub

Private Sub Command2_Click () ‘процедура обработки кнопкиВыход

End ‘завершение работы программы

End Sub