Главная страница
    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.46 MB
Время: 0.007 c
3-68150
Sergeyy
2003-07-25 13:23
2003.08.21
DBGrid внутри DBCtrlGrid


14-68505
vitalmoya
2003-08-04 12:46
2003.08.21
Web


3-68167
Mypp
2003-07-29 09:46
2003.08.21
Хранимые процедуры


1-68302
Sedunov Vitaly
2003-08-06 15:49
2003.08.21
ScrollBar в MDIForm


3-68249
sashag
2003-07-25 17:17
2003.08.21
Interbase DBLookupCombobox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский