Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Показ изображений в DBGrid

Delphi , Компоненты и Классы , TDBGrid

Показ изображений в DBGrid

Муж-программист (М) с женой (Ж) сидят в цирке на выступлении иллюзиониста. Во время очередного номера из небольшого ящика выходят много девушек.
Ж: - Как они могли поместится в таком маленьком ящике?...
М: - Ерунда! Если бы он использовал WinRAR он бы еще больше их туда запихнул...

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

Код компонента:


{
// DBPICGRD.PAS (C)
//      ВСЕ ПРАВА ЗАЩИЩЕНЫ.
//
// ОПИСАНИЕ:
//      Компонент DBGrid, способный
//      отображать графику в ячейках.
}

unit DBPicGrd;

interface

uses

  DBGrids, DB, DBTables, Grids, WinTypes, Classes, Graphics;

type

  TDBPicGrid = class(TDBGrid)
  protected
    procedure DrawDataCell(const Rect: TRect;
      Field: TField; State: TGridDrawState); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property DefaultDrawing default False;
  end;

procedure Register;

implementation

constructor TDBPicGrid.Create(AOwner: TComponent);
begin

  inherited Create(AOwner);
  DefaultDrawing := False;
end;

procedure TDBPicGrid.DrawDataCell(const Rect: TRect; Field: TField;
  State: TGridDrawState);
var

  bmp: TBitmap;
begin

  with Canvas do
  begin
    FillRect(Rect);
    if Field is TGraphicField then
    try
      bmp := TBitmap.Create;
      bmp.Assign(Field);
      Draw(Rect.Left, Rect.Top, bmp);
    finally
      bmp.Free;
    end
    else
      TextOut(Rect.Left, Rect.Top, Field.Text);
  end;
end;

procedure Register;
begin

  RegisterComponents('Custom', [TDBPicGrid]);
end;

end.

Прекрасный компонент Delphi!

Компонент TDBPicGrid - это подкласс TDBGrid, который позволяет отображать изображения в ячейках вместо текста. Компонент переопределяет метод DrawDataCell, ответственный за рисование отдельных ячеек в таблице.

Вот разбивка кода:

  1. Секция интерфейса определяет класс TDBPicGrid, который наследуется от TDBGrid. Он имеет два метода: Create, вызываемый при создании экземпляра компонента, и DrawDataCell, ответственный за рисование отдельных ячеек.
  2. В секции реализации метод Create переопределяется, чтобы установить свойство DefaultDrawing в False, что означает, что компонент не будет использовать свой default механизм рисования.
  3. Метод DrawDataCell - это место, где происходит магия. Он принимает три параметра: Rect, представляющий прямоугольник ячейки, которую нужно нарисовать, Field, объект TField, представляющий данные в ячейке, и State, enum-значение TGridDrawState, указывающее состояние ячейки.
  4. Внутри DrawDataCell метод проверяет, является ли Field экземпляром TGraphicField. Если это так, он создает объект TBitmap, присваивает его полю с помощью метода Assign и затем рисует битовую картинку на канвасе в указанной позиции (Rect.Left и Rect.Top). Затем он освобождает битмап.
  5. Если Field не является экземпляром TGraphicField, метод переходит к рисованию текстового значения поля с помощью метода TextOut.

Чтобы использовать этот компонент, вам нужно создать экземпляр TDBPicGrid и добавить его в список компонентов вашей формы. Затем вам нужно установить свойство DataSource таблицы в источник данных, содержащий изображения (например, таблицу базы данных с полем blob).

Вот несколько предложений:

  • Рассмотрите добавление более надежной обработки ошибок при загрузке или декодировании изображения.
  • Вам может потребоваться добавить опцию для указания размера миниатюрных изображений, отображаемых в таблице.
  • Если вы планируете использовать этот компонент широко, вам может потребоваться оптимизация его производительности путем кэширования изображений или использования более эффективного механизма рисования.

В целом, это nice пример, как можно расширить built-in-компоненты Delphi для поддержки отображения изображений!

В статье описывается способ отображения изображений в DBGrid с помощью создания custom-компонента TDBPicGrid, который позволяет выводить графику в ячейках таблицы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:09:05/0.0056400299072266/1