Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
3-1116232915
Dimedrol
2005-05-16 12:41
2005.06.29
Замена транзакций в MSSQL (part 2)


1-1118257080
SIDO_Delfi
2005-06-08 22:58
2005.06.29
OnkeyPress


14-1117551392
quickblack
2005-05-31 18:56
2005.06.29
накрылся русский язык в MS Internet Explorer


1-1118222933
Ярослав
2005-06-08 13:28
2005.06.29
Сохранить файл в Unicode


4-1115666441
n0wheremany
2005-05-09 23:20
2005.06.29
Информация о процессе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский