Главная страница
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.011 c
2-1207564254
DelphiN!
2008-04-07 14:30
2008.05.04
Ошибка AV в потоке


15-1205303786
SKIPtr
2008-03-12 09:36
2008.05.04
Помогите выбрать вентилятор


15-1206012149
usr
2008-03-20 14:22
2008.05.04
MS SQL Server 2000


15-1205857406
Guezt
2008-03-18 19:23
2008.05.04
дефицит информации по SDK. АСКОН-Компас


3-1196666491
zorik
2007-12-03 10:21
2008.05.04
одновременное изменение первичного и внешнего ключей