Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TCustomFormClass. Вопрос на засыпку, уважаемые. / 19 сообщений из 19, страница 1 из 1
11.04.2003, 13:00
    #32138525
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var 
DocClass:TCustomFormClass;
DocEditor:TCustomForm;
begin
DocClass: TMyDocForm;
DocEditor:=DocClass.Create(Self)
end


А теперь вопрос, как мне это сделать, если я имею "TMyDocForm" в строковом формате.
...
Рейтинг: 0 / 0
11.04.2003, 13:07
    #32138534
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Если я тебя правильно понял, то RTFM:

Finds and returns a class that is derived from TPersistent.

function FindClass(const ClassName: string): TPersistentClass;

Description

Call FindClass to locate a class type by name. FindClass searches the classes that the streaming system knows about. Form classes and component classes that are referenced in a form declaration (instance variables) are automatically registered with the streaming system. Other classes can be registered (with a call to RegisterClasses) so that the streaming system will recognize that class in a stream and know how to construct it.

If the requested class name cannot be found, FindClass raises an exception.
...
Рейтинг: 0 / 0
11.04.2003, 13:53
    #32138656
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Я это читал в хелпе, но как это реализовать, я не понял.
...
Рейтинг: 0 / 0
11.04.2003, 18:40
    #32139186
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
type
TXClass=class of TCustomForm;
var
trikuku: TXClass;
MyForm:TCustomForm;
begin
trikuku:=TXClass(FindClass("TMyForm"));
MyForm:=trikuku.Create(Application);

Реально ты получишь в результате в MyForm экземпляр класса TMyForm.
...
Рейтинг: 0 / 0
11.04.2003, 23:10
    #32139266
-Eugene-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Для использования функций FindClass и GetClass необходимо сначала зарегистрировать пользовательский класс функцией RegisterClass или RegisterClasses. Их описание приведено в хелпе. Обычно регистрация выполняется в секции initialization модуля. Хорошем стилем в секции finalization добавить парную UnRegisterClass. Пример можно посмотреть в самом VCL, выполнив поиск в исходниках VCL по RegisterClass.
...
Рейтинг: 0 / 0
12.04.2003, 00:39
    #32139282
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Ну, ясен пень, надо RegisterClass вызывать... Куда ж без него. Но это как раз в хелпе написано, а человек не может понять, как то, что написано в хелпе, реализовать.
...
Рейтинг: 0 / 0
21.04.2003, 14:49
    #32145118
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Все сделал, регистрирую класс в initialization в модуле класса. Но при команде findclass, выдает: не могу найти класс.
Что делать?
...
Рейтинг: 0 / 0
28.04.2003, 07:39
    #32149701
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Назвали "дураком", а на вопрос не ответили!!
...
Рейтинг: 0 / 0
29.04.2003, 01:09
    #32150528
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Точно напиши, как ты его зарегистрировал.
...
Рейтинг: 0 / 0
29.04.2003, 08:30
    #32150572
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Это я вставлял в разные модули, эфект один и тот же:
Код: plaintext
1.
initialization
RegisterClass(TfrmDoc1002);


Затем где-нить:
Код: plaintext
1.
2.
3.
4.
function TfrmDocBook.GetClassForm():TCustomFormClass;
begin
Result:=TCustomFormClass(FindClass('TfrmDoc1002'));
end

Не работает, выдает "не могу найти класс".
...
Рейтинг: 0 / 0
29.04.2003, 09:10
    #32150586
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Надо писать не просто RegisterClass, а Classes.RegisterClass.
...
Рейтинг: 0 / 0
29.04.2003, 10:05
    #32150640
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Не помогло
...
Рейтинг: 0 / 0
29.04.2003, 10:18
    #32150659
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Попробуй на тестовом приложении сделать. На TFORM1 нового только что созданного проекта.
...
Рейтинг: 0 / 0
05.05.2003, 07:54
    #32152964
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Попробовал.
На тестовом работает, а в моем проекте нет. Ничего не помимаю.
...
Рейтинг: 0 / 0
05.05.2003, 21:33
    #32153848
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Давай по шагам.

Сначала вызови FindClass в своем проекте непосредственно после RegisterClass.

Потом отключи все findclass, Которые есть и сделай findclass либо в OnCreate формы, которая является экземпляром этого класса, либ сразу после создания этой формы.

И это... я надеюсь, у тебя код и ресурс формы не в DLL? (или RegisterClass - в DLL, а код и ресурс класса формы - в основном модуле).
...
Рейтинг: 0 / 0
06.05.2003, 08:17
    #32153938
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Все попробовал, даже вот так сделал:
Код: plaintext
1.
2.
initialization
RegisterClass(TfrmMain);
FindClass('TfrmMain');

Все это я делаю в основной форме. Все равно пишет, что класс не найден.

А что насчет DLL, если я подключаю DLL, в которой есть класс который я хочу подключить, там система та же?
...
Рейтинг: 0 / 0
06.05.2003, 10:35
    #32154018
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Ну-ка создай новый пустой проект, там в юните основной формы вставь секцию инициализации:

Код: plaintext
1.
2.
3.
4.
initialization

 Classes.RegisterClass(TForm1);
 if Classes.FindClass('TForm1')=nil then
   raise Exception.Create('Suxxxxx');


И проверь.
...
Рейтинг: 0 / 0
07.05.2003, 09:21
    #32154839
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Ну проверял ведь, на новом проекте все работает.
А в моем не рабоатет. Этот проект я не сначала делал, т.е. я перенял в процессее. Некоторые формы я не трогал, но знаю что там планировалось работать с DLL'шками. Вот и вопрос, что в этом проеке может быть, что мешает работать связке RegisterClass, FindClass.
...
Рейтинг: 0 / 0
07.05.2003, 12:24
    #32155071
WO
WO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCustomFormClass. Вопрос на засыпку, уважаемые.
Если у тебя форма (т.е., код её юнита и её ресурс) в DLL, а FindClass делаешь в приложении - не покатит. DLL - это ж весчь в себе. И копия VCL на каждую из них - своя. Ну и переменная Classes.ClassList типа TThreadList, в которой и хранится список зарегистрированных классов - тоже у каждой DLL - своя. И если ты RegisterClass делаешь из DLL при загрузке этой DLL, а FindClass - из самого приложения, то ты обращаешься к той переменной, которая находится в приложении.
В этом случае СОДР одно из трех:
1) Немедленное сэппоку. Эффективно очень. Попробуй.
2) Runtime Packages
3) Спец. экспортируемая функция в каждой DLL (с предопределенным именем, напр.), которая по имени класса будет вызывать Findclass внутри DLL и возвращать указатель на класс в вызывающее приложение.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TCustomFormClass. Вопрос на засыпку, уважаемые. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]