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

Вывод картинок в TComboBox

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

Вывод картинок в TComboBox

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

// This code works also with a TListBox 


var
   Bitmap1, Bitmap2, Bitmap3, Bitmap4: TBitmap;

 procedure TForm1.FormCreate(Sender: TObject);
 begin
   ComboBox1.Style := csOwnerDrawVariable;

   //Set height of one item 
  ComboBox1.ItemHeight := 20;

   //load all bitmaps 

  Bitmap1 := TBitmap.Create;
   Bitmap1.LoadFromFile('chem16.bmp');

   Bitmap2 := TBitmap.Create;
   Bitmap2.LoadFromFile('chip16.bmp');

   Bitmap3 := TBitmap.Create;
   Bitmap3.LoadFromFile('factry16.bmp');

   Bitmap4 := TBitmap.Create;
   Bitmap4.LoadFromFile('skylin16.bmp');

   //assign bitmaps with item objects - caption of the items: Bitmap 1 - Bitmap 4 

  ComboBox1.Items.AddObject('Bitmap 1', Bitmap1);
   ComboBox1.Items.AddObject('Bitmap 2', Bitmap2);
   ComboBox1.Items.AddObject('Bitmap 3', Bitmap3);
   ComboBox1.Items.AddObject('Bitmap 4', Bitmap4);
 end;

 procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
   Rect: TRect; State: TOwnerDrawState);
 var
   Bitmap: TBitmap;
   Offset: Integer;
 begin
   offset := 0;
   with ComboBox1.Canvas do
   begin
     FillRect(Rect);
     Bitmap := TBitmap(ComboBox1.Items.Objects[Index]);
     if Bitmap <> nil then
     begin
       //copy bitmap to combobox coordinate 
      BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,
         Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
         Bitmap.Height), clred);
       Offset := Bitmap.Width + 8;
     end;
     //Set a caption to each item 
    TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index]);
   end;
 end;

 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
   //free all bitmap objects 
  bitmap1.Free;
   bitmap2.Free;
   bitmap3.Free;
   bitmap4.Free;
 end;

Это код на Delphi, который отображает изображения (битмапы) в TComboBox. Код использует стиль csOwnerDrawVariable для разрешения кастомного рисования элементов комбобокса.

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

  1. В событии FormCreate комбобокс устанавливается на стиль владельца переменной и высота каждого элемента устанавливается в 20 пикселей.
  2. Создаются четыре объекта TBitmap и загружаются различными файлами битмапов с помощью метода LoadFromFile.
  3. Битмапы затем присваиваются элементам комбобокса с помощью метода AddObject, где параметр объекта - это объект TBitmap.

Рисование изображений и надписей происходит в обработчике события ComboBox1DrawItem:

  1. В этом процедуре переменная цикла Index используется для перебора элементов комбобокса.
  2. Для каждого элемента канвас комбобокса заполняется прямоугольником с помощью метода FillRect.
  3. Битмап, связанный с текущим элементом, получается и копируется на канвас в указанных координатах с помощью метода BrushCopy.
  4. Надпись для каждого элемента устанавливается с помощью метода TextOut.

Наконец, в обработчике события FormClose:

  1. Все объекты TBitmap освобождаются с помощью метода Free, чтобы освободить системные ресурсы.

Обратите внимание, что этот код предполагает, что файлы битмапов располагаются в том же каталоге, что и исполняемый файл, и имеют те же имена, которые указаны в коде (например, 'chem16.bmp', 'chip16.bmp' и т.д.).

В целом, это хороший пример использования стиля владельца для отображения изображений в TComboBox.

В статье описана реализация вывода картинок в TComboBox 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 19:12:44/0.0037519931793213/0