Главная страница
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.01 c
7-65258
TOLTEC
2002-03-18 03:13
2002.06.20
Пишущий CD


1-65077
ask
2002-06-10 13:54
2002.06.20
что за ерунда ?


1-65157
Tutov Roman
2002-06-07 12:02
2002.06.20
Шифрование строки.


1-65060
Катерина
2002-06-10 10:14
2002.06.20
Глюки в TabOrder


4-65300
mafiya
2002-04-17 06:53
2002.06.20
Найти элемнты в другои приложении