Как создать класс по известному имени
От: Andrey_Pavlov  
Дата: 12.09.02 08:28
Оценка:
В процедуру передаётся наименование класса в виде строки,
как создать класс с заданным именем.
Re: См. функцию GetClass
От: Dimentiy Россия  
Дата: 12.09.02 09:09
Оценка:
Здравствуйте Andrey_Pavlov, Вы писали:

AP>В процедуру передаётся наименование класса в виде строки,

AP>как создать класс с заданным именем.

См. функцию GetClass в хелпе. Там всё просто и примерчик есть.
Re: Как создать класс по известному имени
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 09:12
Оценка:
Здравствуйте Andrey_Pavlov, Вы писали:

AP>В процедуру передаётся наименование класса в виде строки,

AP>как создать класс с заданным именем.

Это тодстаточно сложная тема чтобы можно было на нее ответить в сообщении.
Можешь посмотреть мою статью на эту тему:

http://www.softforum.ru/html/index.asp?id=items&group=cps.borland.delphi&topic=item221101
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: А вообще поищи на гугле
От: Dimentiy Россия  
Дата: 12.09.02 09:23
Оценка:
Поищи на groups.google.com строку GetClass в конференции borland.public.delphi.objectpascal.

Там этот вопрос муссировался много раз.
Re[2]: Как создать класс по известному имени
От: Аноним  
Дата: 12.09.02 10:46
Оценка:
A>Это тодстаточно сложная тема чтобы можно было на нее ответить в сообщении.
A>Можешь посмотреть мою статью на эту тему:

A>http://www.softforum.ru/html/index.asp?id=items&group=cps.borland.delphi&topic=item221101


Проблема не решается.

У меня есть какаята форма, скажем TCustomForm, которая имеет constructor Create(Param1,....); virtual;
Далее я создаю кучу наследованных форм от TCustomForm.
В базе данных записан тип формы который создал запись, ну скажем TCustomForm1,
и далее я хочу чтобы данную запись редактировала форма TCustomForm1.
Я пишу. TCustomForm(FindClass(Table.FieldByName('ClassName').AsString)).Create(Param1, .....), почему то не работает,
Или я что-то не так делаю?
Re[3]: Как создать класс по известному имени
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 14:03
Оценка:
Здравствуйте Аноним, Вы писали:


A>>Это тодстаточно сложная тема чтобы можно было на нее ответить в сообщении.

A>>Можешь посмотреть мою статью на эту тему:

А>Я пишу. TCustomForm(FindClass(Table.FieldByName('ClassName').AsString)).Create(Param1, .....), почему то не работает,

А>Или я что-то не так делаю?

Это возможно только если параметры конструктора стандартные для всех классов.
Иначе компилятор не знает как вызывать конструктор.

Короче ты можешь класс по имени создать если у него есть стандартный конструктор с параметром Owner
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Как создать класс по известному имени
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.09.02 15:20
Оценка: 3 (1)
Здравствуйте Аноним, Вы писали:


A>>Это тодстаточно сложная тема чтобы можно было на нее ответить в сообщении.

A>>Можешь посмотреть мою статью на эту тему:

A>>http://www.softforum.ru/html/index.asp?id=items&group=cps.borland.delphi&topic=item221101


А>Проблема не решается.


А>У меня есть какаята форма, скажем TCustomForm, которая имеет constructor Create(Param1,....); virtual;

А>Далее я создаю кучу наследованных форм от TCustomForm.
А>В базе данных записан тип формы который создал запись, ну скажем TCustomForm1,
А>и далее я хочу чтобы данную запись редактировала форма TCustomForm1.
А>Я пишу. TCustomForm(FindClass(Table.FieldByName('ClassName').AsString)).Create(Param1, .....), почему то не работает,
А>Или я что-то не так делаю?
Попробуй разделить код на строчки и посмотреть, в какой момент вылетает ошибка:

type
  TCustFormClass = class of TCustomForm;
function CreateCustForm(ClassName: String, Param1: ...): TCustomForm;
var
  FormClass: TCustFormClass
begin
  FormClass:= TCustFormClass(FindClass(ClassName));
  Result:= FormClass.Create(Param1, ...);
end;

Скорее всего, проблема в том, что FormClass оказывается нилом. Это означает, что он не был правильно зарегистрирован. Чудес-то не бывает. Тогда надо не забыть пойти во все формы, которые были созданы, и добавить такую штуку в секцию инициализации соответствующих модулей:

RegisterClass(TMyCustForm1);

А дальше — включить галочку "Use debug DCUs" в опциях компилятора и пользоваться брекпойнтами.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как создать класс по известному имени
От: Hacker_Delphi Россия  
Дата: 13.09.02 09:04
Оценка:
Здравствуйте Andrey_Pavlov, Вы писали:

AP>В процедуру передаётся наименование класса в виде строки,

AP>как создать класс с заданным именем.
если объект — то так:
OurClass := FindClass(ClassName);
if Assigned(OurClass) then
  result := OurClass.Create
else
  result := nil;
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.