Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 - конструктор какой?


Наверх

Титульная страница Поиск, карта сайта Написать письмо