![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Всем дароф!
Интересно, кто нить знает как добавить в 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; |