ListView: пара вопросов...
1) В моей программе есть форма, на ней ListView с Align=alClient. Я в нем отображаю эскизы картинок как в Проводнике. Если я добавлю в пустой ЛВ картинки, то они заполнят всю область ЛВ как и надо. Но если после этого изменить размер формы, то они останутся на своих местах. Это не очень-то красиво. А в проводнике их положение подгоняется под размер формы. Как сделать так же?
(см. вложения)
2) Как мне узнать какие именно элементы видны на ЛВ (индексы, с какого по какой)
Спасибо.
Цитата: Pelican
Привет!!!
1) В моей программе есть форма, на ней ListView с Align=alClient. Я в нем отображаю эскизы картинок как в Проводнике. Если я добавлю в пустой ЛВ картинки, то они заполнят всю область ЛВ как и надо. Но если после этого изменить размер формы, то они останутся на своих местах. Это не очень-то красиво.
1) В моей программе есть форма, на ней ListView с Align=alClient. Я в нем отображаю эскизы картинок как в Проводнике. Если я добавлю в пустой ЛВ картинки, то они заполнят всю область ЛВ как и надо. Но если после этого изменить размер формы, то они останутся на своих местах. Это не очень-то красиво.
тоже как-то мучался, но решения так и не нашел... но сегодня еще помучался и выяснил следующее:
Код:
ListView1.IconOptions.AutoArrange := true;
А по второму вопросу... у незнаю =( может это тебе в помощь?
Код:
ListView1.Items.top
ListView1.Items.left
ListView1.Items.left
2. Первый видимый элемент, это видимо TopItem, а как узнать сколько их ... затрудняюсь ответить (есть свойство VisibleRowCount, возможно подойдет).
Удачи! :)
А вот со вторым сложновато.
TopItem доступен только при ViewStyle=vsReport||vsList, а у меня vsIcon - по другому нельзя. VisibleRowCount тоже не для vsIcon.
Я затеял эту бодягу, чтобы грузить картинки только для видимых итемов, иначе, если файлов штук 200 (или больше), пользователь уснет, а когда проснется выкинет мою прогу нафиг. :)
Ну, ведь должно же быть какое-то решение...
Если нет - то ты можешь обрабатывать OnCustomDrawItem ... а картинку хранить в свойстве Data. Если Data = NULL (о чем надо позаботиться заранее ;)) тогда загружаем картинку и показываем, если не NULL просто показываем картинку. Получается, когда надо показать картинку, мы смотрим есть ли она, если есть показываем, если нет - догружаем.
Не знаю насколько хорош вариант, но это первое что в голову приходит :)
Если же список виртуальный ... тогда тоже можно что-нибудь придумать, но уже посложнее будет :)
Мое такое мнение, если задача столь специфична, то можно написать свой компонент, если все картинки будут одного размера, то проблем вообще быть не должно.