Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Построить дерево классов


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]

А зачем ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо