📄 automenufrm.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 + -