一、让窗口总是在最前面
Form的FormStyle属性设置为fsStayOnTop值。
二、动态调用窗体Form
在缺省情况下,由File/NewForm生成添加入项目文件中的窗体都具有”AutoCreate”(自动创建)的特性。即只要程序运行,该窗体就存在于内存中了,不管当前它是否被调用。具有这种特性的窗体一般适用于窗体属性比较固定、经常被调用的情况。其优点是速度快,缺点是占用内存。在实际程序设计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程序中调用一下,完成其功能就行了,无需常驻内存。这时可以通过选择Project/Options/Forms,将”Auto–Createforms”栏中相应的窗体,如Form1,用”>”键移动到”Availableforms”栏中,并在程序需调用该窗体处,加入下列语句:
1 2 3 |
TForm1 *myform=new TForm1(this); myform->ShowModal(); delete myform; |
窗体Form1仅是在需要调用时才调入内存,调用完成后,即用delete清除出内存。这样可减少程序对内存资源的占用。
三、遍历窗体控件的方法
要访问或修改窗体上的控件,方法很简单,以TEdit为例子:
1 2 |
Edit1->Text=""; Edit2->Text=""; |
但如果窗体上有十来个像Edit1这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦!所以有必要掌握遍历窗体控件的方法。在介绍该方法之前,让我们先了解一下窗体Form的Components和Controls属性。
ComponentCount Int 目前Form上各类 控件的总数
Components TCompont* 目前Form上指向 所有控件的数组
目前Form上指向 所有控件的数组 ControlCount
Int
目前Form上某一子 区域上各类控件的总数 Controls TControl*
目前Form上指向某一子 区域上所有控件的数组
Form1 的ComponentCount=6, 而Panel1 的ControlCount=4.,
下面这段代码完成了对Panel1上所有TEdit控件的遍历初始化。读者稍加修改,即可对其它控件进行遍历。这里有一个小技巧,我们把需要进行初始化的控件放置在了一Panel1上,与不需要初始化的控件区分开来,这样便于编程。
1 2 3 4 5 6 7 8 9 |
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.在窗口定义中,加入HRGNhWndRgn;
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 事件必须用下面语句释放空间:
1 2 3 4 |
void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } |