unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, DB, ADODB, Grids, DBGrids;type
TNotifyEvent = procedure (Sender:TObject) of Object;
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Q_MenuItem: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure NewForm2(Sender :TObject);
procedure NewForm3(Sender :TObject);
private
{ Private declarations }
procedure CreateMainMenu;
procedure GetMenuItemData(RootID :Integer);
procedure GetHeadItemData;
procedure CreateMenuItem(RootID :Integer);
procedure AddMenuItem(RootID,ParentID :Integer);
function FindItem(RootID,ID:Integer):TMenuItem;
public
{ Public declarations }
procedure MenuItemClickEvent(Tag :Integer);
published
{ published declarations } end;var
Form1: TForm1;
OnClick :TNotifyEvent;
implementationuses Unit2, Unit3;
procedure ExecSQL(Sender:TADOQuery; sSQL :string);
begin
with Sender do
begin
Active :=False;
SQL.Clear;
SQL.Add(sSQL);
Active :=True;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.GetMenuItemData(RootID: integer);
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=0 and RootID='''+IntToStr(RootID)+''' Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.GetHeadItemData;
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=1 Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.CreateMainMenu;
var MainMenu: TMainMenu;
MenuItem :Array of TMenuItem;
i,HeadCount :integer;
begin
MainMenu:= TMainMenu.Create(Self);
MainMenu.AutoHotkeys :=maManual;
MainMenu.AutoLineReduction :=maManual;
// Create HeadMenu
GetHeadItemData;
HeadCount :=Q_MenuItem.RecordCount;
SetLength(MenuItem,HeadCount);
for i :=0 to HeadCount-1 do
begin
MenuItem[i] :=TMenuItem.Create(Self);
MenuItem[i].Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem[i].Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem[i].ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem[i].Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem[i].Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem[i].Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem[i].Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem[i].ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
MainMenu.Items.Add(MenuItem[i]);
Q_MenuItem.Next;
end;
//Create MenuItem
for i :=0 to HeadCount-1 do
CreateMenuItem(i);end;procedure TForm1.CreateMenuItem(RootID: Integer);
var MenuItem :TMenuItem;
i,ItemCount,ParentID :integer;
begin
GetMenuItemData(RootID);
ItemCount :=Q_MenuItem.RecordCount;
for i :=0 to ItemCount-1 do
begin
ParentID :=Q_MenuItem.FieldByName('ParentID').AsInteger;
MenuItem :=TMenuItem.Create(Self);
AddMenuItem(RootID,ParentID);
Q_MenuItem.Next;
end;
end;procedure TForm1.AddMenuItem(RootID,ParentID :Integer);
var ParentItem,MenuItem :TMenuItem;
P: ^Integer;
begin
ParentItem :=FindItem(RootID,ParentID);
if ParentItem <> nil then
begin
MenuItem :=TMenuItem.Create(Self);
MenuItem.Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem.Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem.ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem.Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem.Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem.Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem.Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem.ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
P :=MethodAddress(Trim(Q_MenuItem.FieldByName('ClickEvent').AsString));
OnClick :=P^;//这里有错误该如何解决
ParentItem.Add(MenuItem);
end
else
begin end;
end;function TForm1.FindItem(RootID, ID: Integer):TMenuItem;
var j :Integer;
sSQL :string;
Query: TADOQuery;
begin
Query :=TADOQuery.Create(Self);
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
' RootID='''+IntToStr(RootID)+''' and ID='''+IntTostr(ID)+''' Order by ItemOrder ';
Query.Connection :=ADOConnection1;
ExecSQL(Query,sSQL);
Result :=nil; if Query.RecordCount=1 then
begin
for j := 0 to ComponentCount - 1 do
if Components[j] is TMenuItem then
if UpperCase(Components[j].Name)=UpperCase(Trim(Query.FieldByName('ItemName').AsString)) then
begin
Result := TMenuItem(Components[j]);
Break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.NewForm2(Sender: TObject);
begin
Form2.Show;
end;procedure TForm1.NewForm3(Sender: TObject);
begin
Form3.Show;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, DB, ADODB, Grids, DBGrids;type
TNotifyEvent = procedure (Sender:TObject) of Object;
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Q_MenuItem: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure NewForm2(Sender :TObject);
procedure NewForm3(Sender :TObject);
private
{ Private declarations }
procedure CreateMainMenu;
procedure GetMenuItemData(RootID :Integer);
procedure GetHeadItemData;
procedure CreateMenuItem(RootID :Integer);
procedure AddMenuItem(RootID,ParentID :Integer);
function FindItem(RootID,ID:Integer):TMenuItem;
public
{ Public declarations }
procedure MenuItemClickEvent(Tag :Integer);
published
{ published declarations } end;var
Form1: TForm1;
OnClick :TNotifyEvent;
implementationuses Unit2, Unit3;
procedure ExecSQL(Sender:TADOQuery; sSQL :string);
begin
with Sender do
begin
Active :=False;
SQL.Clear;
SQL.Add(sSQL);
Active :=True;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.GetMenuItemData(RootID: integer);
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=0 and RootID='''+IntToStr(RootID)+''' Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.GetHeadItemData;
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=1 Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.CreateMainMenu;
var MainMenu: TMainMenu;
MenuItem :Array of TMenuItem;
i,HeadCount :integer;
begin
MainMenu:= TMainMenu.Create(Self);
MainMenu.AutoHotkeys :=maManual;
MainMenu.AutoLineReduction :=maManual;
// Create HeadMenu
GetHeadItemData;
HeadCount :=Q_MenuItem.RecordCount;
SetLength(MenuItem,HeadCount);
for i :=0 to HeadCount-1 do
begin
MenuItem[i] :=TMenuItem.Create(Self);
MenuItem[i].Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem[i].Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem[i].ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem[i].Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem[i].Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem[i].Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem[i].Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem[i].ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
MainMenu.Items.Add(MenuItem[i]);
Q_MenuItem.Next;
end;
//Create MenuItem
for i :=0 to HeadCount-1 do
CreateMenuItem(i);end;procedure TForm1.CreateMenuItem(RootID: Integer);
var MenuItem :TMenuItem;
i,ItemCount,ParentID :integer;
begin
GetMenuItemData(RootID);
ItemCount :=Q_MenuItem.RecordCount;
for i :=0 to ItemCount-1 do
begin
ParentID :=Q_MenuItem.FieldByName('ParentID').AsInteger;
MenuItem :=TMenuItem.Create(Self);
AddMenuItem(RootID,ParentID);
Q_MenuItem.Next;
end;
end;procedure TForm1.AddMenuItem(RootID,ParentID :Integer);
var ParentItem,MenuItem :TMenuItem;
P: ^Integer;
begin
ParentItem :=FindItem(RootID,ParentID);
if ParentItem <> nil then
begin
MenuItem :=TMenuItem.Create(Self);
MenuItem.Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem.Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem.ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem.Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem.Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem.Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem.Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem.ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
P :=MethodAddress(Trim(Q_MenuItem.FieldByName('ClickEvent').AsString));
OnClick :=P^;//这里有错误该如何解决
ParentItem.Add(MenuItem);
end
else
begin end;
end;function TForm1.FindItem(RootID, ID: Integer):TMenuItem;
var j :Integer;
sSQL :string;
Query: TADOQuery;
begin
Query :=TADOQuery.Create(Self);
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
' RootID='''+IntToStr(RootID)+''' and ID='''+IntTostr(ID)+''' Order by ItemOrder ';
Query.Connection :=ADOConnection1;
ExecSQL(Query,sSQL);
Result :=nil; if Query.RecordCount=1 then
begin
for j := 0 to ComponentCount - 1 do
if Components[j] is TMenuItem then
if UpperCase(Components[j].Name)=UpperCase(Trim(Query.FieldByName('ItemName').AsString)) then
begin
Result := TMenuItem(Components[j]);
Break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.NewForm2(Sender: TObject);
begin
Form2.Show;
end;procedure TForm1.NewForm3(Sender: TObject);
begin
Form3.Show;
end;
解决方案 »
- SQLDMO做SQL数据库备份时显示进度条
- txtbox的问题?
- nf4.0 瘦身没有,什么时候有确切消息再结贴好了
- 求助!
- 怎么使得继承自CollectionBase的Items在设计时的内容持久?
- 如何更好的理解C#中的“方法”?
- C++ api转为C#函数
- 如何在winform程序中获取局域网内所有sql Server服务器的名称列表?
- 本人刚转向C#,对这一句“bnCtoF.Click += new EventHandler(this.bnCtoF_Click);”不理解,请高手讲讲。
- 打印问题
- axWebBrowser访问多框架页面问题
- XenoCode 问题:exe + dll, framework 2.0,处理完后不能运行
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, DB, ADODB, Grids, DBGrids;type
TNotifyEvent = procedure (Sender:TObject) of Object;
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Q_MenuItem: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure NewForm2(Sender :TObject);
procedure NewForm3(Sender :TObject);
private
{ Private declarations }
procedure CreateMainMenu;
procedure GetMenuItemData(RootID :Integer);
procedure GetHeadItemData;
procedure CreateMenuItem(RootID :Integer);
procedure AddMenuItem(RootID,ParentID :Integer);
function FindItem(RootID,ID:Integer):TMenuItem;
public
{ Public declarations }
procedure MenuItemClickEvent(Tag :Integer);
published
{ published declarations } end;var
Form1: TForm1;
OnClick :TNotifyEvent;
implementationuses Unit2, Unit3;
procedure ExecSQL(Sender:TADOQuery; sSQL :string);
begin
with Sender do
begin
Active :=False;
SQL.Clear;
SQL.Add(sSQL);
Active :=True;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.GetMenuItemData(RootID: integer);
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=0 and RootID='''+IntToStr(RootID)+''' Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.GetHeadItemData;
var sSQL :string;
begin
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
'IsRoot=1 Order by ItemOrder ';
ExecSQL(Form1.Q_MenuItem,sSQL);
end;procedure TForm1.CreateMainMenu;
var MainMenu: TMainMenu;
MenuItem :Array of TMenuItem;
i,HeadCount :integer;
begin
MainMenu:= TMainMenu.Create(Self);
MainMenu.AutoHotkeys :=maManual;
MainMenu.AutoLineReduction :=maManual;
// Create HeadMenu
GetHeadItemData;
HeadCount :=Q_MenuItem.RecordCount;
SetLength(MenuItem,HeadCount);
for i :=0 to HeadCount-1 do
begin
MenuItem[i] :=TMenuItem.Create(Self);
MenuItem[i].Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem[i].Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem[i].ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem[i].Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem[i].Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem[i].Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem[i].Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem[i].ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
MainMenu.Items.Add(MenuItem[i]);
Q_MenuItem.Next;
end;
//Create MenuItem
for i :=0 to HeadCount-1 do
CreateMenuItem(i);end;procedure TForm1.CreateMenuItem(RootID: Integer);
var MenuItem :TMenuItem;
i,ItemCount,ParentID :integer;
begin
GetMenuItemData(RootID);
ItemCount :=Q_MenuItem.RecordCount;
for i :=0 to ItemCount-1 do
begin
ParentID :=Q_MenuItem.FieldByName('ParentID').AsInteger;
MenuItem :=TMenuItem.Create(Self);
AddMenuItem(RootID,ParentID);
Q_MenuItem.Next;
end;
end;procedure TForm1.AddMenuItem(RootID,ParentID :Integer);
var ParentItem,MenuItem :TMenuItem;
P: ^Integer;
begin
ParentItem :=FindItem(RootID,ParentID);
if ParentItem <> nil then
begin
MenuItem :=TMenuItem.Create(Self);
MenuItem.Name := Trim(Q_MenuItem.FieldByName('ItemName').AsString);
MenuItem.Caption := Trim(Q_MenuItem.FieldByName('ItemCaption').AsString);
MenuItem.ImageIndex :=Q_MenuItem.FieldByName('ImageIndex').AsInteger;
MenuItem.Tag:=StrToInt(Trim(Q_MenuItem.FieldByName('Tag').AsString));
MenuItem.Checked :=StrToBool(Q_MenuItem.FieldByName('IsCheck').AsString);
MenuItem.Enabled :=StrToBool(Q_MenuItem.FieldByName('IsEnable').AsString);
MenuItem.Visible :=StrToBool(Q_MenuItem.FieldByName('IsVisible').AsString);
MenuItem.ShortCut :=TextToShortCut(Trim(Q_MenuItem.FieldByName('IsVisible').AsString));
P :=MethodAddress(Trim(Q_MenuItem.FieldByName('ClickEvent').AsString));
OnClick :=P^;//这里有错误该如何解决
ParentItem.Add(MenuItem);
end
else
begin end;
end;function TForm1.FindItem(RootID, ID: Integer):TMenuItem;
var j :Integer;
sSQL :string;
Query: TADOQuery;
begin
Query :=TADOQuery.Create(Self);
sSQL :='Select ID,ItemName,ItemCaption, ItemOrder,ImageIndex,ParentID,RootID,Tag,IsCheck,IsEnable,IsVisible,ShortCut,ClickEvent From SR_SYS_MAINMENU Where '+
' RootID='''+IntToStr(RootID)+''' and ID='''+IntTostr(ID)+''' Order by ItemOrder ';
Query.Connection :=ADOConnection1;
ExecSQL(Query,sSQL);
Result :=nil; if Query.RecordCount=1 then
begin
for j := 0 to ComponentCount - 1 do
if Components[j] is TMenuItem then
if UpperCase(Components[j].Name)=UpperCase(Trim(Query.FieldByName('ItemName').AsString)) then
begin
Result := TMenuItem(Components[j]);
Break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMainMenu;
end;procedure TForm1.NewForm2(Sender: TObject);
begin
Form2.Show;
end;procedure TForm1.NewForm3(Sender: TObject);
begin
Form3.Show;
end;