Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228980
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2008-11-18 14:50:22



1,用窗体名称作为传入参数,创建窗体,怎么避免重复创建?  
  如下面代码中注释调的部分;使用not   assigned()判断返回的结果每次都是false  
  也就是说,assigned判断结果一直为true。  
  function   JaxCreateForm(const   AFormName:string):boolean;  
  var  
      AForm:   TForm;  
      AFormClass:   TFormClass;  
  begin  
      try  
          if   FindClass(AFormName)   <>   nil   then  
          begin  
              try  
                  AFormClass   :=   TFormClass(FindClass(AFormName));  
  //             if   not   assigned(TForm(copy(AFormName,2,Length(AFormName)-1)))   then  
                  AForm   :=   AFormClass.Create(nil);  
                  AForm.Show;             //mdi类型form不能使用showmodal释放窗体;  
              except  
                  AForm.Free;  
                  AForm   :=   nil;  
              end;  
          end  
          else   begin  
              showmessage(format('创建窗体"%s"出错!',[AFormName]));  
          end;  
      except  
      end;  
  end;

2,动态创建的菜单项,怎么将其onclick事件与全局tnotifyevent类型的函数关联起来。  
  with   tbutton.create(nil)   do  
  begin  
      parent   :=   self;  
      caption   :=   '';  
      onclick   :=   ?.  
  end;

这个   窗口是不是自动创建的?

Q:   1,用窗体名称作为传入参数,创建窗体,怎么避免重复创建?  
   
  A:   看实例:  
   
  procedure   TActionsModule.OpenForm(FormClass:   TFormClass;   var   fm;  
      AOwner:   TComponent);  
  var  
      Idx:   Integer;  
      Child:   TForm;  
  begin  
      for   Idx   :=   0   to   Pred(Screen.FormCount)   do  
          if   Screen.Forms[Idx].ClassType   =   FormClass   then  
          begin  
                  Child   :=   Screen.Forms[Idx];  
                  if   Child.WindowState   =   wsMinimized   then  
                        ShowWindow(Child.handle,SW_SHOWNORMAL)  
                  else  
                        ShowWindow(Child.handle,SW_SHOWNA);  
                  if   (not   Child.Visible)   then   Child.Visible:=True;  
                  Child.BringToFront;  
                  Child.Setfocus;  
                  TForm(fm):=Child;  
                  exit;  
          end;  
      Child   :=   TForm(FormClass.NewInstance);  
      TForm(fm):=   Child;  
      Child.Create(AOwner);  
  end;  
   
  OpenForm(TLogInformationForm,   LogInformationForm,   Application.MainForm);  
   
  Q:,动态创建的菜单项,怎么将其onclick事件与全局tnotifyevent类型的函数关联起来。  
   
  A:   看实例  
   
  procedure   TMainForm.ButtonOnClick(Sender:   TObject);  
  begin  
      if   Sender   is   TButton   then  
          Showmessage((Sender   as   TButton).Caption);  
  end;  
   
  with   tbutton.create(nil)   do  
  begin  
      parent   :=   self;  
      caption   :=   '';  
      onclick   :=   ButtonOnClick  
  end  
   
 

Q:,动态创建的菜单项,怎么将其onclick事件与全局tnotifyevent类型的函数关联起来。  
   
  with   tbutton.create(nil)   do  
   
  ----------------------------  
   
  你的问题是菜单项,   而你的代码是TBUTTON。呵呵。   没有关系,菜单项也是一样的

1,看到了老冯的实例,不过我的创建方式和你有点不同;现在已经自己解决了;  
  将代码AForm:=   AForm.create(nil);改成..create(Application);  
  然后用Application.findcomponent('AFormName');就可以了。  
   
  2,onclick   :=   ButtonOnClick;  
  中如果buttononclick是在同一个类下是可以;但,相反,如果buttononclick是一个全局定义函数,不属于任何类下的话,好像不行。  
  再次请教。

对不起,   刚才一直无法上来。  
   
  procedure   ButtonOnClick(Sender:   TObject);  
  begin  
      Showmessage('Pointer,   Pointer   ,   I   Hate   You!');  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      with   TButton.Create(nil)   do  
      begin  
          Parent   :=   Self;  
          Visible   :=   True;  
          @OnClick   :=   @ButtonOnClick;  
      end;  
  end;  
 



[新闻]Google iPhone语音识别程序已经上线
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
阅读(1455) | 评论(0) | 转发(0) |
0

上一篇:fr3显示问题

下一篇:fastreport3 问题~~

给主人留下些什么吧!~~