img
00:00
imgDRKB online - Как вставить растровое изображение в компонент ListBox?
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  VCL
  Системные функции и WinAPI
  Базы данных
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  GDI+ — графическое ядро нового поколения
  Работа со звуком
  Разные вопросы, связанные с графикой
  Манипуляции с текстом
  Работа с цветами и палитрами
  Работа c Canvas
  Работа с BitMap
  Работа с Jpeg
  Работа с GIF
  Работа с видео и анимацией
  Работа с метафайлами, векторыми изображениями
  Рисование в разных местах, захват изображения
  Графические фильтры и эффекты
  Изменение размеров, Thumbnails, деформации, выделение части изображения
  Вращение, зеркальные преобразования
  Яркость, контраст и гамма
  Размытие и шумы, резкозть
  Работа с цветами, каналы и глубина цвета
  Dithering
  Прозрачность
  Различные эффекты
  Черчение
  DerectX, OpenGL
  GDI - графика в Delphi
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=3583] Комментариев: 0 
Как вставить растровое изображение в компонент ListBox?

Для этого необходимо установить в инспекторе объектов поле Style в lbOwnerDrawFixed, при фиксированной высоте строки, или в lbOwnerDrawVariable, при переменной, и установить собственный обработчик события для OnDrawItem. В этом обработчике и надо рисовать растровое изображение.
Пример:
Рисуются изображения размером 32*16 (размер стандартного глифа для Delphi). Очень полезно при поиске нужного изображения для кнопок!
Установить в инспекторе объектов для ListBox поле ItemHeight = 19, а поле Color = clBtnFace.


delphi
{ Загрузить список файлов в ListBox1 при нажатии на кнопку Load (например)}
procedure TForm1.bLoadClick(Sender: TObject);
VAR S : String;
begin
  ListBox1.Clear; {чистим список}
  S := '*.bmp'#0; {задаем шаблон}
  ListBox1.Perform(LB_DIR, DDL_ReadWrite, Longint(@S[1])); {заполняем список}
end;
          ............

{Отобразить изображения и имена файлов в ListBox}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
           Rect: TRect; State: DrawState);
VAR
  Bitmap : TBitmap;
  Offset : Integer;
  BMPRect: TRect;
begin
  WITH (Control AS TListBox).Canvas DO BEGIN
    FillRect(Rect);
    Bitmap := TBitmap.Create;
    Bitmap.LoadFromFile(ListBox1.Items[Index]);
    Offset := 0;
    IF Bitmap <> NIL THEN BEGIN
      BMPRect := Bounds(Rect.Left+2, Rect.Top+2,
                        (Rect.Bottom-Rect.Top-2)*2, Rect.Bottom-Rect.Top-2);
      {StretchDraw(BMPRect, Bitmap); Можно просто нарисовать, но лучше сначала убрать фон}
      BrushCopy(BMPRect,Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),
                Bitmap.Canvas.Pixels[0, Bitmap.Height-1]);
      Offset := (Rect.Bottom-Rect.Top+1)*2;
    END;
    TextOut(Rect.Left+Offset, Rect.Top, ListBox1.Items[Index]);
    Bitmap.Free;
   END;
end;




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

Зайцев О.В.
Владимиров А.М.

@Drkb::03767
Взято из http://forum.sources.ru
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
21-07-2019 02:59
Adler
up smiley
18-07-2019 11:26
kuzyara
drkb online должен жить!
долгих лет автору сайта!
03-07-2019 16:00
Programmer
Привет
19-06-2019 23:35
Eri
Всем привет!!
16-06-2019 20:14
Programmer
спустя 10 дней
06-06-2019 20:41
Programmer
Летоооо
23-04-2019 18:44
Programmer
уже конец апреля. Через март, карл!
19-03-2019 08:21
antonn
Быстро время летит smiley
18-03-2019 09:43
Programmer
ыы уже март
14-01-2019 19:13
Programmer
Аахахаха общаемся через время
Статистика
 СегодняВсего
Посетителей942072225
Запросов2486319954153
Online
Пользователей0
Гостей35
imgimgimgimg
 
img
     00:00