C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TListView, как восстановить вид
avb
Отправлено: 06.10.2005, 14:09


Ученик-кочегар

Группа: Участник
Сообщений: 10



Как, зная TopItem, восстановить вид TListView после обновления списка!
ListView1->TopItem = ....  — недоступен!
Doga
Отправлено: 06.10.2005, 15:08


Мастер участка

Группа: Участник
Сообщений: 575



С пмощью

ListView1->Items->Item[n] == ListView1->TopItem

,

ListView1->Items->Item[n]->Position

и

ListView1->Scroll(...)
avb
Отправлено: 06.10.2005, 15:33


Ученик-кочегар

Группа: Участник
Сообщений: 10



to Doga
Первый способ не понял, что там дальше?
Второй способ не проходит, т.к. у меня vsReport, а для него Position '... has no effect'.
Doga
Отправлено: 06.10.2005, 17:35


Мастер участка

Группа: Участник
Сообщений: 575



Никогда бы не подумал бы что символы "," и "и" могут быть инерпретированы как понятие "или".

Мой пост описывает только один способ.

Короче.
Перед обновлением ListView1 запомните сам TopItem (например в OldTopItem).

После обновления проверте существование сохраненного OldTopItem в списке.

Если он есть, то можно пользоваться методом Scroll(int DX, int DY),где
DX = OldTopItem->Position.x — ListView1->TopItem->Position.x ( можно смело ставить 0, т.к. в режиме vsReport этот фокус не проходит)
DY = OldTopItem->Position.y — ListView1->TopItem->Position.y

А ежели нет его, то восстанавливать нечего...

Таперь панятна? smile.gif

P.S.
Position has no effect только на изменение этого свойства, а читать его можно...

Отредактировано Doga — 06/10/2005, 17:38
avb
Отправлено: 07.10.2005, 09:54


Ученик-кочегар

Группа: Участник
Сообщений: 10



To Doqa
И все-таки Position не работает — куда бы я не ставил ползунок, а перед очисткой и обновлением LV->TopItem->Position = (x:2, y: 2) !!!
А получилось так :
LV->Scroll(0, (old_top_index — 1) *(LV->Heigth / LV->VisibleRowCount));
Doga
Отправлено: 07.10.2005, 15:02


Мастер участка

Группа: Участник
Сообщений: 575



QUOTE

LV->TopItem->Position = (x:2, y: 2)


Эти координаты TopItem будет иметь всегда, на то он и TopItem.
Position изменяется у OldTopItem, который теперь совсем не TopItem.

Я специально проверил у себя — всё работает.

Вернуться в Вопросы программирования в C++Builder