如何控制菜单显示?
窗体中有菜单MainMenu1,菜单名称分别是n01,n02,n03......
数据库中有对应的字段,均为bit型。
字段: n01 n02 n03
数值: 1 0 1
如何根据数据库的数值,动态控制菜单的显示?
比如数值为1,对应的菜单Visible:=true,反之则为false。
[解决办法]
确实是的
procedure TForm1.Button1Click(Sender: TObject);
var
//Fname:string ;
i:Integer ;//,j:Integer ;
a:TMenuItem;
begin
ADOQuery1.Close ;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from xtjb where user_id=1301');
ADOQuery1.Open;
for i := 0 to ADOQuery1.Fields.Count - 1 do
begin
//if ADOQuery1.Fields[i].AsBoolean then
//begin
//Fname:=adoQuery1.fields[i].fieldname;
// MainMenu1.Items.Create(); 这句注视掉
a:=MainMenu1.Items.Find(ADOQuery1.fields[i].fieldname);
if a<>nil then
a.visible := ADOQuery1.Fields[i].AsBoolean;
//end;
end ;
end;
[解决办法]
procedure TForm1.FindItem(T: TMenuItem);
var
i: Integer;
F: TField;
begin
for i := 0 to T.Count - 1 do
begin
F := ADOQuery1.FindField(T.Items[i].Name);
if Assigned(F) then
begin
T.Items[i].Visible := F.AsBoolean;
end;
if T.Count > 0 then FindItem(T.Items[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from xtjb where user_id=1301');
ADOQuery1.Open;
FindItem(MainMenu1.Items);
end;