![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли в Listbox вставить картинку?
Crazy monkey © (2006-09-14 16:15:00)Есть записи и в зависимости от условий хотелось бы добавить к каждой свою картинку. Можно ли сделать такое в Listbox? Очень нужен код.
Заранее спасибо!
Crazy monkey (2006-09-15 12:16:00) [1]Спасибо уважаемые!
Особенно ГореПрограмист! Респект.
Конечный код я сделал таким:
ListBox1.Canvas.FillRect(Rect);
Form1.ImageList1.Draw(ListBox1.Canvas, Rect.Left + 1, Rect.Top, 0, true);
ListBox1.Canvas.TextOut(Rect.Left + 19, Rect.Top + 1, ListBox1.Items.Strings[index]);
Еще раз спасибо!
ГореПрограмист (2006-09-15 05:44:00) [2]
> Crazy monkey (14.09.06 21:24) [4]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBox1.Canvas.FillRect(Rect);
ImageList1.Draw(ListBox1.Canvas, Rect.Left + 1, Rect.Top, 0, true);
ListBox1.Canvas.TextOut(Rect.Left + 19, Rect.Top + 1, Text);
end;
Германн (2006-09-15 03:50:00) [3]
> Джо © (15.09.06 03:23) [6]
>
> > позволяет нарисовать картинку только в первой строке,
> а
> > как нарисовать одну и туже картинку во всех строках, которые
> > я добавил?
>
> OnDrawItem вызывается для каждой строки в списке. Номер
> текущей строки передается в параметре Index, текущая область
> рисования — в параметре Rect. Почитал бы, все-таки, Справку.
>
>
Уж сколько лет твердили миру... А воз и ныне там :-)
Ну как просто, типа "на пальцах" объяснить новичкам принцип "отрисовки" окон в Винде?
Джо (2006-09-15 03:24:00) [4]П.С. У "горе программиста" код несколько некорректен.
Джо (2006-09-15 03:23:00) [5]> позволяет нарисовать картинку только в первой строке, а
> как нарисовать одну и туже картинку во всех строках, которые
> я добавил?
OnDrawItem вызывается для каждойстроки в списке. Номер текущей строки передается в параметре Index, текущая область рисования — в параметре Rect. Почитал бы, все-таки, Справку.
ЮЮ (2006-09-15 03:19:00) [6]Он рисует не одну, а много, но в одном месте. Для задания координат надо использовать Rect, как делаешь это в случае вывода текста
Crazy monkey (2006-09-14 21:24:00) [7]А не подскажете как быть? Как заполнить все записи одной картинкой? Вот этот код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBox1.Canvas.FillRect(Rect);
ImageList1.Draw(ListBox1.Canvas, 1, 0, 0, true);
ListBox1.Canvas.TextOut(Rect.Left + 19, Rect.Top + 1, ListBox1.Items.Strings[0]);
end;
позволяет нарисовать картинку только в первой строке, а как нарисовать одну и туже картинку во всех строках, которые я добавил?
Crazy monkey (2006-09-14 20:42:00) [8]Условий достаточно много, но мне надо было знать главным образом как рисовать в listbox.
Спасибо за ответ!
ГореПрограмист (2006-09-14 16:54:00) [9]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBox1.Canvas.FillRect(Rect);
ImageList1.Draw(ListBox1.Canvas, 1, 0, 0, true);
ListBox1.Canvas.TextOut(Rect.Left + 19, Rect.Top + 1, ListBox1.Items.Strings[0]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Style:= lbOwnerDrawFixed;
end;
> Crazy monkey (14.09.06 16:15)
> и в зависимости от условий
Каких условий ?
MBo (2006-09-14 16:25:00) [10]в справке по OnDrawItem есть пример