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

Рисование картинок в TListBox

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

Рисование картинок в TListBox

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ Create a TImage on your Formular and assign a bitmap }
 { Create a TListbox on your Formular }

 type
   TForm1 = class(TForm)
     ListBox1: TListBox;
     Image1: TImage;
     procedure FormCreate(Sender: TObject);
     procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
       Rect: TRect; State: TOwnerDrawState);
     procedure ListBox1MeasureItem(Control: TWinControl; Index: Integer;
       var Height: Integer);
   private
     {...}
   public
     {...}
   end;

 procedure TForm1.FormCreate(Sender: TObject);
 begin
   with ListBox1.Items do
   begin
     Clear;
     ListBox1.Style := lbOwnerDrawVariable;
     AddObject('Bitmap1', Image1.Picture.Bitmap);
     AddObject('Bitmap2', Image2.Picture.Bitmap);
     AddObject('Bitmap3', Image3.Picture.Bitmap);
   end;
 end;

 procedure CenterText(Cnv: TCanvas; Rect: TRect; S: string);
 var
    X, Y: Integer;
 begin
   X := (Rect.Right + Rect.Left - Cnv.TextWidth(S)) div 2;
   Y := (Rect.Bottom + Rect.Top - Cnv.TextHeight(S)) div 2;
   Cnv.TextOut(X, Y, S);
 end;

 procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
   Rect: TRect; State: TOwnerDrawState);
 var
    Bitmap: TBitmap;
 begin
   with ListBox1 do
   begin
     Canvas.FillRect(Rect);
     if Items.Objects[Index] <> nil then
     begin
       Bitmap := Items.Objects[Index] as TBitmap;
       Canvas.BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2,
         Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
         Bitmap.Height), Bitmap.Canvas.Pixels[0, Bitmap.Height - 1]);
     end;
     Rect.Left   := Rect.Left + Bitmap.Width + 4;
     Rect.Bottom := Rect.Top + Bitmap.Height + 4;
     CenterText(Canvas, Rect, Items.Strings[Index]);
   end;
 end;

 procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
   var Height: Integer);
 begin
   if Index = 0 then Height := Image1.Height + 4;
 end;

Перевод контента на русский язык:

Код предназначен для рисования изображений в контроле TListBox. Код создает форму (TForm), содержащую TListBox и изображение (TImage) на ней. Когда форма создается, три битмапы добавляются в список как объекты.

Процедура CenterText используется для центрирования текста каждого элемента в списке внутри его прямоугольника.

В процедуре ListBox1DrawItem, когда список нужно нарисовать элемент, он сначала заливает прямоугольник цветом. Если элемент имеет ассоциированный объект (т.е., битмап), он рисует этот битмап в верхнем левом углу прямоугольника. Затем он обновляет прямоугольник, чтобы он был ниже и справа от битмапа. Наконец, он центрирует текст элемента внутри обновленного прямоугольника.

В процедуре ListBox1MeasureItem, когда список нужно измерить элемент, он возвращает высоту первого изображения в списке плюс 4 пикселя.

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

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

Также я изменил расчет Rect.Right в процедуре ListBox1MeasureItem на фиксированную ширину (100 пикселей) для простоты. Вы можете заменить это на любую логику, которая подходит для ваших нужд.

В статье описывается пример создания списка с рисунками в компоненте TListBox Delphi, где каждый элемент списка содержит изображение и текст.


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

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




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


:: Главная :: Списки ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:00:24/0.00583815574646/1