⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 automenufrm.pas

📁 一个电力企业的后台管理程序
💻 PAS
字号:
unit AutoMenuFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, StdCtrls;

type
  TForm_AutoMenu = class(TForm)
    MainMenu1: TMainMenu;
    N_tools: TMenuItem;
    N_ConfigTools: TMenuItem;
    Btn_Quit: TButton;
    N_none: TMenuItem;
    procedure Btn_QuitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N_ConfigToolsClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    k:integer;
  public
    { Public declarations }
    MenuCount:integer;
    MenuItems:array of TMenuItem;
    MenuArray:array[1..2,1..100] of string;
    procedure MenuClick(sender:TObject);
  end;

var
  Form_AutoMenu: TForm_AutoMenu;

implementation
uses MemuOption, ToolOptionsFrm;
{$R *.DFM}

procedure TForm_AutoMenu.Btn_QuitClick(Sender: TObject);
begin
  close;
end;

procedure TForm_AutoMenu.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action:=CaFree;
  Form_AutoMenu:=nil;
end;

procedure TForm_AutoMenu.N_ConfigToolsClick(Sender: TObject);
var
  TitleStr,ProgramStr:string;
  i,TSign,PSign:integer;
begin
  if not Assigned(Form_ToolOptions) then application.CreateForm(TForm_ToolOptions,Form_ToolOptions);
  if Form_ToolOptions.ShowModal=mrOK then
  begin
    if ReadIni('System','MenuCount','0')<>'0' then
    begin
      MenuCount:=StrToInt(ReadIni('System','MenuCount','0'));
      TitleStr:=ReadIni('Option','MenuTitle','');
      ProgramStr:=ReadIni('Option','MenuProgram','');
      i:=0;
      if (TitleStr<>'')and(ProgramStr<>'') then
      begin
        if pos(';',TitleStr)>0 then
        begin
          while pos(';',TitleStr)>0 do
          begin
            i:=i+1;
            TSign:=pos(';',TitleStr);             PSign:=pos(';',ProgramStr);
            MenuArray[1,i]:=copy(TitleStr,1,TSign-1);
            MenuArray[2,i]:=copy(Programstr,1,PSign-1);
            TitleStr:=copy(TitleStr,TSign+1,Length(TitleStr)-TSign);
            ProgramStr:=copy(ProgramStr,PSign+1,Length(ProgramStr)-PSign);
          end;
        end;
        if pos(';',TitleStr)=0 then
        begin
          i:=i+1;
          MenuArray[1,i]:=TitleStr;
          MenuArray[2,i]:=Programstr;
        end;
      end;
      N_None.Visible:=true;

      SetLength(MenuItems,k);
      for i:=1 to k do
        if Assigned(MenuItems[i-1]) then MenuItems[i-1].Free;

      SetLength(MenuItems,MenuCount);
      for i:=1 to MenuCount do
      begin
        //if Assigned(MenuItems[i-1]) then MenuItems[i-1].Free;
        MenuItems[i-1]:=TMenuItem.Create(Mainmenu1);
        MenuItems[i-1].Name:='Mn'+IntToStr(i);
        MenuItems[i-1].Caption:=MenuArray[1,i];
        MenuItems[i-1].Tag:=i;
        MenuItems[i-1].OnClick:=MenuClick;
        N_tools.Add(MenuItems[i-1]);
      end;
      k:=MenuCount;
    end else N_None.Visible:=false;
  end;
end;

procedure TForm_AutoMenu.FormCreate(Sender: TObject);
var
  i,TSign,PSign:integer;
  TitleStr,ProgramStr:string;
begin
  if ReadIni('System','MenuCount','0')<>'0' then
  begin
    MenuCount:=StrToInt(ReadIni('System','MenuCount','0'));
    TitleStr:=ReadIni('Option','MenuTitle','');
    ProgramStr:=ReadIni('Option','MenuProgram','');
    i:=0;
    if (TitleStr<>'')and(ProgramStr<>'') then
    begin
      if pos(';',TitleStr)>0 then
      begin
        while pos(';',TitleStr)>0 do
        begin
          i:=i+1;
          TSign:=pos(';',TitleStr);             PSign:=pos(';',ProgramStr);
          MenuArray[1,i]:=copy(TitleStr,1,TSign-1);
          MenuArray[2,i]:=copy(Programstr,1,PSign-1);
          TitleStr:=copy(TitleStr,TSign+1,Length(TitleStr)-TSign);
          ProgramStr:=copy(ProgramStr,PSign+1,Length(ProgramStr)-PSign);
        end;
      end;
      if pos(';',TitleStr)=0 then
      begin
        i:=i+1;
        MenuArray[1,i]:=TitleStr;
        MenuArray[2,i]:=Programstr;
      end;
    end;
    N_none.Visible:=true;
    SetLength(MenuItems,MenuCount);
    for i:=1 to MenuCount do
    begin
      MenuItems[i-1]:=TMenuItem.Create(MainMenu1);
      MenuItems[i-1].Name:='Mn'+IntToStr(i);
      MenuItems[i-1].Caption:=MenuArray[1,i];
      MenuItems[i-1].Tag:=i;
      MenuItems[i-1].Visible:=true;
      MenuItems[i-1].OnClick:=MenuClick;
      N_tools.Add(MenuItems[i-1]);
    end;
    k:=MenuCount;
  end;
end;

procedure TForm_AutoMenu.MenuClick(sender:TObject);
begin
  try
    if (Sender as TMenuItem).Tag<>0 then
      ExecFile(PChar(MenuArray[2,(Sender as TMenuItem).Tag]));
  except
    exit;
    showmessage('执行文件不存在或损坏!');
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -