我在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分相送
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分相送
好象dxNavBarItemTemp.OnClick 不只一个参数, 即参数不匹配
ADOConnectionTemp.Connected := False;
改為if adoconnectiontemp.connected=true then
adoconnectiontemp.connected:=false;
http://blog.csdn.net/ly_liuyang/archive/2005/02/01/276447.aspxhttp://lysoft.7u7.net