![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Построить дерево классов
DmitryFox © (2006-08-22 17:05:00)Люди, подскажите плиз, как можно программно построить дерево классов (дерево наследования), и не зарегестрированных в том числе, от произвольно взятого класса. Должны быть выведены и предки и все потомки.
Спасибо
DrPass (2006-08-22 23:51:00) [1]
> Browse Symbol как то же работает ........
В Delphi IDE есть прекомпилятор. Он-то знает, но ему сам бог велел :)
Юрий Зотов (2006-08-22 23:34:00) [2]> Суслик © (22.08.06 19:49) [18]
Дык... а что мешает натравить ту же процедуру на пакет?
Суслик (2006-08-22 19:49:00) [3]очень сильно я сомневаюсь, что такое возможно в общем случае.
например в случае загрузки runtime пакетов через loadpackage.
Leonid Troyanovsky (2006-08-22 19:37:00) [4]
> DmitryFox (22.08.06 17:54) [9]
> Все родители знают своих потомков :)
Заблуждение. FAF.
--
Regards, LVT.
Юрий Зотов (2006-08-22 19:20:00) [5]Cписок классов в программе есть, встречал когда-то в Сети как до него достучаться. А дальше все просто - проходим по этому списку и преобразуем его в дерево.
Плохиш (2006-08-22 18:03:00) [6]
> Суслик © (22.08.06 17:58) [13]
Хм, можно привести пример программы, в которой это необходимо, кроме задания для завала нерадивого студента-двоечника на 5й пересдаче начального курса введения в программирование? :-)
Суслик (2006-08-22 17:59:00) [7]или просто список адресов VMT где-то хранить.
Суслик (2006-08-22 17:58:00) [8]при чем тут логика?
они (построители компилятора) вполне могли бы строить ассоцитивный список [название класса]-[VMT] для всех классов, которые попали в компиляцию. они же сами как-то компонуют VMT для классов, значит знают адреса всех классов.
это просто не сделано, а могли бы сделать.
Плохиш (2006-08-22 17:56:00) [9]
> DmitryFox (22.08.06 17:54) [9]
>
> > А логически помыслить? С какой стати предок должен что-
> то
> > знать о своих потомках?
>
> Все родители знают своих потомков
Ну, классы рождают программисты, вот у них и спроси.
Суслик (2006-08-22 17:55:00) [10]кстати в delphi2006 такая фича как список усех классов в проекте отсутствует. :(
Германн (2006-08-22 17:54:00) [11]
> А логически помыслить? С какой стати предок должен что-то
> знать о своих потомках?
>
Тем более если "двое в Пензе, а один на Камчатке" :-)
DmitryFox (2006-08-22 17:54:00) [12]
> А логически помыслить? С какой стати предок должен что-то
> знать о своих потомках?
Все родители знают своих потомков :)
Browse Symbol как то же работает ........
Лана, никак - так никак.
Плохиш (2006-08-22 17:51:00) [13]
> DmitryFox (22.08.06 17:47) [6]
А логически помыслить? С какой стати предок должен что-то знать о своих потомках?
StriderMan (2006-08-22 17:49:00) [14]
> DmitryFox (22.08.06 17:47) [6]
сказали же, никак
DmitryFox (2006-08-22 17:47:00) [15]
> Написано за 30 секунд ;-)
Спасибо :)
А вот в обратную сторону как ? например:
TMyForm = class(TForm)
end;
Как получить TMyForm от TForm, или вообще от TObject ?
TMyForm - не зарегестрирован.......
Плохиш (2006-08-22 17:45:00) [16]Но лучше
repeatзаменить наwhile tmp <> nil do
Плохиш (2006-08-22 17:43:00) [17]Написано за 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;
DiamondShark (2006-08-22 17:30:00) [18]Для предков всё просто: TObject.ClassParent
А вот с потомками -- облом, нет таких штатных средств.
Суслик (2006-08-22 17:18:00) [19]не думаю, что в общем случае это возможно.
Сергей М. (2006-08-22 17:07:00) [20]А зачем ?