Передача класса в качестве параметра процедуры в Delphi XE - PullRequest
6 голосов
/ 13 декабря 2011

Что мне нужно сделать, это что-то вроде этого:

procedure A(type_of_form);
var form: TForm;
begin
  form := type_of_form.Create(application);
  form.showmodal;
  freeandnil(form);
end;

Я сделал это для каждой динамически созданной формы:

form1 := TForm1.Create(application);
form1.showmodal;
freeandnil(form1);

То, что я буду делать внутри процедуры А, является более сложным, но проблема заключается в том, как сделать создание формы несколько общим.Возможно, что-то с @ оператором ... я действительно не знаю.

Спасибо за любые предложения!

Ответы [ 2 ]

7 голосов
/ 14 декабря 2011
procedure Test(AMyFormClass: TFormClass);
var
 form: TForm;
begin
  form := AMyFormClass.Create(Application); // you can use nil if you Free it in here
  try
    form.ShowModal;
  finally
    form.Release; // generally better than Free for a Form
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test(TForm2);
end;
3 голосов
/ 14 декабря 2011

То, что вы запрашиваете, это в основном то, что делает TApplication.CreateForm(), например:

Application.CreateForm(TForm1, form1); 
form1.ShowModal; 
FreeAndNil(form1); 

Вы можете имитировать это без вызова TAppliction.CreateForm(), например:

procedure A(AClassType: TFormClass); 
var
  form: TForm; 
begin 
  form := AClassType.Create(Application); 
  try
    form.ShowModal; 
  finally
    FreeAndNil(form);
  end; 
end; 

...

begin
  A(TForm1); 
end;
...