Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.065 c
2-1328170170
AV
2012-02-02 12:09
2013.03.22
Запрос к MSSSQL не возвращает данные. Почему?


3-1277464409
12
2010-06-25 15:13
2013.03.22
Запрос на получение всех конечных узлов дерева


2-1330431730
Drowsy
2012-02-28 16:22
2013.03.22
Не показывается модальная форма.


2-1338454519
guest
2012-05-31 12:55
2013.03.22
проблема с tchart


15-1339585593
KSergey
2012-06-13 15:06
2013.03.22
Про собеседы-то зачем ветку удалили?!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский