Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Расширенные возможности по оформлению сетки






 

Ключевым событием сетки изображений считается событие, возникающее в момент перерисовки ячейки сетки:

property OnDrawCell: TDrawCellEvent;

TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint;

Rect: TRect; State: TGridDrawState) of object;

 

Обработчик этого события будет вызываться только в случае, если отключена (установлена в false) прорисовка по умолчанию:

property DefaultDrawing: Boolean;

 

Рисование осуществляется на холсте сетки изображений. Свойство Canvas

унаследовано от класса TCustomControl.

property Canvas: 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() так, как предложено в следующем примере:

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

var CellColor: TColor;

Begin

WithDrawGrid1.canvas do

Begin

CellColor: =COLOR_ENDCOLORS + 1 +(ACol*DrawGrid1.RowCount)+(ARow);

Brush.color: =CellColor;

FillRect(Rect);

end;

end;

 

В результате ячейки сетки заливаются цветами из переменной CellColor.

Сетка строк – компонент TStringGrid

 

Как уже упоминалось, основное отличие сетки строк от сетки изображений

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

property Cells[ACol, ARow: Integer]: string;

 

Это не что иное, как инкапсулированный в сетку набор TStrings, представленный в виде двумерного массива строк размерностью, определенной количеством столбцов и строк [0..ColCount-1, 0..RowCount-1].

StringGrid1.Cells[5, 5]: =’Привет’; Еще один способ доступа к столбцу/строке реализован через свойства:

property Cols[Index: Integer]: TStrings; //элементы колонки Index

property Rows[Index: Integer]: TStrings; //элементы ряда Index

 

Например, таким образом можно заполнить шапку таблицы.

procedure TForm1.FormCreate(Sender: TObject);

var SL: 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 согласна хранить ссылки на объекты. Ссылки также размещаются в массиве и доступны через свойство:

property Objects [ACol, ARow: Integer]: TObject;

 

Пожалуй, наступило время серьезного эксперимента. Попробуем собрать

в сетку картинки из набора Delphi (по умолчанию они расположены в каталоге C: \Program Files\Common Files\Borland Shared\Images\Buttons). Для

этого откройте новый проект и разместите в нем сетку строк TStringGrid.

Проведите с ее свойствами следующие манипуляции:

ColCount: =10; RowCount: =20; Align: =alClient. Теперь вернитесь к форме, найдите в Инспекторе объектов событие OnCreate() и опишите его, как предложено в листинге:

procedure TForm1.FormCreate(Sender: TObject);

var BmpPath: 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);

while I=0 do

Begin

StringGrid1.Cells[aCol, aRow]: =SR.Name;

BMP: = TBitmap.Create; //создаем объект

StringGrid1.Objects[aCol, aRow]: =BMP; //связываем объект с ячейкой






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.