Использование компонента StringGrid
Для ввода массива удобно использовать компонент StringGrid. Значок компонента StringGrid находится на вкладке Additional.
Рис. 12.Компонент StringGrid
Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов. В табл. перечислены некоторые свойства компонента StringGrid.
Таблица.Свойства компонента StringGrid
Свойство | Определяет | ||
Name | Имя компонента. Используется в программе для доступа к свойствам компонента | ||
Свойство | Определяет | |||
ColCount | Количество колонок таблицы | |||
RowCount | Количество строк таблицы | |||
Cells | Соответствующий таблице двумерный массив. Ячейка таблицы, находящаяся на пересечении столбца номер col и строки номер row определяется элементом cells [col, row] | |||
FixedCols | Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и при горизонтальной прокрутке таблицы остаются на месте | |||
FixedRows | Количество зафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте | |||
Options . goEditing | Признак допустимости редактирования содержимого ячеек таблицы. True — редактирование разрешено, False — запрещено | |||
Options . goTab | Разрешает (True) или запрещает (False) использование клавиши <Таb> для перемещения курсора в следующую ячейку таблицы | |||
Options . GoAlways-ShowEditor | Признак нахождения компонента в режиме редактирования. Если значение свойства False, то для того, чтобы в ячейке появился курсор, надо начать набирать текст, нажать клавишу <F2> или сделать щелчок мышью | |||
DefaultColWidth | Ширину колонок таблицы | |||
DefaultRowHeight | Высоту строк таблицы | |||
GridLineWi-dth | Ширину линий, ограничивающих ячейки таблицы | |||
Left | Расстояние от левой границы поля таблицы до левой границы формы | |||
Top | Расстояние от верхней границы поля таблицы до верхней границы формы | |||
Height | Высоту поля таблицы | |||
Width | Ширину поля таблицы | |||
Font | Шрифт, используемый для отображения содержимого ячеек таблицы | |||
ParentFont | Признак наследования характеристик шрифта формы | |||
TDrawGrid - произвольная таблица
Компонент TDrawGrid предоставляет программисту мощные возможности создания и обслуживания табличных структур данных. Он обеспечивает двухмерное представление данных, упорядоченных по столбцам и рядам, и избавляет программиста от многих рутинных аспектов, связанных с представлением и обслуживанием таблиц.
Чтобы таблица была работоспособной, в ней как минимум следует определить обработчик события OnDrawCell, которое возникает при необходимости прорисовать ту или иную ячейку. Для прорисовки используется табличное свойство Canvas.
Компонент TDrawGrid является непосредственным родителем строковой таблицы TStringGrid, поэтому передает ей все свои свойства, методы и события за исключением специфичных для строк свойств Cells, Cols, Objects И Rows. Поскольку порядок описания компонентов в этой главе соответствует умалчиваемому порядку их расположения на страницах палитры компонентов, TStringGrid описан раньше своего родителя TDrawGrid, и вы сможете найти информацию о свойствах, методах и событиях последнего в предыдущем параграфе.
В следующем примере компонент TDrawGrid используется для показа текста и картинок одновременно, причем текст можно редактировать. Картинки взяты из каталога images l splash | igcolor (рис. 14).
Рис. 14.Пример использования таблицы TDrawGrid для отображения картинок и текста
Если вы захотите повторить пример, следует сначала подготовить пустую форму главного окна. Дайте ей имя fmDrawGrid и вставьте в описание класса TfmDrawGrid такое поле:
Public
sIBitMap: TSringList;
Это поле будет использоваться для хранения текстовых строк и картинок. Его необходимо создать и наполнить в момент создания окна и уничтожить при его уничтожении. Поэтому создайте следующие Обработчики событий OnCreate и OnDestroy для формы:
procedureTfmDrawGrid.FormCreate(Sender: TObject);
// Создает и наполняет список sIBitMap
Const
FNames: array[0..3] of String= {Имена файлов с картинками} ('athena.bmp', 'construe.bmp', 'earth.bmp', 'technlgy.bmp');
Var
k: Integer;
Begin
// Создаем список строк:
sIBitMap := TStringList.Create;
// Вставляем в него названия файлов и картинки:
withsIBitMap do for k := 0 to 3 do
Begin
Add(FNames[k]) ;
Objects[k] := TBitMap.Create;
(Objects[k] as TBitMap).LoadFromFile(FNames[k])
end;
end;
procedureTfmDrawGrid.FormDestroy(Sender: TObject);
// Уничтожает список строк
Begin
sIBitMap.Free
end;
Обратите внимание: в именах файлов нет маршрута поиска, поэтому следует скопировать файлы, перечисленные в константе FNames, из каталога images | splash | 16 color в каталог для размещения ваших учебных программ и в этом же каталоге сохранить форму fmDrawGrid и проект под именем DrawGrid. После этого полезно осуществить прогон программы, чтобы убедиться в доступности файлов. Если при прогоне появится сообщение cannot open file, еще раз убедитесь в том, что файл drawgrid. exe создан в том же каталоге, в котором находятся вмр-файлы.
Поместите на пустую форму компонент TDrawGrid и установите для него следующие значения свойств:
Свойство | Значение | Комментарий |
Align | alClient | Таблица занимает всю клиентскую часть окна |
ColCount | В таблице 2 колонки | |
FixedCols | Нет фиксированных колонок | |
FixedRows | Нет фиксированных рядов | |
Name | dgDraw | Имя таблицы |
Options.goEditing | True | Разрешено редактирование текста |
RowCount | В таблице 2 строки | |
ScrollBars | sbNone | He надо вставлять полосы прокрутки |
Теперь необходимо создать обработчики событий OnGetEditText, OnSetEditText иOnDrawCell. Два первых используются для редактирования текста, а обработчик OnDrawCell обязательно создается для любого компонента TDrawGrid, т. к. без него компонент не сможет заполнить пустые клетки каким-либо изображением или текстом.
procedureTfmDrawGrid.DrawGridlGetEditText(Sender: TObject;
ACol, ARow: Integer;
varValue: String) ;
// Передает редактору текст из ячейки
Begin
Value := slBitMap[2 * ACol + Arow]
end;
procedureTfmDrawGrid.DrawGridlSetEditText(Sentier: TObject;
ACol, ARow: Integer; constValue: String) ;
// Получает текст из редактора и сохраняет его в sIBitMap
Begin
slBitMap[2 * ACol + ARow] := Value
end;
procedureTfmDrawGrid.dgDrawDrawCell(Sender: TObject;
Col, Row: Integer; Rect: TRect; State: TGridDrawState) ;
// Рисует картинку из sIBitMap.Objects и текст из sIBitMap
Var
k: Integer;
Begin
// Пересчитываем координаты ячейки в индекс списка:
k := 2 * Col + Row;
Дата добавления: 2016-03-04; просмотров: 1316;