Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизСоздание компонента по имеющемуся имени класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c