Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизПостроить дерево классов Найти похожие ветки
← →
DmitryFox (2006-08-22 17:05) [0]Люди, подскажите плиз, как можно программно построить дерево классов (дерево наследования), и не зарегестрированных в том числе, от произвольно взятого класса. Должны быть выведены и предки и все потомки.
Спасибо
← →
Сергей М. © (2006-08-22 17:07) [1]А зачем ?
← →
Суслик © (2006-08-22 17:18) [2]не думаю, что в общем случае это возможно.
← →
DiamondShark © (2006-08-22 17:30) [3]Для предков всё просто: TObject.ClassParent
А вот с потомками -- облом, нет таких штатных средств.
← →
Плохиш © (2006-08-22 17:43) [4]Написано за 30 секунд ;-)
procedure TForm1.FormCreate(Sender: TObject);
var
tmp: TClass;
begin
tmp := TDBGrid;
try
repeat
ListBox1.AddItem(tmp.ClassName, nil);
tmp := tmp.ClassParent;
until false;
except
end;
end;
← →
Плохиш © (2006-08-22 17:45) [5]Но лучше
repeat
заменить наwhile tmp <> nil do
← →
DmitryFox (2006-08-22 17:47) [6]
> Написано за 30 секунд ;-)
Спасибо :)
А вот в обратную сторону как ? например:
TMyForm = class(TForm)
end;
Как получить TMyForm от TForm, или вообще от TObject ?
TMyForm - не зарегестрирован.......
← →
StriderMan © (2006-08-22 17:49) [7]
> DmitryFox (22.08.06 17:47) [6]
сказали же, никак
← →
Плохиш © (2006-08-22 17:51) [8]
> DmitryFox (22.08.06 17:47) [6]
А логически помыслить? С какой стати предок должен что-то знать о своих потомках?
← →
DmitryFox (2006-08-22 17:54) [9]
> А логически помыслить? С какой стати предок должен что-то
> знать о своих потомках?
Все родители знают своих потомков :)
Browse Symbol как то же работает ........
Лана, никак - так никак.
← →
Германн © (2006-08-22 17:54) [10]
> А логически помыслить? С какой стати предок должен что-то
> знать о своих потомках?
>
Тем более если "двое в Пензе, а один на Камчатке" :-)
← →
Суслик © (2006-08-22 17:55) [11]кстати в delphi2006 такая фича как список усех классов в проекте отсутствует. :(
← →
Плохиш © (2006-08-22 17:56) [12]
> DmitryFox (22.08.06 17:54) [9]
>
> > А логически помыслить? С какой стати предок должен что-
> то
> > знать о своих потомках?
>
> Все родители знают своих потомков
Ну, классы рождают программисты, вот у них и спроси.
← →
Суслик © (2006-08-22 17:58) [13]при чем тут логика?
они (построители компилятора) вполне могли бы строить ассоцитивный список [название класса]-[VMT] для всех классов, которые попали в компиляцию. они же сами как-то компонуют VMT для классов, значит знают адреса всех классов.
это просто не сделано, а могли бы сделать.
← →
Суслик © (2006-08-22 17:59) [14]или просто список адресов VMT где-то хранить.
← →
Плохиш © (2006-08-22 18:03) [15]
> Суслик © (22.08.06 17:58) [13]
Хм, можно привести пример программы, в которой это необходимо, кроме задания для завала нерадивого студента-двоечника на 5й пересдаче начального курса введения в программирование? :-)
← →
Юрий Зотов © (2006-08-22 19:20) [16]Cписок классов в программе есть, встречал когда-то в Сети как до него достучаться. А дальше все просто - проходим по этому списку и преобразуем его в дерево.
← →
Leonid Troyanovsky © (2006-08-22 19:37) [17]
> DmitryFox (22.08.06 17:54) [9]
> Все родители знают своих потомков :)
Заблуждение. FAF.
--
Regards, LVT.
← →
Суслик © (2006-08-22 19:49) [18]очень сильно я сомневаюсь, что такое возможно в общем случае.
например в случае загрузки runtime пакетов через loadpackage.
← →
Юрий Зотов © (2006-08-22 23:34) [19]> Суслик © (22.08.06 19:49) [18]
Дык... а что мешает натравить ту же процедуру на пакет?
← →
DrPass © (2006-08-22 23:51) [20]
> Browse Symbol как то же работает ........
В Delphi IDE есть прекомпилятор. Он-то знает, но ему сам бог велел :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.016 c