![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать всех наследников TForm и TDataModule в проекте? [D7, WinXP]
Doma © (2006-11-28 19:04:00)Всем привет!
Создал компонет, сделал к нему дизайнер. В дизайнере хочу вывести список форм и датамодулей с их компонентами. Но изначально знаю, только владельца компонента, а вот как узнать о других формах и датамодулях проекта (название класса и название модуля) ?
Спасибо за помощь!
Юрий Зотов (2006-11-29 20:38:00) [1]> как из дезайнкра одного модуля, получить доступ к дизайнеру другого
Видимо, никак. Надо получить другой дизайнер не через первый, а так же, как был получен первый.
А в чем проблема? Разве там не цикл по модулям? Вот с каждым модулем и работаем - GetModule (I).
Doma (2006-11-29 18:29:00) [2]Теперь возникает вопрос, а как из дезайнкра одного модуля, получить доступ к дизайнеру другого т.е. опишу свою ситуацию:
Бросил свою компоненту на форму, открываю дезайнер компонеты, там у меня список форм и датамодулей проекта с их событиями... мне нужно чтобы по клику на событие создавался обработчик (Designer.CreateMethod), но чтобы это работало и в других модулях...
doma (2006-11-29 18:13:00) [3]Designer.FindRootAncestor выдал вроде что-то похожее на правду...
Doma (2006-11-29 18:10:00) [4]Дезайнер не видит компонент шире, чем модуль в котором открык...
GetComponent на объект друго модуля выдает nil.
Может я и ошибаюсь, но у меня не получилось... :(
DrPass (2006-11-29 17:58:00) [5]
> теперь остается вопрос, как из названия класса получить
> объект?
А тут нужно уже не от модуля отталкиваться, а от дизайнера. Т.е. получить IDesigner редактора формы, ну и там, например, вызвать GetComponent.
Потому как класс то классом, но объект ведь будет существовать только в том случае, если сущесвует дизайнер.
Doma (2006-11-29 17:14:00) [6]Да, действительно... теперь остается вопрос, как из названия класса получить объект?
icWasya (2006-11-29 16:37:00) [7]А если вспомнить, как называбтся формы в проекте ?
type
TMainForm=class(TForm)
..
end;
var
MainForm:TMainForm;
а в Object Inspector показывается
в заголовке
MainForm:TMainForm;
среди свойств
Name : MainForm
и при попытке заменить Name на что-нибудь другое меняется и название класса
Doma (2006-11-29 16:18:00) [8]>> IOTAProject.GetModule(I).FormName ??
Этот метод возвращает название формы, а мне нужен класс...
icWasya (2006-11-29 14:40:00) [9]IOTAProject.GetModule(I).FormName ??
Doma (2006-11-29 10:42:00) [10]Спасибо конечно, но никакого ответа я для себя не получил :(
ToolsAPI - использую давно... но сделать конкретно то, что хочу не получилось... знаю, как до всех модулей проекта добраться... но неужели надо в исходнике искать строку " = class(TForm)", если кто знает более простой способ, может метод какой-нибудь... в интерфейсах... буду очень признателен!
Юрий Зотов (2006-11-28 23:28:00) [11]$(Delphi)\Source\ToolsAPI\ToolsAPI.pas
Там список интерфейсов, предоставляемых IDE.
Берем (BorlandIDEServices as Нужный_Интерфейс) - и вперед.