我在DLL中写了下面两个过程:
procedure OnShowProgram(Sender: TObject);
begin
  With Sender As TdxNavBarItem Do
    ShellExecute(FormTemp.Handle,nil,PChar(ExtractFilePath(Application.ExeName)+Name),nil,nil,sw_shownormal);
end;procedure ShowBarTree(varFormTemp:TForm;dxNavBarTemp:TdxNavBar);stdcall;
var
  i,m:Integer;
  dxNavBarGroupTemp :TdxNavBarGroup;
  dxNavBarItemTemp :TdxNavBarItem;
  sModule,sTempAddRess :String;
  ADOConnectionTemp:TADOConnection ;
  ADOQueryTemp:TADOQuery;
  ADOQueryTemp2:TADOQuery;
begin
  FormTemp:=varFormTemp;   
  If ADOConnectionTemp.Connected Then
    ADOConnectionTemp.Connected := False;
  sTempAddRess :=ExtractFilePath(Application.ExeName);
  ADOConnectionTemp.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sTempAddRess+'data\maximo.mdb;Persist Security Info=False ';
  Try
    ADOConnectionTemp.Connected := True;
  Except
    ShowMessage('数据库连接失败,请重新启动程序!');
    Exit;
  End;  With ADOQueryTemp Do
  Begin
    Close;
    SQL.Text :='Select * From Maxmodules Where Rowpos >=0 ORDER BY Rowpos, Colpos ';
    Open;
    If Not IsEmpty Then
    Begin
      First;  
      For i:=0 To RecordCount -1 Do
      Begin
        //生成分组菜单项
        dxNavBarGroupTemp := dxNavBarTemp.Groups.Add;
        dxNavBarGroupTemp.Index := i+1;
        dxNavBarGroupTemp.Name :='dxNavBarGroup20'+Inttostr(i);
        dxNavBarGroupTemp.Caption := FieldByName('Description').AsString;
        dxNavBarGroupTemp.Expanded := False; 
        sModule := FieldByName('Module').AsString;
        With ADOQueryTemp2 Do
        Begin
          Close;
          SQL.Text :='SELECT * FROM maxapps WHERE [Module] ='''+sModule+''''+' ORDER BY menupos';
          Open;
          If Not IsEmpty Then
          Begin
            //生成各组子项
            For m:=0 To RecordCount -1 Do
            Begin
              dxNavBarItemTemp := TdxNavBarItem.Create(Nil);
              dxNavBarItemTemp.Name :=FieldByName('app').AsString;
              dxNavBarItemTemp.Caption :=FieldByName('Description').AsString;
              dxNavBarGroupTemp.CreateLink(dxNavBarItemTemp);
              dxNavBarItemTemp.OnClick := OnShowProgram;
              Next;
            End;
          End;
        End;
        Next;
      End;
    End;
  End;
end;  
但在编译时在dxNavBarItemTemp.OnClick := OnShowProgram;行处出错,我在那地方写错的,请指教。200分相送

解决方案 »

  1.   

    dxNavBarItemTemp的Click中的参数是不是就一个sender?
      

  2.   

    dxNavBarItemTemp.OnClick := OnShowProgram;
    好象dxNavBarItemTemp.OnClick 不只一个参数, 即参数不匹配
      

  3.   

    出现的错误是:Incompatible types:'method pointer and regular procedure '
      

  4.   

    If ADOConnectionTemp.Connected Then
        ADOConnectionTemp.Connected := False;
    改為if adoconnectiontemp.connected=true then
        adoconnectiontemp.connected:=false;
      

  5.   

    用TMethod解决:
    http://blog.csdn.net/ly_liuyang/archive/2005/02/01/276447.aspxhttp://lysoft.7u7.net