![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Расширенные возможности по оформлению сетки
Ключевым событием сетки изображений считается событие, возникающее в момент перерисовки ячейки сетки: 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()
Воплотим приобретенные знания в исходный код. Разместим на форме компонент 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; //связываем объект с ячейкой
|