![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TClass?? [D7, 2000]
alexnmsk © (2008-04-03 14:32:00)Здраствуйте, уважаемые мастера. Задача такая: хочу сделать функцию, которая будет создавать объект (наследник TForm), отображать модально, обрабатывать результат. Наследников может быть несколько, поэтому хотелось бы в параметрах ф-ции передавать класс объекта, но что-то не получается.
TPrmForm = class (TForm)
...
function ShowPrmForm(HParent: THandle; FormClass: TClass; Parameters: String): Word;
begin
with TPrmForm(FormClass).Create(nil) do
begin
ParentWindow:=HParent;
//Здесь обработка до вызова
Result:= ShowModal;
//Здесь после
Destroy;
end;
end;
Вылетает на ShowModal
clickmaker (2008-04-03 15:41:00) [1]
> [9] Ega23 © (03.04.08 14:56)
зачем?
alexnmsk (2008-04-03 15:04:00) [2]
> clickmaker © (03.04.08 14:51) [7]
>
> > [6] alexnmsk (03.04.08 14:49)
>
> ну так и какие трудности?
>
> TFormClass = class of TPrmForm;
Действительно!! Сам себя заморочил. Спасибо всем, вопрос снимается.
Ega23 (2008-04-03 14:56:00) [3]
> clickmaker © (03.04.08 14:51) [7]
>
> ну так и какие трудности?
Там же конструктор перекрыть надо, нет?
alexnmsk (2008-04-03 14:54:00) [4]Может так и не получится? Просто я хотел заменить:
case Index of
0:
begin
with TMForm1.Create(nil) do
begin
ParentWindow:=HParent;
//Здесь обработка до вызова
ResultValue:= ShowModal;
//Здесь после
Destroy;
end;
end;
4:
begin
with TMForm2.Create(nil) do
begin
ParentWindow:=HParent;
//Здесь обработка до вызова
ResultValue:= ShowModal;
//Здесь после
Destroy;
end;
end;
5:
begin
with TMForm3.Create(nil) do
begin
ParentWindow:=HParent;
//Здесь обработка до вызова
ResultValue:= ShowModal;
//Здесь после
Destroy;
end;
end;
end;
clickmaker (2008-04-03 14:51:00) [5]
> [6] alexnmsk (03.04.08 14:49)
ну так и какие трудности?
TFormClass = class of TPrmForm;
function ShowPrmForm(HParent: THandle; FormClass: TFormClass; Parameters: String): Word;
begin
with FormClass.CreateParented(HParent) do
begin
try
Result:= ShowModal;
finally
Free;
end;
end;
end;
alexnmsk (2008-04-03 14:49:00) [6]Наверное нужно поподробнее:
TPrmForm = class (TForm)
public
{ Public declarations }
function GetParameters: String; virtual; abstract;
procedure SetParameters(Value: String); virtual; abstract;
end;
TMForm1 = class(TPrmForm)
...
public
{ Public declarations }
function GetParameters: String; override;
procedure SetParameters(Value: String); override;
end;
TMForm2 = class(TPrmForm)
...
public
{ Public declarations }
function GetParameters: String; override;
procedure SetParameters(Value: String); override;
end;
и т.д.
Функция нужна, чтобы использовать примерно так:
case Index of
0: ResultValue:= ShowPrmForm(ParentWindow, TMForm1, String(Parameters));
4: ResultValue:= ShowPrmForm(ParentWindow, TMForm2, String(Parameters));
5: ResultValue:= ShowPrmForm(ParentWindow, TMForm3, String(Parameters));
end;
clickmaker (2008-04-03 14:47:00) [7]
> [4] alexnmsk (03.04.08 14:43)
кстати, о птичках. как ты собрался создавать экземпляр абстрактного класса?
alexnmsk (2008-04-03 14:43:00) [8]Конструктор от TForm
TPrmForm = class (TForm)
public
{ Public declarations }
function GetParameters: String; virtual; abstract;
procedure SetParameters(Value: String); virtual; abstract;
end;
Вылетает "Acess Violation ..."
clickmaker (2008-04-03 14:42:00) [9]погоди... какая-то каша..
почему не
TFormClass = class of TForm;
( ... FormClass: TFormClass )
?
к тому же есть CreateParented, на всякий случай
clickmaker (2008-04-03 14:39:00) [10]что значит "вылетает"?
Ega23 (2008-04-03 14:37:00) [11]TPrmForm - конструктор какой?