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

Вниз

Этика классов и сортировка TList...   Найти похожие ветки 

 
tunguss ©   (2005-06-06 16:29) [0]

Значит так. Если кто знает программку Seqoia - примерно поймет - некоторые данные распологаются на некотором двумерном поле упорядочено по размеру вверх и вниз (алгоритм TreeMap разработанный в Массачусетском университете). Далее поймет тот, кто знаком с MFC. Концепция написания программы такова, что используется модель (aka документ) и представление (aka вьюха). В модели данные представлены некоторыми Item"ами, а во вььюхе эти итемы обернуты некоторыми Plate"ами - впрочем последнее не важно.
Модель наследник TObjectList.

Сейчас я делаю поддержку группировки.

Для этого я создаю наследника Item"a и называю его ItemGroup. От родителя он наследует методы типа GetValue - но вычисляет он уже не значение одного Item"а, а всей группы. И у него свой TList, который содержит Item"ы.

Итак. Хочется чтобы присобаченная к модели функция сортировки (см. TList.Sort) могла работать и с данными групп. Но ввиду ограниченний передаваемой в параметре функции определения соответствия - не удается ни получить от модели информацию, группируем мы что-то или нет, ни на основе этого сделать нужное приведение типов.

Есть ли выход обойти ограничения?

Вот так. Ниже буду объяснять подробнее если что.


 
VladimirB ©   (2005-06-06 16:35) [1]

Вообщем вот.
TParent=class
function MMM:String; virtual;
end;
TChild=class(TParent)
function MMM:String; override;
end;
TChild2=class(TParent)
function MMM:String; override;
end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
{ TChild2 }
function TChild2.MMM: String;
begin
   result:="TChild2.MMM";
end;
{ TChild }
function TChild.MMM: String;
begin
   result:="TChild.MMM";
end;
{ TParent }
function TParent.MMM: String;
begin
   result:="TParent.MMM";
end;

procedure XXX(Item:Pointer);
begin
   ShowMessage(TParent(Item).MMM);
   if    TParent(Item) is TChild then   ShowMessage("!!!");
   if    TParent(Item) is TChild2 then   ShowMessage("222");

end;

procedure TForm1.Button1Click(Sender: TObject);
var x:TChild2;
begin
   x:=TChild2.Create;
   XXX(X);
   x.Free;
end;

Соответственно в XXX можно вызвать виртуальный метод, узнать к какому классу относится item, о парится дальше.
Это к вопросу о том как узнать в Sotr что ей передали.


 
tunguss ©   (2005-06-06 16:47) [2]

Премного благодарен. Кажется именно то, что мне нужно. Не сообразил, что можно так....



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
14-1117862744
gek
2005-06-04 09:25
2005.06.29
Для любителей халявы


11-1099458028
miek
2004-11-03 08:00
2005.06.29
проблема с комбобоксами


9-1111521532
Ньюб
2005-03-22 22:58
2005.06.29
Игра типа "однорукий бандит"


4-1115476321
GrayFace
2005-05-07 18:32
2005.06.29
Глюки в статье "Hooks"


1-1118068149
Alex17
2005-06-06 18:29
2005.06.29
Дозвон до провайдера