|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Добавления в ListBox изображений.
Всем дароф!
Интересно, кто нить знает как добавить в ListBox изображения(к примеру с размерами 1024x768) так, что бы в ListBox'e они имели размер 200x165. И после этого всего, при нажатии на одну из строк listbox'a, можно было получить изображения 1024x768, без потери качества. Кому я должен - всем прощаю!!!! |
#2
|
|||
|
|||
1. Создавай отдельно TList, записываешь туда данные (картинки).
2. Отрисовка ListBox ручками через Canvas.StretchDraw картинку до нужного размера и выводом текста. 3. При щелчке выводишь картинку, беря ее из List-а. |
#3
|
||||
|
||||
Я вообщето имел ввиду через AddObject. Если Просто добавить TBitmap в листбокс то они не видны в списке, а должны быть видны, возле каждой строки свой Bitmap, сжатый под определённый размер...
Кому я должен - всем прощаю!!!! |
#4
|
||||
|
||||
Цитата:
Не должны, а тебе хочеться.... Унаследуй и создай свой List --------------------------------------------- Программирование - не профессия, а стиль жизни |
#5
|
|||
|
|||
Цитата:
В ListBox-е такого нет. В любом случае стандартный ListBox рисовать сам ничего не умеет, нужна своя отрисовка. |
#6
|
||||
|
||||
Цитата:
Код:
listbox1.Items.AddObject(String;TObject) Помоему так нужно добавлять TBitmap и при событие procedure DrawItem рисовать возле каждой строки Битмап в уменьшенном виде. Код примерно такой: Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var BMP : TBitmap; Offset, OffsetT, RHeight, THeight, W, H : Integer; DRect : TRect; begin with (Control as TListBox).Canvas do begin DRect := Bounds(Rect.Left + 95, Rect.Top + 2, (Rect.Right - (Rect.Left + 95)) - 2, (Rect.Bottom - Rect.Top) - 4); FillRect(DRect); RHeight := Rect.Bottom - Rect.Top; BMP := TBitmap((Control as TListBox).Items.Objects[Index]); if BMP <> nil then begin if (BMP.Width > 90) or (BMP.Height > 90) then begin if BMP.Width >= BMP.Height then begin W := 90; H := Trunc(90 * (BMP.Height / BMP.Width)); end else begin H := 90; W := Trunc(90 * (BMP.Width / BMP.Height)); end; Offset := (RHeight - H) div 2; DRect := Bounds(Rect.Left + 2, Rect.Top + Offset, W, H); StretchDraw(DRect, BMP); end else begin Offset := (RHeight - BMP.Height) div 2; Draw(Rect.Left + 1, Rect.Top + Offset, BMP); end; Offset := 98; end; THeight := TextHeight((Control as TListBox).Items[Index]); OffsetT := (RHeight - THeight) div 2 + 1; TextOut(Rect.Left + Offset, Rect.Top + OffsetT, (Control as TListBox).Items[Index]) end; end; Кому я должен - всем прощаю!!!! |