在unit里有一个权限函数:
function popedom(url: string): Boolean;
var 
  ADOQuery1:TADOQuery;
begin
  ADOQuery1:=TADOQuery.Create(Application.Owner);
  ADOQuery1.Connection:=FormLogin.ADOConnection1;
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select * from ...');
    Open;
    if RecordCount>0 then
    begin
      result:=true;
    end
    else
    begin
      showmessage('对不起,你没有使用此功能的权限');
      result:=false;
    end;
  end;
end;在创建时判断:
    if popedom('FormXsdAdd')=true then
    begin
    FormXsdAdd := TFormXsdAdd.Create(Self);
    FormXsdAdd.ShowModal;
    end;
这样固然效果不错,但如果很多地方都要创建这个窗口,那要判断的地方就多了,以后维护也不方便。被创建的窗口里写:
procedure TFormXsdAdd.FormCreate(Sender: TObject);
begin  
  if not popedom('FormXsdAdd') then
    PostMessage(Handle, WM_CLOSE, 0, 0);
end;结果是窗口虽然没显示,但窗口闪了一下,所以效果不是很好。有没更好的办法让窗口不显示?

解决方案 »

  1.   

    把你这个窗口放在 Available forms 里边试试
      

  2.   

    设置一个布尔值,登录或启动时根据用户权限赋值True或False,再根据这个布尔值来决定是否显示
      

  3.   

    var b: boolean,也就是先初始这个boolean值,b随情况而改变
      

  4.   

    不用每次都创建吧.把窗口放在 Available forms 里边试试定义一个全局变量 bAllow : boolean;在允许的地方 bAllow := True;if bAllow then
      form1.showmodal
      

  5.   

    一般是根据权限直接控制菜单或按钮,有权限enabled=true
    无权限时enabled=false,点都不能点,此过程在进入界面时就一次处理完成.
      

  6.   

    本帖最后由 liangpei2008 于 2011-03-23 20:58:46 编辑