Главная страница
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
2-1207425026
smartleds
2008-04-05 23:50
2008.05.04
Посоветуйте начинающему как реализовать алгоритм


15-1205784808
{RASkov}
2008-03-17 23:13
2008.05.04
NoteBook и WinXP


15-1205930041
Elec3C
2008-03-19 15:34
2008.05.04
with в C++


15-1206251473
Cyrax
2008-03-23 08:51
2008.05.04
"Сотрудник" (учебного заведения) по-английски....


3-1196336626
Kostafey
2007-11-29 14:43
2008.05.04
Где лучше хранить данные сумм MS SQL Server 2005