Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизЭтика классов и сортировка 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c