Здравствуйте. Имеется ListView, в который выводятся превьюшки изображений. Как сделать так, чтобы при увеличении размеров ListView количество столбцов увеличивалось, а при уменьшении размера - уменьшалось? Пробовал обновлять, перерисовывать (Update, Repaint, Invalidate.. ) - нэ помогает. Иными словами, надо, чтобы Items'ы "переезжали" на свободное место при увеличении размеров окна.
Добавлено спустя 13 часов 21 минуту 31 секунду:
Просто не хочется по-новой перечитывать все Items'ы, т.к. процедура эта довольно длительна..
Обновление LIstView
Модератор: Модераторы
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
В том и дело, что не изменяется. Не исключено, что как раз в vsList и выставлено. Надо будет посмотреть...
Добавлено спустя 4 часа 5 минут 20 секунд:
Да нет, ViewStyle выставлено в vsIcon. Проблема остаётся. Может быть, я как-нибудь неправильно добавляю Items'ы? С ListView работаю первый раз в жизни.
Добавлено спустя 4 минуты 59 секунд:
Исходник надо?:)
Добавлено спустя 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 секунд:
Исходник надо?:)
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
может стоит сделать так:
Код: Выделить всё
ListView1.BeginUpdate;
{ ваш код }
ListView1.EndUpdate;
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Хм, попробуем.. Хотя вроде делал так, но не уверен.
Добавлено спустя 2 часа 14 минут 25 секунд:
Попробовал - нет, не работает. Попробую ещё через Delphi прогнать всё это дело.
Добавлено спустя 2 часа 14 минут 25 секунд:
Попробовал - нет, не работает. Попробую ещё через Delphi прогнать всё это дело.
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Нет, в Delphi 7 всё то же самое.
