Главная страница
    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.065 c
1-1117622499
Ega23
2005-06-01 14:41
2005.06.29
Динамические массивы - правильно ли я понял help?


14-1117373371
Магнум
2005-05-29 17:29
2005.06.29
Библиотека иконок ICL


14-1117691481
boriskb
2005-06-02 09:51
2005.06.29
Америка форева!


3-1116673940
SlyFox
2005-05-21 15:12
2005.06.29
FireBird. Ошибка при выполнении Locate


3-1116167981
anton_m
2005-05-15 18:39
2005.06.29
Вопрос по StoredProc





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский