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

Вниз

А каким образом Delphi читает dfm?   Найти похожие ветки 

 
Ega23 ©   (2008-03-18 22:26) [0]

Интересует момент, каким образом, зная строку с именем класса (например, "TButton") можно создать экземпляр класса?
Если идти дальше, то вопрос в следующем: у меня есть в базе имя класса фрейма, надо создать его экземпляр.


 
DVM ©   (2008-03-18 22:28) [1]


> каким образом, зная строку с именем класса (например, "TButton")
> можно создать экземпляр класса?

function GetClass(const ClassName: string): TPersistentClass; ???


 
DVM ©   (2008-03-18 22:29) [2]


> у меня есть в базе имя класса фрейма, надо создать его экземпляр.

класс обязательно должен быть зарегистрирован


 
DVM ©   (2008-03-18 22:31) [3]


> [2]

procedure RegisterClass(AClass: TPersistentClass);


 
Ega23 ©   (2008-03-18 23:38) [4]


> function GetClass(const ClassName: string): TPersistentClass;
>  


ага. понял.


 
Игорь Шевченко ©   (2008-03-18 23:39) [5]


> А каким образом Delphi читает dfm?


TReader.ReadComponent - там все-все написано


 
jack128_   (2008-03-18 23:49) [6]


> function GetClass(const ClassName: string): TPersistentClass;
>  ???

Открывает новый проэкт, кидаем на форму кнопу, в обработчике онклик пишем:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetClass("TButton").ClassName)
end;

Запускает, нажимаем, получаем:

Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 00403908 in module "Project1.exe". Read of address FFFFFFD4".

Много думаем над [5] ;-)


 
DVM ©   (2008-03-19 00:08) [7]


> Ega23 ©  

Кстати, вот немного по теме http://www.delphimaster.ru/articles/bdform/index.html


 
DVM ©   (2008-03-19 00:20) [8]


> jack128_

Да, действительно, ерунда получается. Пока не зарегистрируем, не можем GetClass, но для регистрации нужен сам класс, а не имя.


 
jack128_   (2008-03-19 00:29) [9]

ну так ;-))  

просто все классы паблишед полей лежат по смещению -56 от указателя на класс.


 
Simpson   (2008-03-19 19:49) [10]

А динамически создавать компоненты на форме и привязывать к ним обработчики не то?


 
Jack128_   (2008-03-19 23:38) [11]


> : у меня есть в базе имя класса фрейма, надо создать его
> экземпляр.

хе. слона (в смысле основной вопрос) я и не приметил. Нет, механизм создания класов из дфм тут те не поможет.  У борланда в этом плане есть приемущество перед тобой - они - разработчики компилера ;-)  

Если те хоцца полностью динамическую систему, то тут плагины на основе пакетов те в помощь. в каджом пакете с очередным фреймом в секции инициализации просто регестрируй его(фрейм) RegisterClass, ну а для создания как обычно TComponentClass(GetClass(MyFrameName)).Create(MainForm);



Страницы: 1 вся ветка

Текущий архив: 2008.05.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1206361369
xayam
2008-03-24 15:22
2008.05.04
помогите пожалуйста с математикой


2-1207326164
Инна
2008-04-04 20:22
2008.05.04
Печать справок


6-1184079238
nord12345
2007-07-10 18:53
2008.05.04
Возможно ли получить имя ПК в другой подсети?


11-1188746752
andreil
2007-09-02 19:25
2008.05.04
Глюк Дельфи или КОЛ?


2-1207579151
Снежинка
2008-04-07 18:39
2008.05.04
Сортировка