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

Вниз

CustomSort в Tstringlist   Найти похожие ветки 

 
Smok_er   (2002-06-06 00:03) [0]

Уважаемые мастера!
Искал по всему архиву форума ответ, но ничего не нашел.
Есть небольшая проблема с сортировкой сабжа.
Создаем класс, к примеру
type TClass1 = class
public
Var1: Integer;
Var2: String;
end;



объявляем его
Class1: TClass1
Затем заносим в стринглист и пытаемся отсортировать методом customsort.
Привожу пример:

function SizeCustomSort(List: TStringList; Index1, Index2: Integer): Integer;
var
R1, R2: Integer;
begin
R1:= TClass1(List.Objects[Index1]).Var1;
R2:= TClass1(List.Objects[Index2]).Var1;
if R1 > R2 then
result := -1
else
if R1 < R2 then
result := 1
else
result := 0;
end;

StringList1.CustomSort(@SizeCustomSort);


Теперь вопрос - как сделать так, чтобы в функцию передавать имя класса и его член. Т.е. чтобы не нужно было писать для каждого стринглиста и класса свою функцию сортировки, а использовать универсальную.

Заранее большое спасибо!


 
Song ©   (2002-06-06 08:45) [1]

Никак, это заранее определённая ф-ия. Надо писать новую для каждого класса. Кстати stdcall Вы не забыли указать ?


 
Smok_er   (2002-06-06 10:35) [2]

Пробовал, выдавало ошибку. Посмотрел в хелп - stdcall указывать не надо, в отличие к примеру от customsort в листвью
Но неужели никак невозможно это сделать?
Мастера, отзовитесь!


 
Smok_er   (2002-06-06 15:50) [3]

Мастера, неужели никто не знает???


 
Игорь Шевченко ©   (2002-06-06 15:54) [4]

Определить у элемента класса метод сравнения, наследовать все объекты в StringList от него, написать один раз функцию и все будет хорошо.


 
Smok_er   (2002-06-07 12:56) [5]

А можно пример?
Ну очень нужно, а описывать для каждого класса (а их у меня около 25) свою функцию сравнения не очень хочется.
Заранее спасибо!


 
Игорь Шевченко ©   (2002-06-07 13:42) [6]

Пример чего? класса с методом сравнения ?
type
TMyclass = class
public
function lessThan (const Item : TMyClass) : Boolean; virtual;
end;

Тогда функция для сортировки будет выглядеть как:
procedure mySortCompare(Key1, Key2 : Pointer) : Integer;
begin
if TMyClass(key1).lessThan(TMyClass(key2)) then
Result := -1
else if TMyClass(key2).lessThan(TMyClass(key1)) then
Result := 1
else
Result := 0;
end;

При наследовании надо переписать только функцию lessThan у наследников если сравнивать надо по-другому

end;



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
3-64893
Yuri K.
2002-05-24 18:46
2002.06.20
Подключение к SQL серверу через ADO


3-64891
Kiko
2002-05-24 14:24
2002.06.20
ClientDataSet для локальной базы ?!


3-64898
Андр
2002-05-29 13:44
2002.06.20
проблемы с Lookup Field


14-65238
Explorer
2002-05-17 11:28
2002.06.20
Кто работал с компонентами Flat Controls с AfalinaSoft.com?


1-65067
garry
2002-06-06 17:25
2002.06.20
Excel, Колонтитулы и т.п