Компонент Delphi StringGrid









                                           ГЛАВНАЯ           СВОЙСТВА           СОБЫТИЯ           ПРИЁМЫ  ПРОГРАММИРОВАНИЯ



StringGrid Delphi

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




   Компонент StringGrid может размещать в своих ячейках не только текст, но и графику. Поместить рисунок или другое изображение в ячейку таблицы StringGrid позволяет свойство Canvas компонента StringGrid.

   Свойство Canvas имеет метод для вывода графики в заданный своими координатами прямоугольник:

Canvas.StretchDrav(const Rect: TRect; Graphic: TGraphic);

   Этот метод "подгоняет" размеры рисунка под размеры прямоугольника, растягивает или сжимает его и по горизонтали и по вертикали, причём не обязательно пропорционально. Если размеры прямоугольника и размеры изображения не подобны, то рисунок будет искажён.

   Значит, для вывода изображения в ячейку, предварительно нужно:
  1. сделать размеры ячейки-адресата ячейки равными или пропорциональными размерам изображения;
  2. определить прямоугольник вывода, то есть задать его координаты.
   В компоненте StringGrid определено событие, обработчик которого специально приспособлен как раз для этих целей. Это обработчик события OnDrawCell:

procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  AColARow: Integer; Rect: TRect;
  State: TGridDrawState);
begin

end;

   Определяя адрес ячейки (AColARow) таблицы, мы тем самым задаём определённый в обработчике 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

    Сайт из коллекции Компоненты Delphi    

    Карта сайта