Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2012, 16:38   #1
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию Проблема с прокруткой в ListView

Столкнулся тут с такой багой...
Сделал тестовый проект, в onCreate формы заполняю ListView значениями:
Код:
  lv1.Items.BeginUpdate;
  lv1.ViewStyle := vsReport;
  for I := 1 to 500 do
    with lv1.Items.Add do
    begin
      caption := IntToStr(i);
      subitems.Add('Колонка 2');
    end;
  lv1.Items.EndUpdate;
После чего делаю прокрутку списка в конец:
Код:
 SendMessage(lv1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
Так вот, это сообщение прокручивает список ровно на 100 позиций. WTF?!
Кинул кнопку, в onClick тот же SendMessage-прокрутка идет до конца.
Что за мистика?
NaumOff вне форума Ответить с цитированием
Старый 24.09.2012, 16:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может refresh вызывать перед посылом сообщения для Lv1?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2012, 16:55   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сделайте это в OnShow формы. В OnCreate с Handle формы могут быть проблемы, отсюда и такая прокрутка
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.09.2012, 17:19   #4
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию

Не помогло. Грубо говоря работает правильно, если инициатор события-пользователь. Если же в коде вызвать тот же onBtnClick() или onShow, то прокручивает только на 100 строк.
NaumOff вне форума Ответить с цитированием
Старый 24.09.2012, 20:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Немного глуповато, но что если обмануть:
Код:
for i:=0 to 10 do  lv1.Scroll(0,10000)
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2012, 20:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так не хочет
Код:
  ListView1.ItemIndex:=ListView1.Items.Count-1;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.09.2012, 13:36   #7
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию

Stilet, ваш код работает, скроллит по 100 строк в каждом цикле.
Аватар, так не работает.
Прокручивать можно таким способом:
Код:
    ListView1.Items[ListView1.Items.Count - 1].MakeVisible(False);
    ListView1.Scroll(0, 100);
Вторая строка нужна чтобы побороть другой косячок - если есть горизонтальный скроллбар, после прокрутки он перекрывает нижнюю строку. Параметр MakeVisible(PartialOK: Boolean) предназначен для того, чтобы удостовериться полностью видна ли строка, а все равно не работает.
Все же хотелось бы понять, почему ListView при SendMessage так ведет себя.
NaumOff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с ListView Saumavalion Win Api 4 06.05.2012 16:02
Ajax проблема с прокруткой колёсика обьекта Select slips JavaScript, Ajax 4 31.12.2009 04:04
Небольшая проблема с ListView mixer94 Компоненты Delphi 5 12.08.2009 09:08
проблема с listbox и listview. blackstersl Общие вопросы Delphi 3 06.05.2009 23:31
Проблема с ListView mar4elo Общие вопросы Delphi 5 04.12.2008 14:48