unit Unit_global;interface
uses Forms,SysUtils;procedure MenuItemClick(Form_name:Tform;FormClass:TFormClass);
procedure close_window(form_name:Tform) ;implementation//菜单打开窗口
procedure MenuItemClick(Form_name:Tform;FormClass:TFormClass);
begin
if Form_name=nil then
begin
   Form_name:=FormClass.Create(Application);
   Form_name.OnClose:=close_window(Form_name);
   Form_name.Show ;
end
else
   Form_name.Show;
end;//关闭窗口事件
procedure close_window(form_name:Tform) ;
begin
form_name.Action.Free ;
form_name:=nil;
end;end.上述代码在编译时报错:[Error] Unit_global.pas(17): Incompatible types: 'TCloseEvent' and 'procedure, untyped pointer or untyped parameter'应该怎么写呢?

解决方案 »

  1.   

    OnClose是个事件,你那个close_window是个procedure能赋值吗,至少参数应该一致,你看看OnClose事件的参数是什么,照着那个写,只是把方法名改一下就行
      

  2.   

    procedure close_window(form_name:Tform) ;
    这是一个过程定义,不是事件的定义,所以不兼容。
    Form_name.OnClose:=close_window(Form_name);
      

  3.   

    procedure TForm2.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action:=Cafree;
      Form2:=nil;
    end;那具体应该怎么改呢?
      

  4.   

    procedure close_window(form_name:Tform) ;
    改成
    procedure close_window(Sender: TObject; var Action: TCloseAction) ;
      

  5.   


    那我这句应该怎么写?
    Form_name.OnClose:=close_window(Form_name);
      

  6.   

    procedure FrmClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action:=Cafree;
    end;//关闭窗口事件
    procedure close_window(form_name:Tform) ;
    begin
    form_name.OnClose = frmclose;
    form_name.close;
    form_name := nil;
    end;