Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизостановить сортировку Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.069 c