现在在做系统权限,遇到如下问题:
用户USER对窗体frm_a的按钮a有权限,在 数据库中以char的形式存储窗体Name,那么在用户进入这个窗体的时候如何将这个窗体创建出来呢?

解决方案 »

  1.   

    个人觉得你在数据库里不必存储窗体名称,而是存储按钮名称就可以了。
    如果这个用户有这个按钮名称,那么以这个用户登录的,这个按钮就是可以用的状态,反之这个按钮就是不可以用的状态。局限就在于一个按钮只对应一个窗体的弹出。像你所说的呢,也可以,就是在按钮的click里,先声明一个要创建的窗体的类,再去数据库里取窗体name,如果有就创建,没有就不创建了!
      

  2.   

    if not Assigned(frm_a) then frm_a:=Tfrm_a.Create(application);
                                    frm_a.showmodal;
      

  3.   

    把要创建的窗体名读出来,
    procedure showform(formclass: tformclass;Fm_caption:string);//打开窗口设置标题过程
    begin
    With FormClass.Create(application) do
      try
        if Fm_caption<>'' then
        caption:=Fm_caption;
        ShowModal;
      finally
        Free;
      end;
    end;
      

  4.   

    把所有的窗体都写成了这形势:
    TmyForm = class of TformN;
      TFormN = class(TForm)然后在腰调用的窗体里面的Create加上
      RegisterClasses([TFormN]);然后
       var a:Tform;
    begin
    a := Tmyform(GetClass('TFormN')).Create(nil);
    a.Show;
    end;嘿嘿,居然成功了!太好了,谢谢大家的捧场!发分了!
      

  5.   

    ha ha ,hao a !我来接分
      

  6.   

    tiexinliu(铁心刘) 
    你的说方法还是只能显示那一个窗体
    打个比方说按钮a的Click事件中,利用一个参数FormName来动态创建FormName所指定的窗体
    如:如果FormName=‘TFormHello’,那么就创建TFormHello的实例窗体并显示
    如果FormName=‘TFormBye’,那么就创建TFormBye的实例窗体并显示ball_24的意思是这样的
    如何做?
      

  7.   

    tiexinliu(铁心刘) 的答案已经非常好,但应先注册,后生成,
    所以RegisterClasses([TFormN])最好放到initialization段。
      

  8.   

    tiexinliu(铁心刘)
    窗体的引用直接使用uses语句不可以了吗
    为什么要注册后使用,同时使用注册还要使用Uses语句吗
      

  9.   

    var
      form:Tform;if formName='TformHello' then from:=TFormHello.create(application)
    else if formname='TformBye' then form:=Tformbye.create(application)
    else .....