Обновление LIstView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Обновление LIstView

Сообщение wwswowsogon » 13.10.2011 22:54:08

Здравствуйте. Имеется ListView, в который выводятся превьюшки изображений. Как сделать так, чтобы при увеличении размеров ListView количество столбцов увеличивалось, а при уменьшении размера - уменьшалось? Пробовал обновлять, перерисовывать (Update, Repaint, Invalidate.. ) - нэ помогает. Иными словами, надо, чтобы Items'ы "переезжали" на свободное место при увеличении размеров окна.

Добавлено спустя 13 часов 21 минуту 31 секунду:
Просто не хочется по-новой перечитывать все Items'ы, т.к. процедура эта довольно длительна..
wwswowsogon
постоялец
 
Сообщения: 157
Зарегистрирован: 23.12.2008 20:41:37

Re: Обновление LIstView

Сообщение leo_bsv » 14.10.2011 16:39:43

Вообще не понятен вопрос - если свойство ViewStyle выставлено не в vsList a в vsIcon или в vsSmallIcon то матрица значков изменяется автоматически при изменении размера. :?
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Обновление LIstView

Сообщение wwswowsogon » 14.10.2011 17:31:39

В том и дело, что не изменяется. Не исключено, что как раз в vsList и выставлено. Надо будет посмотреть...

Добавлено спустя 4 часа 5 минут 20 секунд:
Да нет, ViewStyle выставлено в vsIcon. Проблема остаётся. Может быть, я как-нибудь неправильно добавляю Items'ы? С ListView работаю первый раз в жизни.

Код: Выделить всё
procedure TForm1.TreeView1Click(Sender: TObject);
var k, i, n: Integer;
    Res: TSearchRec;
    ris,              //Исходный БитМап
    ris1,             //Уменьшенный БитМап
    ris2: TBitmap;    //Фон для уменьшенного БитМапа
    JPG: TJpegImage;
    FindPath: string;
    node: TTreeNode;
begin
  ListView1.Clear;
  ImageList2.Clear;
 
  {...}

    if FindFirst(UTF8ToAnsi(FindPath + '*.bmp*'), faAnyFile, Res) = 0 then
       begin
         ListView1.Items.Add;
         ListView1.Items.Item[i].Caption:=Res.Name;
         ris := TBitmap.Create;
         ris.LoadFromFile(FindPath + '' + Res.Name);
         
{...Масштабирование...}

         {Выводим в ListView}

         ImageList2.Add(ris2, nil);
         ListView1.Items.Item[i].ImageIndex:=i;
         
         inc(i);

         while FindNext(Res) = 0 do
          begin
            ListView1.Items.Add;
            ListView1.Items.Item[i].Caption:=Res.Name;

{...}
           

            ImageList2.Add(ris2, nil);
            ListView1.Items.Item[i].ImageIndex:=i;
           
           
    end;
end;



Добавлено спустя 4 минуты 59 секунд:
Исходник надо?:)
wwswowsogon
постоялец
 
Сообщения: 157
Зарегистрирован: 23.12.2008 20:41:37

Re: Обновление LIstView

Сообщение leo_bsv » 15.10.2011 19:21:08

может стоит сделать так:
Код: Выделить всё
  ListView1.BeginUpdate;
  { ваш код }
  ListView1.EndUpdate;
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Обновление LIstView

Сообщение wwswowsogon » 15.10.2011 19:46:07

Хм, попробуем.. Хотя вроде делал так, но не уверен.

Добавлено спустя 2 часа 14 минут 25 секунд:
Попробовал - нет, не работает. Попробую ещё через Delphi прогнать всё это дело.
wwswowsogon
постоялец
 
Сообщения: 157
Зарегистрирован: 23.12.2008 20:41:37

Re: Обновление LIstView

Сообщение wwswowsogon » 24.10.2011 21:22:05

Нет, в Delphi 7 всё то же самое.
wwswowsogon
постоялец
 
Сообщения: 157
Зарегистрирован: 23.12.2008 20:41:37


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 250

Рейтинг@Mail.ru
cron