Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Построить дерево классов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.056 c
1-1155902119
Alkid
2006-08-18 15:55
2006.10.01
Вызов метода класса предка


15-1158138822
term1t
2006-09-13 13:13
2006.10.01
Распространение приложений


15-1157638395
Alex Bakulin
2006-09-07 18:13
2006.10.01
Директивы условной компиляции


15-1158016470
Vert45
2006-09-12 03:14
2006.10.01
Вопросы по PHP


4-1148671260
valentin
2006-05-26 23:21
2006.10.01
Чтения с USB порта