Главная страница
    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.47 MB
Время: 0.005 c
2-1207560659
AndrewG
2008-04-07 13:30
2008.05.04
InterBase 6.5


15-1206195589
NailMan
2008-03-22 17:19
2008.05.04
Хотел тут вот похвалиться обновой


2-1207724584
ЛИЯ
2008-04-09 11:03
2008.05.04
как правильно задать фильтр


15-1201816478
Eraser
2008-02-01 00:54
2008.05.04
Remote Office Manager - бета тестирование 2


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский