unit main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, DB, ADODB, Grids, DBGrids;type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    QueryMenuInf: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    QueryMenu: TADOQuery;
    DataSource2: TDataSource;
    DBGrid2: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure MenuItemCloseClick(Sender: TObject);
    procedure MenuItemQuitClick(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
const
  ConnectParam = 'Provider=Microsoft.Jet.OLEDB.4.0;'+
      'Data Source=%s\MenuInf.mdb;Persist Security Info=False';implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var i,j,iMenuNum1,iMenuNum2: integer;
    MenuArray1: array of TMenuItem;
    MenuArray2: array of TMenuItem;
    sMenuId: string;
begin
   ADOConnection1.ConnectionString:=Format(ConnectParam,
       [ExtractFileDir(Application.ExeName)]);
   ADOConnection1.LoginPrompt:=False;
   ADOConnection1.Connected:=True;
   with QueryMenuInf do
   begin
      Close;
      SQL.Text:='select * from menuinf where len(MenuId)=2'+
         ' and IsView=''1''';  //IsView:为1时显示;如果为0,则不显示,
      Open;
      iMenuNum1:=RecordCount;
      First;
   end;
   if iMenuNum1 > 0 then
   begin
      try
      GetMem(MenuArray1,iMenuNum1*SizeOf(TMenuItem));
      for i:=1 to iMenuNum1 do
      begin
         MenuArray1[i-1]:=TMenuItem.Create(Self);
         MenuArray1[i-1].Caption:=
         QueryMenuInf.FieldByName('MenuName').AsString;
         MainMenu1.Items.Add(MenuArray1[i-1]);
         if MenuArray1[i-1].Caption = '退出' then
            MenuArray1[i-1].OnClick:=MenuItemCloseClick;
         sMenuId:=Trim(IntToStr(i));
         if Length(sMenuId) = 1 then sMenuId:='0' + sMenuId;
         with QueryMenu do
         begin
            Close;
            SQL.Text:='select * from menuinf where len(MenuId)=4'+
            ' and left(MenuId,2)='''+sMenuId+''' and IsView=''1''';
            Open;
            iMenuNum2:=RecordCount;
            First;
         end;
         if iMenuNum2 > 0 then
         begin
            try
            GetMem(MenuArray2,iMenuNum2*SizeOf(TMenuItem));
            for j:=1 to iMenuNum2 do
            begin
               MenuArray2[j-1]:=TMenuItem.Create(Self);
               MenuArray2[j-1].Caption:=
               QueryMenu.FieldByName('MenuName').AsString;
               MenuArray1[i-1].Add(MenuArray2[j-1]);
               if MenuArray2[j-1].Caption = '退出' then
                  MenuArray2[j-1].OnClick:=MenuItemQuitClick;
               QueryMenu.Next;
            end;
            finally
               FreeMem(MenuArray2);
            end;
         end;
         QueryMenuInf.Next;
      end;
      finally
         FreeMem(MenuArray1);
      end;
   end;
end;procedure TForm1.MenuItemCloseClick(Sender: TObject);
begin
   Close;
end;procedure TForm1.MenuItemQuitClick(Sender: TObject);
begin
   Close;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   if MessageBox(Handle,'您确认要退出程序吗?','提示',
      Mb_OKCancel + Mb_IconQuestion) = 1 then
      Action:=caFree
   else Action:=caNone;
end;end.