Главная страница
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.049 c
6-1262631738
Антон80
2010-01-04 22:02
2013.03.22
Проблема с темой письма в TIdSMTP


15-1331419316
Дмитрий С
2012-03-11 02:41
2013.03.22
Шифрование диска. Теоретический вопрос.


15-1342072358
AV
2012-07-12 09:52
2013.03.22
Эффективность подразделения в компании


2-1328186097
Ega23
2012-02-02 16:34
2013.03.22
Добавить в DBGrid колонки


15-1344857976
БарЛог
2012-08-13 15:39
2013.03.22
А как такая программа будет называться?