//动态创建窗体
procedure FCreate(FormClass: TFormClass; FName: String);
begin
  if HasForm(FName) then exit; //自定义窗体判断函数
  try
    with FormClass.Create(Application) do
      Show;
  except
    StatusBarText(6, 0 , '创建'+ FName + '失败');
    Exit;
  end;
end;//响应Nav ONCLICK
procedure NavItemsOnClick(Sender:TObject; NICaption, FName:String; FormClass: TFormClass);
begin
  if (sender as TdxNavBarItem).Caption = NICaption then
  begin
    FCreate(FormClass,'FName')
  end;
end;调用navItemsOnClick NBItm.OnClick := NavItemsOnClick(self, FieldByName('_menuCaption').Value, 'frmLogin', TfrmLogin);我的本意是不想 在 自定义的OnClick过程中一直 if (sender as TdxNavItem).Caption = '' then 
这样判断哪个 Item被单击 而是通过向navItemOnClick传入 参数 但是 发生   [Error] UNav.pas(81): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'
错误哪位高人帮忙看看

解决方案 »

  1.   

    onclick事件只有一个参数Sender啊。你可以用(sender as TdxNavItem).name取得控件名字。
      

  2.   

    procedure NavItemsOnClick(Sender:TObject);with FormClass.Create(Application) do
    begin
    onclick:=NavItemsOnClick;
    end;
      

  3.   

    这东西怎么能随便定义呢,要和他的OnClick事件有一样的参数才行,sender就是你所点击的组件
      

  4.   

    参数类型不对,你能将一个string 类型直接赋值给一个Integer吗OnClick也是一种类型..
      

  5.   

    onclick是TNotifyEvent类型
    TNotifyEvent的定义如下
    TNotifyEvent = procedure(Sender: TObject) of Object;lz的问题有两点:
    1. NavItemsOnClick是个普通过程,不是类的方法,TNodifyEvent是of object,说明这是一个类的方法
    2. NavItemsOnClick的形参和TNotifyEvent要求的不一致。