var
MM:TMenuItem;
100分我要了
begin
MM:=TMenuItem.Create(Self);
MM.Caption:='&shenqw';
// MM.OnClick:=MyClick;
MainMenu1.Items.Add(MM);
MM:=TMenuItem.Create(Self);
MM.Caption:='&shenqw2';
MM.OnClick:=MyClick;
MainMenu1.Items[0].Add(MM);procedure TForm1.MyClick(Sender: TObject);
begin
ShowMessage('OK');
end;
MM:TMenuItem;
100分我要了
begin
MM:=TMenuItem.Create(Self);
MM.Caption:='&shenqw';
// MM.OnClick:=MyClick;
MainMenu1.Items.Add(MM);
MM:=TMenuItem.Create(Self);
MM.Caption:='&shenqw2';
MM.OnClick:=MyClick;
MainMenu1.Items[0].Add(MM);procedure TForm1.MyClick(Sender: TObject);
begin
ShowMessage('OK');
end;
• 创建子菜单。
• 为每个子菜单创建菜单项。
• 设置菜单项的属性。
• 定义菜单命令的事件处理过程。
例程S4_2 该例程不仅对以上内容进行了说明,而且还包含了以下内容:
• 在菜单中设置竖向分隔条。
• 通过按钮激活弹出式菜单。
具体实现过程如下:
1) 通过菜单File | New Application创建一个新的工程。
2) 在窗体中添加三个B u t t o n组件,C a p t i o n属性分别设置为“创建主菜单( & M )”、“创建弹
出式菜单( & P )”和“显示弹出式菜单( & S )”。
3) 在U s e s语句中增加下面的代码:
. . .
u s e s
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,Menus;
. . .
4) 在U n i t 1 . p a s文件中定义下面的变量:
. . .
v a r
Form1: TForm1;
MyMainMenu: TMainMenu;
MyPopUpMenu: TPopUpMenu;
MySubItems: array[0..3] of TMenuItem;
MyPopUpItems: array[0..3] of TMenuItem;
i: Integer;
i m p l e m e n t a t i o n
. . .
5) 定义菜单命令的事件处理过程。
首先在U n i t 1 . p a s文件的T F o r m 1的定义代码中添加如下代码:
t y p e
TForm1 = class(TForm)
. . .
// 定义菜单命令的事件处理过程
procedure MyPopupHandler(Sender: TObject);
p r i v a t e然后手工在U n i t 1 . p a s文件的最后一条e n d语句的前面定义过程体如下:
// 菜单命令的事件处理过程
procedure TForm1.MyPopupHandler(Sender: TO b j e c t ) ;
b e g i n
with Sender as TMenuItem do
b e g i n
// 在信息对话框中显示选中菜单项的C a p t i o n属性
ShowMessage(Caption);
e n d ;
e n d ;
6) 添加B u t t o n 1组件、B u t t o n 2组件和B u t t o n 3组件的O n C l i c k事件的处理过程如下:
procedure TForm1.Button1Click(Sender: TO b j e c t ) ;
v a r
MyItem: array[0..2] of TMenuItem;
b e g i n
MyMainMenu:= TMainMenu.Create(Self);
// 创建三个子菜单
for i := 0 to 2 do begin
MyItem[i] := TMenuItem.Create(Self);
MyItem[i].Caption := '子菜单' + I n t To S t r ( i ) + ' ( & ' + I n t To S t r ( i ) + ' ) ' ;
M y M a i n M e n u . I t e m s . A d d ( M y I t e m [ i ] ) ;
e n d ;
for i := 0 to 3 do begin
MySubItems[i] := TMenuItem.Create(Self);
MySubItems[i].Caption := '主菜单项' + I n t To S t r ( i ) + ' ( & ' + I n t To S t r ( i + 1 ) + ' ) ' ;
M y M a i n M e n u . I t e m s [ 0 ] . A d d ( M y S u b I t e m s [ i ] ) ;
// 指定菜单项的O n C l i c k事件的处理过程
MySubItems[i].OnClick := MyPopUpHandler;
e n d ;
// 将第2个菜单项设置为分隔条
MySubItems[1].Caption :='-';
// 设置竖向分隔条
MySubItems[3].Break := mbBarBreak;
e n d ;
procedure TForm1.Button2Click(Sender: TO b j e c t ) ;
b e g i n
MyPopUpMenu := TPopUpMenu.Create(self);
for i := 0 to 3 do
b e g i n
MyPopUpItems[i] := TMenuItem.Create(Self);
// 设置菜单项的C a p t i o n属性
MyPopUpItems[i].Caption := '弹出菜单项' + I n t ToStr(i)+ '(&'+ IntToStr(i+1)+ ')';
M y P o p U p M e n u . I t e m s . A d d ( M y P o p U p I t e m s [ i ] ) ;
// 指定菜单项的O n C l i c k事件的处理过程
MyPopUpItems[i].OnClick := MyPopupHandler;
e n d ;
请: hammer_shi
再费些神
对不起,网络有点问题,
unit main_frm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls,fun_unit, DB, DBTables, Buttons;const
N = 36;type
Tmain_fm = class(TForm)
MainMenu1: TMainMenu;
Panel1: TPanel;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure p_new(Sender: TObject);
procedure p_open(Sender: TObject);
procedure p_save(Sender: TObject);
procedure p_application(Sender: TObject);
procedure p_from(Sender: TObject);
procedure p_other(Sender: TObject);
procedure p_undo(Sender: TObject);
procedure p_cut(Sender: TObject);
procedure p_copy(Sender: TObject);
procedure p_find(Sender: TObject);
procedure p_findinfile(Sender: TObject);
procedure p_browers(Sender: TObject);
procedure p_tooler(Sender: TObject);
procedure p_options(Sender: TObject);
procedure p_viewsourse(Sender: TObject);
procedure p_run(Sender: TObject);
procedure p_stepover(Sender: TObject);
procedure p_staseinto(Sender: TObject);
procedure p_new1(Sender: TObject);
procedure p_old(Sender: TObject);
procedure p_sql(Sender: TObject);
procedure p_insert(Sender: TObject);
procedure p_delete(Sender: TObject);
procedure p_cb(Sender: TObject);
procedure p_delphi(Sender: TObject);
procedure p_vc(Sender: TObject);
procedure p_pb(Sender: TObject);end;var
main_fm: Tmain_fm;
menu_collect:array[0..N] of menus_p; //菜单集
assign_menu :array[0..N] of TMenuItem;
implementation{$R *.dfm}procedure Tmain_fm.p_new(Sender: TObject);
begin
end;
procedure Tmain_fm.p_open(Sender: TObject);
begin
showmessage('打开成功!');
end;procedure Tmain_fm.p_save(Sender: TObject);
beginend;procedure Tmain_fm.p_application(Sender: TObject);
beginend;procedure Tmain_fm.p_from(Sender: TObject);
beginend;procedure Tmain_fm.p_other(Sender: TObject);
beginend;procedure Tmain_fm.p_undo(Sender: TObject);
beginend;procedure Tmain_fm.p_cut(Sender: TObject);
begin
end;procedure Tmain_fm.p_copy(Sender: TObject);
begin
end;procedure Tmain_fm.p_find(Sender: TObject);
begin
end;procedure Tmain_fm.p_findinfile(Sender: TObject);
begin
end;procedure Tmain_fm.p_browers(Sender: TObject);
begin
end;procedure Tmain_fm.p_tooler(Sender: TObject);
begin
end;procedure Tmain_fm.p_options(Sender: TObject);
begin
end;procedure Tmain_fm.p_viewsourse(Sender: TObject);
begin
end;procedure Tmain_fm.p_run(Sender: TObject);
beginend;procedure Tmain_fm.p_stepover(Sender: TObject);
beginend;procedure Tmain_fm.p_staseinto(Sender: TObject);
beginend;procedure Tmain_fm.p_new1(Sender: TObject);
beginend;procedure Tmain_fm.p_old(Sender: TObject);
beginend;procedure Tmain_fm.p_sql(Sender: TObject);
beginend;procedure Tmain_fm.p_insert(Sender: TObject);
beginend;procedure Tmain_fm.p_delete(Sender: TObject);
begin
showmessage('删除成功!');end;procedure Tmain_fm.p_cb(Sender: TObject);
beginend;procedure Tmain_fm.p_delphi(Sender: TObject);
beginend;procedure Tmain_fm.p_vc(Sender: TObject);
beginend;procedure Tmain_fm.p_pb(Sender: TObject);
beginend;
procedure Tmain_fm.FormShow(Sender: TObject);
begin
get_mani_menu(menu_collect);
get_assign_mean(assign_menu,MainMenu1,menu_collect);
if copy(gs_user_no,1,3) = '001' then
create_mean(menu_collect,assign_menu,MainMenu1)
else
create_mean_user(menu_collect,assign_menu,MainMenu1);
end;end.
//***************************** 函数 *****************************************//
//************ get_mani_menu 得取菜单的名称与编号***************************//
//************ get_assign_mean 初始化菜单***********************************//
//************ create_mean 创建菜单 ****************************************//unit fun_unit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls, DB, DBTables;const
TM = 'U';type
menus_p =^menus_str;
menus_str = record
menu_item:TMenuItem; //菜单名称
menu_no :string; //菜单编号
Menu_mc :string; //函数名称
sf_privew: integer; //判断是否有权限 0:没有权限,1:有权限
end;var
gs_user_no,gs_user_name:string;
login_sucess:boolean;
Query_menu: TQuery;
// menu_collect:array[0..36] of menus_p;procedure get_mani_menu(var menu_collect:array of menus_p);procedure get_assign_mean(var assign_menu:array of TMenuItem;var MainMenu1: TMainMenu;menu_collect:array of menus_p);procedure create_mean(menu_collect:array of menus_p;assign_menu:array of TMenuItem;var MainMenu1:TMainMenu);procedure create_mean_user(menu_collect:array of menus_p;assign_menu:array of TMenuItem;var MainMenu1:TMainMenu);implementationuses
dm_frm,main_frm;//建立基它用户组的
procedure create_mean_user(menu_collect:array of menus_p;assign_menu:array of TMenuItem;var MainMenu1:TMainMenu);
var
query_user:Tquery;
sql_str :string;
tab_str: string;
menu_item_no,men_sub_no,i,j:integer;
menu_item_str,men_sub_str:string;
menu_last:integer;
begin
i :=0;
tab_str := copy(gs_user_no,4,3);
sql_str :='select * from ' + TM + tab_str;
query_user :=TQuery.Create(application);
query_user.DatabaseName := dm.db_menu.DatabaseName;
if query_user.Active then
query_user.Close;
query_user.SQL.Clear;
query_user.SQL.Add(sql_str);
query_user.Prepare;
query_user.Open;
query_user.First;
while i < N do
begin
menu_item_str := copy(menu_collect[i].menu_no,1,2);
menu_item_no := strToInt(menu_item_str);
men_sub_str := copy(menu_collect[i].menu_no,3,2);
men_sub_no := strToInt(men_sub_str);
menu_last := strToInt(copy(menu_collect[i].menu_no,5,2));
//生成第一个菜单
if men_sub_no = 0 then
if menu_last = 0 then
MainMenu1.Items.Add(assign_menu[i])
else
MainMenu1.Items[menu_item_no - 1].Add(assign_menu[i])
else
begin
if menu_last = 0 then
begin
MainMenu1.Items[menu_item_no -1].Add(assign_menu[i]);
j :=i;
end
else
assign_menu[j].Add(assign_menu[i]);
end;
assign_menu[i].Visible := false;
query_user.First;
while not query_user.Eof do
begin
if query_user.FieldByName('user_mean_no').Value = trim(menu_collect[i].menu_no) then
begin
assign_menu[i].Visible := true;
break;
end;
query_user.Next;
end;
i :=i+1;
end;
end;//系统管理员组的建立
procedure create_mean(menu_collect:array of menus_p;assign_menu:array of TMenuItem;var MainMenu1:TMainMenu);
var
menu_item_no,men_sub_no,i,j:integer;
menu_item_str,men_sub_str:string;
menu_last:integer;
begin
i :=0;
while i < N do
begin
menu_item_str := copy(menu_collect[i].menu_no,1,2);
menu_item_no := strToInt(menu_item_str);
men_sub_str := copy(menu_collect[i].menu_no,3,2);
men_sub_no := strToInt(men_sub_str);
menu_last := strToInt(copy(menu_collect[i].menu_no,5,2));
//生成第一个菜单
if men_sub_no = 0 then
if menu_last = 0 then
MainMenu1.Items.Add(assign_menu[i])
else
MainMenu1.Items[menu_item_no - 1].Add(assign_menu[i])
else
begin
if menu_last = 0 then
begin
MainMenu1.Items[menu_item_no -1].Add(assign_menu[i]);
j :=i;
end
else
assign_menu[j].Add(assign_menu[i]);
end;
i :=i+1; end;
end;
procedure get_assign_mean(var assign_menu:array of TMenuItem;var MainMenu1: TMainMenu;menu_collect:array of menus_p);
var
i:integer;
begin
i :=0;
while i < N do
begin
assign_menu[i] := TMenuItem.Create(application);
if trim(menu_collect[i].Menu_mc) = trim('open') then
begin
assign_menu[i].Caption := 'open';
assign_menu[i].OnClick := main_fm.p_open;
end
else if trim(menu_collect[i].Menu_mc) = 'save' then
begin
assign_menu[i].Caption :='save';
assign_menu[i].OnClick :=main_fm.p_save;
end
else if trim(menu_collect[i].Menu_mc) = 'applicaton' then
begin
assign_menu[i].Caption :='applicaton';
assign_menu[i].OnClick :=main_fm.p_application;
end
else if trim(menu_collect[i].Menu_mc) = 'from' then
begin
assign_menu[i].Caption :='from';
assign_menu[i].OnClick :=main_fm.p_from;
end
else if trim(menu_collect[i].Menu_mc) = 'other' then
begin
assign_menu[i].Caption :='other';
assign_menu[i].OnClick :=main_fm.p_other;
end
else if trim(menu_collect[i].Menu_mc) = 'undo' then
begin
assign_menu[i].Caption :='undo';
assign_menu[i].OnClick :=main_fm.p_undo;
end
else if trim(menu_collect[i].Menu_mc) = 'cut' then
begin
assign_menu[i].Caption :='cut';
assign_menu[i].OnClick :=main_fm.p_cut;
end
else if trim(menu_collect[i].Menu_mc) = 'copy' then
begin
assign_menu[i].Caption :='copy';
assign_menu[i].OnClick :=main_fm.p_copy;
end
else if trim(menu_collect[i].Menu_mc) = 'find' then
begin
assign_menu[i].Caption :='find';
assign_menu[i].OnClick := main_fm.p_find;
end
else if trim(menu_collect[i].Menu_mc) = 'findinfile' then
begin
assign_menu[i].Caption :='findinfile';
assign_menu[i].OnClick := main_fm.p_findinfile;
end
else if trim(menu_collect[i].Menu_mc) = 'browers' then
begin
assign_menu[i].Caption :='browers';
assign_menu[i].OnClick := main_fm.p_browers;
end
else if trim(menu_collect[i].Menu_mc) = 'tooler' then
begin
assign_menu[i].Caption :='tooler';
assign_menu[i].OnClick := main_fm.p_tooler;
end
else if trim(menu_collect[i].Menu_mc) = 'options' then
begin
assign_menu[i].Caption :='options';
assign_menu[i].OnClick :=main_fm.p_options;
end
else if trim(menu_collect[i].Menu_mc) = 'viewsourse' then
begin
assign_menu[i].Caption :='viewsourse';
assign_menu[i].OnClick :=main_fm.p_viewsourse;
end
else if trim(menu_collect[i].Menu_mc) = 'run' then
begin
assign_menu[i].Caption :='run';
assign_menu[i].OnClick :=main_fm.p_run;
end
else if trim(menu_collect[i].Menu_mc) = 'stepover' then
begin
assign_menu[i].Caption :='stepover';
assign_menu[i].OnClick :=main_fm.p_stepover;
end
else if trim(menu_collect[i].Menu_mc) = 'staseinto' then
begin
assign_menu[i].Caption :='staseinto';
assign_menu[i].OnClick :=main_fm.p_staseinto;
end
else if trim(menu_collect[i].Menu_mc) = 'new1' then
begin
assign_menu[i].Caption :='new1';
assign_menu[i].OnClick :=main_fm.p_new1;
end
else if trim(menu_collect[i].Menu_mc) = 'old' then
begin
assign_menu[i].Caption :='old';
assign_menu[i].OnClick :=main_fm.p_old;
end
else if trim(menu_collect[i].Menu_mc) = 'sql' then
begin
assign_menu[i].Caption :='sql';
assign_menu[i].OnClick := main_fm.p_sql;
end
else if trim(menu_collect[i].Menu_mc) = 'insert' then
begin
assign_menu[i].Caption :='insert';
assign_menu[i].OnClick := main_fm.p_insert;
end
else if trim(menu_collect[i].Menu_mc) = 'delete' then
begin
assign_menu[i].Caption :='delete';
assign_menu[i].OnClick := main_fm.p_delete;
end
else if trim(menu_collect[i].Menu_mc) = 'cb' then
begin
assign_menu[i].Caption :='cb';
assign_menu[i].OnClick := main_fm.p_cb;
end
else if trim(menu_collect[i].Menu_mc) = 'delphi' then
begin
assign_menu[i].Caption :='delphi';
assign_menu[i].OnClick := main_fm.p_delphi;
end
else if trim(menu_collect[i].Menu_mc) = 'vc' then
begin
assign_menu[i].Caption :='vc';
assign_menu[i].OnClick := main_fm.p_vc;
end
else if trim(menu_collect[i].Menu_mc) = 'pb' then
begin
assign_menu[i].Caption :='pb';
assign_menu[i].OnClick := main_fm.p_pb;
end
else if trim(menu_collect[i].Menu_mc) = 'file' then
assign_menu[i].Caption :='file'
else if trim(menu_collect[i].Menu_mc) = 'new' then
assign_menu[i].Caption :='new'
else if trim(menu_collect[i].Menu_mc) = 'edit' then
assign_menu[i].Caption :='edit'
else if trim(menu_collect[i].Menu_mc) = 'serch' then
assign_menu[i].Caption := 'serch'
else if trim(menu_collect[i].Menu_mc) = trim('view') then
assign_menu[i].Caption := 'veiw'
else if trim(menu_collect[i].Menu_mc) = 'project' then
assign_menu[i].Caption := 'project'
else if trim(menu_collect[i].Menu_mc) = 'run' then
assign_menu[i].Caption := 'run'
else if trim(menu_collect[i].Menu_mc) = 'compont' then
assign_menu[i].Caption := 'compont'
else if trim(menu_collect[i].Menu_mc) = 'database' then
assign_menu[i].Caption := 'database'
else if trim(menu_collect[i].Menu_mc) = 'tools' then
assign_menu[i].Caption := 'tools';
i:= i + 1;
end;
end;procedure get_mani_menu(var menu_collect:array of menus_p);
var
i :integer;
begin
i :=0;
Query_menu := TQuery.Create(application);
with query_menu do
begin
DatabaseName := dm.db_menu.DatabaseName;
SQL.Clear;
SQL.Add('SELECT menu_no,menu_name FROM mis_menu');
Prepare;
Query_menu.Open;
if RecordCount < 1 then //没有记录
exit; while not Eof do
begin
menu_collect[i] :=new(menus_p);
menu_collect[i].menu_no :=FieldByName('menu_no').AsString;
menu_collect[i].Menu_mc:=fieldbyName('menu_name').AsString;
menu_collect[i].sf_privew :=0;
Next;
i := i +1; //数组也加一
end;
end;
end;
end.
你这招我行不通呀大家再帮帮