Главная страница
    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.066 c
15-1339316192
MastaK
2012-06-10 12:16
2013.03.22
Игра Sokoban


2-1334410535
tolbase
2012-04-14 17:35
2013.03.22
Delphi 7! Как отловить событие minimize формы?


2-1339736007
Cobalt
2012-06-15 08:53
2013.03.22
Подскажите, есть стандартный класс уже?


2-1332500814
alex810810
2012-03-23 15:06
2013.03.22
Передача параметра со значение NULL


15-1347721207
Artem
2012-09-15 19:00
2013.03.22
Посоветуйте простой инсталлятор creator?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский