菜单显示问题 ( 积分: 50 )

  • 主题发起人 主题发起人 专注
  • 开始时间 开始时间

专注

Unregistered / Unconfirmed
GUEST, unregistred user!
我的思路是这样的,菜单权限是动态设置的,即先从数据库中取出数据,如果存在刚Visable为TRUE.否则为FALSE.现在的问题是所有的返回值是TRUE.但是主菜单不显示.
SetMenuVisib(MainMenu1, @P_MenuItem)
//设置用户权限
 
我的思路是这样的,菜单权限是动态设置的,即先从数据库中取出数据,如果存在刚Visable为TRUE.否则为FALSE.现在的问题是所有的返回值是TRUE.但是主菜单不显示.
SetMenuVisib(MainMenu1, @P_MenuItem)
//设置用户权限
 
我的这个过程是公用单元.,其他窗口都可以操作,就是这个窗口不行,帮我想一下,是不是哪个什么设置的点得不对?
散分啦.这个好挣,划一个圈而已...............
 
把代码贴出来先
 
procedure SetMenuVisib(Menus: TMainMenu
PMenuItemList: TPMenuItemList);
var
i, j: Integer;
begin
//菜单权限处理
for i := 0 to Menus.Items.Count - 1 do
begin
Menus.Items.Visible := MenuItenIsUsing(Menus.Items.Name,
PMenuItemList);
if Menus.Items.Visible then
for j := 0 to Menus.Items.Count - 1 do
Menus.Items.Items[j].Visible :=
MenuItenIsUsing(Menus.Items.Items[j].Name, PMenuItemList);
end;
end;

//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

function MenuItenIsUsing(MenuItemCode: string;
PMenuItemList: TPMenuItemList): Boolean;
var
i: Integer;
begin
Result := false;
for i := 0 to High(PMenuItemList^) do
if PMenuItemList^.Code = MenuItemCode then
begin
// if MenuItemCode='voucher' then ShowMessage('');
Result := True;
Exit;
end;
end;

//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

function Get_MenuItemList(UserID: string): TMenuItemList;
begin
Setlength(Result, 0);
with TQuery.Create(nil) do
try
try
DatabaseName := Session.Databases[0].DatabaseName;
SQL.Text := 'SELECT A.CODE,A.NAME,B.POSTID FROM MENU A,POSTMENU B ' +
' WHERE B.MID = A.MID AND ' +
' B.POSTID IN (SELECT POSTID FROM USERPOST ' +
' WHERE USERID = ''' + UserID + ''' )' +
' ORDER BY POSTID ';
Open;

if not IsEmpty then
while not EOF do
begin
Setlength(Result, Length(Result) + 1);
Result[High(Result)].MenuItemName := Fields[1].AsString;
Result[High(Result)].Code := Fields[0].AsString;
Result[High(Result)].Post := Fields[2].AsString;
Next;
end;
except
;
end;
finally
Free;
end;
end;
 
你因该首先确定从数据库读出的数据正确,
然后去检查是否为设置问题。
当然你的SetMenuVisib(MainMenu1, @P_MenuItem)一定要经得起考验。
 
是对的,我都跟踪了,取出来的数据都是对的,而且我在另几个窗口中也是同样地的代码实现,那边可以操作的,是不是我这个窗口的哪些属性设置有误?
 
主菜单或一级菜单Menus.Items[0]在数据表中缺项?
找不到
 
可是我的MainMenu1.Items[0].Visable 的值也为True呀.
 
后退
顶部