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

Вниз

Create и запуск формы, по наименованию типа   Найти похожие ветки 

 
Ned ©   (2003-08-08 10:53) [0]

Изложу суть. Есть несколько пользовательских форм, необходимо их скреэйтить и проинициализировать, наименование классов этих форм, типа TfrmDoc, TfrmTest и т.д. передаются в функцию в виде строки, возможно ли сделать так:
function OpenSomeForms(FormTypeName : string):boolean;
var Form : Tform;
begin
result := false;
...
Form := TMyCustomForm.Create(Self);
if (Form as TMyCustomForm).Initialize then OpenForm(Form)
else Form.Release;
...
result := true;
end;
так вот хотелось бы вместо TMyCustomForm подставить тип наименование (строка) которого передается через параметр FormTypeName


 
MBo ©   (2003-08-08 10:57) [1]

GetClass, FindClass, RegisterClass


 
sts ©   (2003-08-08 10:58) [2]

Классы, доступ к которым нужно иметь по имени д.быть зарегистрированы RegisterClass(TfrmDoc) (например, в секции инициализации модуля формы).
Потом найти класс можно при помощи функции FindClass("TfrmDoc")


 
Семен Сорокин ©   (2003-08-08 11:04) [3]

глянь Demos\TeeChart\teedemo.dpr - то что ты хочешь.


 
Ned ©   (2003-08-08 12:46) [4]

Посмотрел, пример и функции. Если я передам строку - название класса: "TfrmDoc", то как создать форму?
FindClass("TfrmDoc").Create(Self)????


 
Семен Сорокин ©   (2003-08-08 12:52) [5]

procedure ShowForm(FormClass: TFormClass);

procedure ShowForm(FormClass: TFormClass);
begin
with FormClass.Create(Self) do
try
ShowModal
finally
( TfrmDoc) procedure ShowForm(FormClass: TFormClass);

procedure ShowForm(FormClass: TFormClass);
begin
with FormClass.Create(Self) do
try
ShowModal
finally
Free
end
end;

//в Твоем случае
ShowForm(TfrmDoc)


 
Ned ©   (2003-08-08 12:55) [6]

Это я ососзнал. Мне непонятно, как из имени класса формы, в моем случае "TfrmDoc", получить TForm.
procedure ShowForm(FormClass: string); // если вот так, то как же форму create?


 
Семен Сорокин ©   (2003-08-08 12:58) [7]

если строкой тогда см. MBo © (08.08.03 10:57)


 
Ned ©   (2003-08-08 13:00) [8]

Я понимаю, что это сделать можно... но, не получается сделать вот так:
Forms : TForm;
...
Forms := FindClass("TfrmDoc").Create(Self);
как же надо?


 
Семен Сорокин ©   (2003-08-08 13:04) [9]

Ned © (08.08.03 13:00)
предварительно сделать RegisterClass для "TfrmDoc", тогда у тебя FindClass его найдет.


 
Ned ©   (2003-08-08 13:05) [10]

Ошибка при компиляции, несовместимость типов TPersistent и TForm


 
sts ©   (2003-08-08 13:37) [11]

var
c : TClass;
Form : TForm;
begin
c := FindClass("TfrmDoc");
if c.InheritsFrom(TForm) then begin
( c) var
c : TClass;
Form : TForm;
begin
c := FindClass("TfrmDoc");
if c.InheritsFrom(TForm) then begin
Form := TFormClass(c).Create(Self);
Form.Show;
end
else
raise ...



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
1-68261
tlk
2003-08-07 10:38
2003.08.21
ListView с поддержкой БД или пометка в DBGrid с помощью кл.Shift


14-68482
VEG
2003-08-04 19:33
2003.08.21
Издевательства над винчестером


1-68287
Melamed
2003-08-06 22:01
2003.08.21
Вопрос по Tool API


8-68412
Romeo5
2003-04-24 01:42
2003.08.21
Рисование Form.Canvas без использования OnPain


1-68328
Chlavik
2003-08-08 01:20
2003.08.21
Asm- не получается первести процедуру с Delphi, поможете?