Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2010, 00:12   #1
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию список с картинками

как сделать список ListBox с картинками, например как используються в icq клиентах
пауэрлифтинг вне форума Ответить с цитированием
Старый 03.03.2010, 00:26   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Как-то так:
Код:
procedure TForm4.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
bmp:=TBitmap.Create;
  bmp.LoadFromFile('0.bmp');
  ListBox1.AddItem('asd', bmp);
  ListBox1.Style:=lbOwnerDrawFixed;
end;

procedure TForm4.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 listBox1.Canvas.CopyRect(rect, TBitmap(ListBox1.Items.Objects[index]).Canvas, TBitmap(ListBox1.Items.Objects[index]).Canvas.ClipRect);
end;
TwiX вне форума Ответить с цитированием
Старый 03.03.2010, 00:27   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

У класса TListbox есть свойство Style, определяющее порядок рисования объекта. По умолчанию оно установлено в lbStandard и за внешний вид объекта отвечает Windows. Если установить это значение в lbOwnerDrawFixed или lbOwnerDrawVariable, то можно несколько разнообразить внешний вид объекта. Разбираться лучше всего на конкретном примере, так что попробуем создать Lstbox, который отображал имена графических файлов какой-нибудь директории вместе с картинками.

Чтобы заполнить Listbox надо написать следующее (чтобы каждый файл не прописывать можно просто послать сообщение):
Код:
procedure tform1.button1click(sender: tobject);
var
s : string;
begin
s:='c:\windows\*.bmp';
listbox1.perform(lb_dir, ddl_readwrite, longint(@s[1]));
end;
Здесь мы указали listbox'у, какие файлы требуется отображать.
Устанавливаем свойство style нужно установить в lbownerdrawfixed и создать обработчик события ondrawitem:
Код:
procedure tform1.listbox1drawitem(control: twincontrol;
index: integer; rect: trect; state: townerdrawstate);
var bitmap: tbitmap;
offset: integer;
bmprect : trect;
begin
with (control as tlistbox).canvas do
begin
{очищаем прямоугольник}
fillrect(rect);
{считываем картинку}
bitmap:=tbitmap.create;
bitmap.loadfromfile('c:\windows\'+listbox1.items[index]);
if bitmap <> nil then begin
{вычисляем квадрат для показа картинки}
bmprect:=bounds(rect.left + 2, rect.top + 2,
rect.bottom-rect.top-2, rect.bottom-rect.top-2);
{рисуем картинку}
stretchdraw(bmprect, bitmap);
offset := rect.bottom-rect.top + 6;
end;
{выводим текст}
textout(rect.left+offset,rect.top,listbox1.items[index]);
{не забыть освободить!}
bitmap.free;
end;
end;
Чтобы картинки получились побольше, значение свойства itemheight можно увеличить.
mihali4 вне форума Ответить с цитированием
Старый 03.03.2010, 00:37   #4
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

спасибо . я думал что через ImageList надо как то
пауэрлифтинг вне форума Ответить с цитированием
Старый 03.03.2010, 14:26   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  Listbox1.canvas.fillrect(rect);

  imagelist1.Draw(Listbox1.Canvas,rect.left,rect.top,index);

  Listbox1.canvas.textout(rect.left+imagelist1.width+2,rect.top,
  Listbox1.items[index]);

end;
Aleksandr вне форума Ответить с цитированием
Старый 22.03.2010, 12:17   #6
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

а как потом перерисовать на другую картинка в нужной строке?
пауэрлифтинг вне форума Ответить с цитированием
Старый 22.03.2010, 12:39   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Код:
imagelist1.Draw(Listbox1.Canvas,rect.left,rect.top,index);
index - это номер картинки в imagelist1
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 22.03.2010, 12:51   #8
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

Код:
procedure TForm2.Button2Click(Sender: TObject);
begin
imagelist1.Draw(Listbox1.Canvas,rect.left,rect.top,2);
end;
А где взять rect ?
пауэрлифтинг вне форума Ответить с цитированием
Старый 22.03.2010, 13:20   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А где взять rect ?
а ты не в то событие вставил код.
Ты пост Михалыча то почитай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.03.2010, 19:43   #10
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

а мне надо в ходе выполнения программы мне картинки одни на другие
пауэрлифтинг вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый редактор с картинками TRIZER Компоненты Delphi 1 17.12.2009 13:52
Щели в IE между картинками sdm98 HTML и CSS 2 05.10.2009 10:49
Прайс с всплывающими картинками Серж55 Microsoft Office Excel 3 20.03.2009 08:08
проблема с картинками sava28 HTML и CSS 3 05.08.2008 16:23
бд с картинками TaTT DoGG БД в Delphi 3 28.04.2008 08:21