Главная страница
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.016 c
14-65207
Mystic
2002-05-16 22:23
2002.06.20
State transition diagramm, UML


4-65289
Ильясов Вадим
2002-04-21 19:37
2002.06.20
Работа с ОЗУ


1-65043
kito
2002-06-10 08:46
2002.06.20
Как правильно скрыть приложение ?


4-65275
Shiza
2002-04-17 20:20
2002.06.20
Работа с оборудованием


3-64974
fgh
2002-05-28 12:58
2002.06.20
Как выбрать записи из бд1, которых нет в бд2 ?