Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. Delphi
  3. Картинки в ячейках StringGrid Delphi
logo

Картинки в ячейках StringGrid Delphi

02.12.2014

При разработке программ в Delphi, очень часто возникает необходимость в целях дизайна или просто в рамках задачи, выводить графическую информацию. В компоненте StringGrid, не смотря на название, так же есть возможность размещать рисунки. Если в рамках поставленной задачи, речь идет не о простом раскрашивании ячеек StringGrid каким-либо цветом, а именно вывод изображения, для этого используется свойство Canvas. Свойство Canvas имеет специальный метод, позволяющий выводить графические объекты в заданное координатами место на компоненте.

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

Данный метод размещает изображение в указанном координатами прямоугольнике (параметр Rect), увеличивая или уменьшая его по вертикали и горизонтали. В параметре Graphic указывается выводимое изображение. Если размеры контейнера для вывода не пропорциональны исходному рисунку, то изображение может быть искажено.

Процедура вывода изображения выполняется в событии "рисования" ячейки OnDrawCell. В этой процедуре нам нужно:

- загрузить рисунок из внешнего файла в графическую переменную;

- выбрать ячейку, в какую вывести изображение;

- назначить подходящий размер ячейки StringGrid, пропорционально изображению;

- выполнить отрисовку.

В итоге, должен получиться подобный программный код:

procedure TMyForm.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  img: TPicture;
begin
  // создание графического объекта
  img := TPicture.Create;

  // загрузка в графическую переменную изображения из внешнего файла
  img.LoadFromFile('001.bmp');

  // условие, определяющее нужную ячейку
  if ((ACol = 1) and (ARow = 1)) then begin

        // назначение размера ячейки по ширине и высоте
        MyStringGrid.ColWidths[ACol] := img.Width;
        MyStringGrid.RowHeights[ARow] := img.Height;

        // вывод рисунка в текущей ячейке
        MyStringGrid.Canvas.StretchDraw(Rect, img.Graphic);
   end;
end;

Иногда изображение слишком велико, для вывода в ячейку, тогда его следует пропорционально уменьшить, назначив ширине и высоте ячеек меньший размер:

StringGrid1.ColWidths[1]:=Picture.Width div 2; // назначить ширину ячейки в 2 раза меньше рисунка
StringGrid1.RowHeights[1]:=Picture.Height div 2; // назначить высоту ячейки в 2 раза меньше рисунка

Если, например, есть фиксированная ширина ячейки, то нужно подогнать высоту в соответствии с отношениями сторон рисунка:

MyStringGrid.ColWidths[1] := 200;
MyStringGrid.RowHeights[1] := MyStringGrid.ColWidths[1] * (img.Width div img.Height);

В примере выше использован рисунок формата BMP. Если нужно использовать рисунок JPG, то следует подключить соответствующую библиотеку:

uses
   JPEG;

Другие материалы:

Функция FileExists в Delphi, описание и примеры


Функция RemoveDir в Delphi, описание и примеры


Назначение размера столбцов и строк Delphi StringGrid


Написать комментарий

Комментарии

В комментариях запрещено публиковать рекламные материалы. Все сообщения оправляются на модерацию и будут опубликованы, если не нарушают правил сайта после проверки.


коммент.

avatar

Тёмный Заяц

- 08 октября 2023, 00:03 ↓
Спасибо вам большое!!! Очень помогли!
avatar

Антон

- 03 июля 2020, 21:36 ↓
Добрый день, Тигр.
Уточните, картинка не вся выводится в ячейку или не помещается в нее? Картинка в данном примере выводится в исходном размере (физический размер). Поэтому важно подогнать размер ячейки под размер изображения.
avatar

Тигр 1488

- 03 июля 2020, 18:42 ↓
Не работает(
Картинка вставляется но делится ровно попалам в ячейке

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных