Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

остановить сортировку   Найти похожие ветки 

 
vasa777   (2012-05-07 23:49) [0]

есть листвиев lv1 с большим числом итемов. у него есть процедура lv1.compare, для сортировки списка. сортировка запускается как стандартная lv1.AlphaSort; все работает нормально. вопрос: как остановить сортировку, если это требуется?


 
Ega23 ©   (2012-05-08 03:21) [1]


>  как остановить сортировку, если это требуется?


Сначала вопрос: ты уверен в правильности выбора компонента? Миллион итемов - это как-то странно, зачем пользователю столько? Ну или не компонента, тогда данные как-то сгруппировать надо, структуру там древовидную. Проводник же не показывает тебе абсолютно все файлы во всех папках-подпапках и на всех дисках, когда ты на "Мой компьютер" становишься?

Теперь к сути.
Давай упростим задачу.
Есть вот такой вот код:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer
begin
 for i := 1 to 1000000 do
   sleep(100);
end;


Как ты видишь возможность прерывания такой процедуры?


 
Германн ©   (2012-05-08 03:30) [2]

Даже больше. Процедура от Ega23 ©   (08.05.12 03:21) [1]
дельфийская. А вот процедура ListView_SortItems, которая вызывается при сортировке листвью - процедура виндузовая. Ибо TListView всего лишь оболочка для стандартного объекта Windows.


 
Ega23 ©   (2012-05-08 03:37) [3]


>  А вот процедура ListView_SortItems, которая вызывается
> при сортировке листвью - процедура виндузовая.


Это не столь важно, вместо AlphaSort можно CustomSort вызвать, куда свою процедуру сортировки передать, с преферансом и студентками.


 
Германн ©   (2012-05-08 04:18) [4]


> Ega23 ©   (08.05.12 03:37) [3]
>
>
> >  А вот процедура ListView_SortItems, которая вызывается
> > при сортировке листвью - процедура виндузовая.
>
>
> Это не столь важно, вместо AlphaSort можно CustomSort вызвать

AlphaSort вызывает CustomSort а уж последняя вызывает недоступную нам ListView_SortItems. Я могу ошибаться в степени "недоступности".


 
Юрий Зотов ©   (2012-05-08 04:28) [5]

> сабж

Само по себе, прерывание сортировки делается элементарно - надо всего лишь возбудить исключение в обработчике OnCompare и погасить это исключение в процедуре вызова AlphaSort:

procedure TForm1.ListView1Compare(...); // Обработчик OnCompare
begin
 raise Exception.Create("Сортировка прервана")
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   ListView1.AlphaSort
 except
   on E: Exception do
     ShowMessage(E.Message)
 end
end;

Но сначала стоит обратить внимание на сказанное в [1].

> Германн ©   (08.05.12 03:30) [2]
Тоже элементарно - надо возбудить исключение в callback"е.


 
vasa777   (2012-05-08 07:12) [6]

спасибо, тоже нашел про райз.
но больше понравилось Abort в онкомпаре сделать.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
3-1277112954
картман
2010-06-21 13:35
2013.03.22
До какого момента откатится транзакция


15-1329646997
Чайник
2012-02-19 14:23
2013.03.22
Direct 3D и Delphi 2010


6-1265872619
Den
2010-02-11 10:16
2013.03.22
No route to host


15-1312895393
Kerk
2011-08-09 17:09
2013.03.22
Шахматный турнир


15-1342307267
Германн
2012-07-15 03:07
2013.03.22
Внешний USB-hard drive в качестве системного.