Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1205726290
Slider007
2008-03-17 06:58
2008.04.27
С днем рождения ! 17 марта 2008 понедельник


8-1179149538
Veter
2007-05-14 17:32
2008.04.27
GIF


15-1205652355
Kolan
2008-03-16 10:25
2008.04.27
Откуда взялись дерективы WARN в верху модуля?


2-1206819586
AlexDan
2008-03-29 22:39
2008.04.27
Файловые переменные


2-1207168956
fev
2008-04-03 00:42
2008.04.27
Список папок