Главная страница
    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.036 c
5-1088160756
Saint
2004-06-25 14:52
2005.06.29
Published-свойство типа <B>TClass</B> - не читается в Runtime.


14-1117442333
Alexone
2005-05-30 12:38
2005.06.29
Тестирование программы


14-1117863334
Гость4
2005-06-04 09:35
2005.06.29
Россия-Латвия


4-1115563018
kzpapgsnzaaret
2005-05-08 18:36
2005.06.29
текстовое поле ч чужом приложении


3-1116850425
Надежда
2005-05-23 16:13
2005.06.29
Не срабатывает установка DisplayFormat полю ClientDataSet





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