Главная страница
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.041 c
6-1073514449
Кен
2004-01-08 01:27
2004.03.28
TWebBrowser Как в BeforeNavigate2 отличить загрузку очередного


4-1073913279
velk
2004-01-12 16:14
2004.03.28
Как вписать текст в Tedit чужой программы?


1-1078422987
MAXH0
2004-03-04 20:56
2004.03.28
System tray


1-1078915324
don_dampster
2004-03-10 13:42
2004.03.28
RichEdit и ресурс


7-1073100778
Linuxoid
2004-01-03 06:32
2004.03.28
Com port