TForm的一些技巧 (C++ Builder)

来源(电脑教程网)

From: http://pc.sheup.com/pc/pc13325.htm

TForm的一些技巧 (C++ Builder)

发布: computer 分类: C++ Builder 发布日期: 2005.06.20

一、让窗口总是在最前面
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;
}


Link: http://www.asm32.net/article_details.aspx?id=1902


浏览次数 382 发布时间 2006-08-25 06:21:13 从属分类 C/C++ 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1