Текущий архив: 2008.04.27;
Скачать: CL | DM;
Вниз
TClass?? Найти похожие ветки
← →
alexnmsk (2008-04-03 14:32) [0]Здраствуйте, уважаемые мастера. Задача такая: хочу сделать функцию, которая будет создавать объект (наследник 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
← →
Ega23 © (2008-04-03 14:37) [1]TPrmForm - конструктор какой?
← →
clickmaker © (2008-04-03 14:39) [2]что значит "вылетает"?
← →
clickmaker © (2008-04-03 14:42) [3]погоди... какая-то каша..
почему не
TFormClass = class of TForm;
( ... FormClass: TFormClass )
?
к тому же есть CreateParented, на всякий случай
← →
alexnmsk (2008-04-03 14:43) [4]Конструктор от 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:47) [5]
> [4] alexnmsk (03.04.08 14:43)
кстати, о птичках. как ты собрался создавать экземпляр абстрактного класса?
← →
alexnmsk (2008-04-03 14:49) [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:51) [7]
> [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:54) [8]Может так и не получится? Просто я хотел заменить:
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;
← →
Ega23 © (2008-04-03 14:56) [9]
> clickmaker © (03.04.08 14:51) [7]
>
> ну так и какие трудности?
Там же конструктор перекрыть надо, нет?
← →
alexnmsk (2008-04-03 15:04) [10]
> clickmaker © (03.04.08 14:51) [7]
>
> > [6] alexnmsk (03.04.08 14:49)
>
> ну так и какие трудности?
>
> TFormClass = class of TPrmForm;
Действительно!! Сам себя заморочил. Спасибо всем, вопрос снимается.
← →
clickmaker © (2008-04-03 15:41) [11]
> [9] Ega23 © (03.04.08 14:56)
зачем?
Страницы: 1 вся ветка
Текущий архив: 2008.04.27;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.022 c