Главная страница
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.016 c
15-1205750734
Washington
2008-03-17 13:45
2008.04.27
Python


8-1178878045
VoKram
2007-05-11 14:07
2008.04.27
PostScript -> EMF


8-1169580700
serko
2007-01-23 22:31
2008.04.27
Прибор через COM порт...


2-1206715368
gefest80
2008-03-28 17:42
2008.04.27
перерисовка экрана


2-1206711835
operator
2008-03-28 16:43
2008.04.27
Сколько строк в файле?