Текущий архив: 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