Расширенные возможности по оформлению сетки
Ключевым событием сетки изображений считается событие, возникающее в момент перерисовки ячейки сетки:
propertyOnDrawCell: TDrawCellEvent;
TDrawCellEvent = procedure(Sender: TObject; ACol, ARow: Longint;
Rect: TRect; State: TGridDrawState) of object;
Обработчик этого события будет вызываться только в случае, если отключена (установлена в false) прорисовка по умолчанию:
propertyDefaultDrawing: Boolean;
Рисование осуществляется на холсте сетки изображений. Свойство Canvas
унаследовано от класса TCustomControl.
propertyCanvas: TCanvas;
Параметры события OnDrawCell() описаны в табл. 8.7.
Таблица 8.7. Параметры метода OnDrowCell()
Параметр | Назначение параметра |
Sender | Элемент управления. |
ACol, ARow | Координаты ячейки. |
Rect | Прямоугольная область соответствующей ячейки. |
State | gdSelected-ячейка выбрана gdFocused-ячейки в фокусе gdFixed- ячейка в фиксированной области |
Воплотим приобретенные знания в исходный код. Разместим на форме компонент TDrawGrid, зададим размерность сетки: 1000 колонок на 1000 строк. Размер ячеек (DefaultColWidth и DefaultRowHeight): 5×5 пикселов. Переведем свойство DefaultDrawing в false и опишем обработчик события OnDrawCell() так, как предложено в следующем примере:
procedureTForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
varCellColor : TColor;
Begin
WithDrawGrid1.canvas do
Begin
CellColor:=COLOR_ENDCOLORS + 1 +(ACol*DrawGrid1.RowCount)+(ARow);
Brush.color:=CellColor;
FillRect(Rect);
end;
end;
В результате ячейки сетки заливаются цветами из переменной CellColor.
Сетка строк – компонент TStringGrid
Как уже упоминалось, основное отличие сетки строк от сетки изображений
заключается в способности первой не только отображать, но и хранить текстовые данные. Такая возможность приобретена благодаря появлению нового свойства:
propertyCells[ACol, ARow: Integer]: string;
Это не что иное, как инкапсулированный в сетку набор TStrings, представленный в виде двумерного массива строк размерностью, определенной количеством столбцов и строк [0..ColCount-1, 0..RowCount-1].
StringGrid1.Cells[5,5]:=’Привет’; Еще один способ доступа к столбцу/строке реализован через свойства:
propertyCols[Index: Integer]: TStrings; //элементы колонки Index
propertyRows[Index: Integer]: TStrings; //элементы ряда Index
Например, таким образом можно заполнить шапку таблицы.
procedureTForm1.FormCreate(Sender: TObject);
varSL:TStringList;
Begin
SL:=TStringList.Create;
SL.Add(''); SL.Add('Кол. 1'); SL.Add('Кол. 2'); SL.Add('Кол. 3');
StringGrid1.Rows[0]:=SL;
SL.Clear;
SL.Add(''); SL.Add('Ряд 1'); SL.Add('Ряд 2'); SL.Add('Ряд 3');
StringGrid1.Cols[0]:=SL;
SL.free;
end;
Помимо строк сетка TStringGrid согласна хранить ссылки на объекты. Ссылки также размещаются в массиве и доступны через свойство:
propertyObjects [ACol, ARow: Integer]: TObject;
Пожалуй, наступило время серьезного эксперимента. Попробуем собрать
в сетку картинки из набора Delphi (по умолчанию они расположены в каталоге C:\Program Files\Common Files\Borland Shared\Images\Buttons). Для
этого откройте новый проект и разместите в нем сетку строк TStringGrid.
Проведите с ее свойствами следующие манипуляции:
ColCount:=10; RowCount:=20; Align:=alClient. Теперь вернитесь к форме, найдите в Инспекторе объектов событие OnCreate() и опишите его, как предложено в листинге:
procedureTForm1.FormCreate(Sender: TObject);
varBmpPath: string;
SR: TSearchRec;
I,aCol,aRow: integer;
BMP: TBitmap;
Begin
BmpPath:='С:\Program Files\Common Files\Borland Shared\Images\Buttons\';
aCol:=0; aRow:=0;
I:=FindFirst(BmpPath+'*.bmp',faAnyFile,SR);
whileI=0 do
Begin
StringGrid1.Cells[aCol,aRow]:=SR.Name;
BMP:= TBitmap.Create; //создаем объект
StringGrid1.Objects[aCol,aRow]:=BMP; //связываем объект с ячейкой
Дата добавления: 2016-03-15; просмотров: 586;