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

Вниз

Создание компонента по имеющемуся имени класса   Найти похожие ветки 

 
3asys   (2004-03-09 11:48) [0]

Есть переменная типа String, содержащая произвольное имя класса (например, TButton или ТMainMenu и т.п.).
Как создать экземпляр компонента этого класса, получив название класса из указанной переменной?

С уважением, 3asys


 
REA ©   (2004-03-09 11:52) [1]

Для Persistent классов: FindClass("ClassName").Create;


 
Гаврила   (2004-03-09 12:01) [2]

Да, только не забыть, что они должны быть зарегистрировны вызовом RegisterClass


 
3asys   (2004-03-09 12:50) [3]

А как мне зарегистрировать класс, имя которой хранится в переменной a : String ?

Код:
RegisterClass(TPersistentClass(a));
выдает "Access violation...".

И еще, в догонку -) мне нужно показать компонент присвоив его свойству Parent имя компонента на который хочу его положить. Как это сделать?

С уважением, 3asys


 
icWasya ©   (2004-03-09 12:52) [4]

>[3]
если
не

RegisterClass(TPersistentClass(a));

а

RegisterClass(TMyClass1);
RegisterClass(TMyClass2);
RegisterClass(TMyClass3);
и все классы, которые нужно зарегистрировать


 
3asys   (2004-03-09 12:58) [5]

>icWasya
дело в том, что я не знаю, какие менно классы понадобиться зарегистрировать. Это должно происходить динамически и определятся тем, название какого класса находится в переменной "a" типа String

С уважением, 3asys


 
Тимохов ©   (2004-03-09 13:02) [6]


> 3asys   (09.03.04 12:58) [5]

Тогда такую задачу не решить: либо вы знаете набор классов, которые могуть быть переданы в а, и пользуетесь RegisterClass, либо вы не знаете набор классов, но тогда пользуетесь переменной типа TClass, а не типа string.


 
[lamer]Barmaglot ©   (2004-03-09 13:06) [7]

RTFM?

http://www.delphimaster.ru/articles/bdform/index.html


 
Гаврила   (2004-03-09 13:52) [8]

Регистрировать надо все классы, которые теоретически могут оказаться в строковой переменной. Так как все стандартные классы уже зарегистрированы, остается зарегистрировать только свои классы. Это делается в секции Initialization


 
3asys   (2004-03-09 14:04) [9]

> Гаврила

Если ограничиться только стандартными классами, то например, если a:="TButton", то при вызове
FindClass("ClassName").Create;
выдается сообщение "Class TButton not found"
Что здесь можно сделать?


 
Гаврила   (2004-03-09 15:05) [10]

>>3asys   (09.03.04 14:04) [9]
Да, извиняюсь, приврал - не все стандартные классы зарегистрированы.
В принципе, их можно и самому зарегистрировать.
А какая задача стоит ?


 
3asys   (2004-03-09 15:53) [11]

>>Гаврила

Задача - имея строковое название класса компонента (из списка компонентов стандартной поставки Delphi7), получить возможность создавать переменные соответствующего типа. Это задача в обобщенной форме.
Конкретно:
Представьте форму (TForm) на которой лежит TEdit и кнопка (TButton). В поле TEdit я ввожу название класса и по нажатию кнопки хочу, чтобы соответствующий компонент визуализировался на форме.

С уважением, 3asys


 
Тимохов ©   (2004-03-09 16:11) [12]


> из списка компонентов стандартной поставки Delphi7

Коль так, то значит список классов все-таки известен. Т.е. можно все классы зарегистрировать.



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
8-1069034807
Asteroid
2003-11-17 05:06
2004.03.28
И опять задержки в waveOutWrite


1-1078853788
DelphiN!
2004-03-09 20:36
2004.03.28
CreateMappingFile


1-1078905860
Аноним
2004-03-10 11:04
2004.03.28
Threads


3-1077476512
kba
2004-02-22 22:01
2004.03.28
Kak s TUPDATESQL da update BLOB


7-1073286301
Shuma
2004-01-05 10:05
2004.03.28
Серийный номер BIOS