StringGrid Delphi
Как поместить изображение в ячейку таблицы StringGrid
Компонент StringGrid может размещать в своих ячейках не только текст, но и графику. Поместить рисунок или другое изображение в ячейку таблицы StringGrid позволяет свойство Canvas компонента StringGrid.
Свойство Canvas имеет метод для вывода графики в заданный своими координатами прямоугольник:
Canvas.StretchDrav(const Rect: TRect; Graphic: TGraphic);
Этот метод "подгоняет" размеры рисунка под размеры прямоугольника, растягивает или сжимает его и по горизонтали и по вертикали, причём не обязательно пропорционально. Если размеры прямоугольника и размеры изображения не подобны, то рисунок будет искажён.
Значит, для вывода изображения в ячейку, предварительно нужно:
- сделать размеры ячейки-адресата ячейки равными или пропорциональными размерам изображения;
- определить прямоугольник вывода, то есть задать его координаты.
procedure TForm1.StringGrid1DrawCell(Sender: TObject;
ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
begin
end;
Определяя адрес ячейки (ACol, ARow) таблицы, мы тем самым задаём определённый в обработчике OnDrawCell прямоугольник Rect вывода изображения. А узнать размеры изображения, чтобы подстроить под него размеры ячейки, можно загрузив изображение вначале в специально созданный контейнер - объект типа TPicture:var Picture: TPicture;//Глобальная переменная
begin
Picture:=TPicture.Create;
Picture.LoadFromFile('Имя_файла');
StringGrid1.ColWidths[1]:=Picture.Width;
StringGrid1.RowHeights[1]:=Picture.Height;
end;
Если для загрузки предполагается изображение формата JPEG, то в список uses нужно подключить модуль JPEG.
Если изображение слишком велико, нужно установить размеры ячейки с некоторым коэффициентом подобия n:
StringGrid1.ColWidths[1]:=Picture.Width div n;
StringGrid1.RowHeights[1]:=Picture.Height div n;
Таким образом, вывод изображения в ячейку с координатами (1, 1) записывается в обработчике события OnDrawCell вот так:
with StringGrid1 do
if ((ACol=1)and(ARow=1)) then
Canvas.StretchDraw(Rect, Picture.Graphic);
Читайте также:
- Как выровнять текст в ячейке StringGrid Delphi