Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TListView и отображаемые item'сы 
:(
    Опции темы
Illusion Dolphin
  Дата 13.8.2004, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Как узнать, виден ли хоть кусочек item'а в клиентской области TListView? Проблема в БЫСТРОМ и ПРАВИЛЬНОМ определении. Пока одно исключает другое biggrin.gif.

Делал где-то так
Код

Function RectInRect(R1, R2 : TRect) : Boolean;
begin
Result:=PtInRect(R2,R1.TopLeft) or PtInRect(R2,R1.BottomRight) or PtInRect(R1,R2.TopLeft) or PtInRect(R1,R2.BottomRight);
end;

....

var
 r,: TRect;
...

r := Item.DisplayRect(drBounds);
if RectInRect(MyListView.ClientRect,r) then Action;


правильно работает если проверять ещё и drIcon и drLabel, но ЭТО ДОЛГО!


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 13.8.2004, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Быстрее будет примерно так:
Код
function RectInRect (const R1, R2 : TRect) : boolean;
begin
 Result := (R2.Left >= R1.Left) and (R2.Left <= R1.Right) and (R2.Top >= R1.Top) and (R2.Top <= R1.Bottom);
end;

r := Item.DisplayRect(drBounds);
if RectInRect(MyListView.ClientRect,r) then Action;



Это сообщение отредактировал(а) p0s0l - 13.8.2004, 23:35


--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 13.8.2004, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



p0s0l:
Цитата
Как узнать, виден ли хоть кусочек item'а в клиентской области TListView?

В твоей функции тру выдаётся, когда весь итемс там...
Может быть, есть какое-нибудь свойство где-нибудь? 8) Я просто выводу под несколько тысяч изображений (пока всего 4000 размерами 100х100 smile.gif ) и не пойму., как оптимизировать тот факт, что если проскроллить всё в самый конец списка, то при перерисовке одного итемса (который виден) ListView автоматически вызывает прорисовку всем оставшимся 3999 итемсам :/...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 14.8.2004, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата
В твоей функции тру выдаётся, когда весь итемс там...

Я вообще чо-то не то написал smile.gif
Но смысл был таков, лучше сам проверяй, чем вызывай PtInRect...
Или как вариант: сделай IntersectRect(R, R1, R2) - и если R получается ненулевой, то значит виден какой-то кусок...

Добавлено @ 01:17
А R1 и R2 передавай через const или var, чтобы не создавались их временные копии...


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.