Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17760586
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-31 09:23:57

一、让窗口总是在最前面
        Form 的FormStyle属性设置为fsStayOnTop值。

    二、 动态调用窗体Form
        在缺省情况下, 由File/New Form生成添加入项目文件中的 窗体都具有\"Auto Create\"(自动创建)的特性。即只要程序运行,该窗体就存在于 内存中了,不管当前它是否被调用。具有这种特性的窗体一般适用于窗体属性比较 固定、经常被调用的情况。其优点是速度快,缺点是占用内存。在实际程序设 计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程 序中调用一下,完成其功能就行了,无需常驻内存。这时可以通过选择Project/Options/Forms,将\"Auto--Create forms \" 栏中相应的窗体, 如Form1,用\" >\" 键移动到 \"Available forms\"栏中,并在程序需调用该窗体处,加入下列语句:

        TForm1  *myform=new TForm1(this);
        myform- >ShowModal();
        delete myform;

         窗体Form1仅是在需要调 用时才调入内存,调用完成后,即用delete清除出内存。这样可减少程序对内存资源 的占用。

    三、遍历窗体控件的方法
        要访问或修改窗体上的控件,方法很简单,以TEdit为例子:

        Edit1- >Text=\"\";
        Edit2- >Text=\"\";

       但如果窗体上有十来个像Edit1 这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦 ! 所以有必要掌握 遍 历窗 体 控 件 的 方 法。 在 介 绍 该 方 法 之   前, 让 我 们 先了 解 一 下 窗 体Form 的Components 和Controls 属 性。 参 见 表 一。

                             表 一

          属性                 类型                  说明

      ComponentCount            Int      目前Form上各类控件的总数
        Components           TCompont*   目前Form上指向所有控件的数组
       ControlCount             Int      目前Form上某一子区域上各类控件的总数
         Controls            TControl*   目前Form上指向某一子区域上所有控件的数组


          Form1的ComponentCount=6, 而Panel1的ControlCount=4.,

          其中:数组对象

        Components[0]           Panel1
        Components[1]           Label1
        Components[2]           Edit1
        Components[3]           Label2
        Components[4]           Edit2
        Components[5]           Button1

         数 组                        对 象
      Controls[0]                     Label1
      Controls[1]                     Edit1
      Controls[2]                     Label2
      Controls[3]                     Edit2


      下面这段代码完成了对Panel1上所有TEdit 控件的遍历初始化。读者稍加修改,即可对其它控件进行遍历。这里有一个小技巧, 我们把需要进行初始化的控件放置在了一Panel1上,与不需要初始化的控件区分开 来,这样便于编程。

       AnsiString namestring=\"TEdit\";
       for(int i=1;i< Panel1- > ControlCount;i++)
         {
         if(Panel1- > Controls[i]- > ClassNameIs(namestring))
           {
           TEdit *p=dynamic_cast < TEdit* > (Panel1- >Controls[i]);
           P->Text=\"\";
           }

            }

    四、不规则窗口

       1.在窗口定义中,加入HRGN hWndRgn;
       2.在TForm::OnCreate()消息函数最后,加入下面的代码:
         hWndRgn=::CreateEllipticRgn(0,0,Width,Height);
         ::SetWindowRgn(hWndRgn,TRUE);
       3.设置TForm的属性为无标题,无边框。
       4.编译连接应用程序,就可以看到一个椭圆形窗口。

    五、MDI Form

       1.Application->CreateForm(__classid(Tjjcginput), &jjcginput);

       后不用在使用显示Form的语句就可以显示出来了。

       2.form 的onclose 事件必须用下面语句释放空间:
         void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
          {
            Action = caFree;
           }

阅读(380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~