Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2008, 00:53
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию Добавления в ListBox изображений.

Всем дароф!
Интересно, кто нить знает как добавить в ListBox изображения(к примеру с размерами 1024x768) так, что бы в ListBox'e они имели размер 200x165.
И после этого всего, при нажатии на одну из строк listbox'a, можно было получить изображения 1024x768, без потери качества.
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
  #2  
Старый 28.02.2008, 18:58
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

1. Создавай отдельно TList, записываешь туда данные (картинки).
2. Отрисовка ListBox ручками через Canvas.StretchDraw картинку до нужного размера и выводом текста.
3. При щелчке выводишь картинку, беря ее из List-а.
Ответить с цитированием
  #3  
Старый 28.02.2008, 21:03
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

Я вообщето имел ввиду через AddObject. Если Просто добавить TBitmap в листбокс то они не видны в списке, а должны быть видны, возле каждой строки свой Bitmap, сжатый под определённый размер...
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
  #4  
Старый 29.02.2008, 00:13
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от <<D>>
Я вообщето имел ввиду через AddObject. Если Просто добавить TBitmap в листбокс то они не видны в списке, а должны быть видны, возле каждой строки свой Bitmap, сжатый под определённый размер...

Не должны, а тебе хочеться....
Унаследуй и создай свой List
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
  #5  
Старый 29.02.2008, 10:57
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Цитата:
Сообщение от <<D>>
Я вообщето имел ввиду через AddObject. Если Просто добавить TBitmap в листбокс то они не видны в списке, а должны быть видны, возле каждой строки свой Bitmap, сжатый под определённый размер...
С каких пор (с какой версии) у списка строк появился метод AddObject?
В ListBox-е такого нет.
В любом случае стандартный ListBox рисовать сам ничего не умеет, нужна своя отрисовка.
Ответить с цитированием
  #6  
Старый 29.02.2008, 13:50
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

Цитата:
Сообщение от Phedor
С каких пор (с какой версии) у списка строк появился метод AddObject?
В ListBox-е такого нет.
Хм...интересно а что это тогда
Код:
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;
Только вот чёто не работает...
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter