C++ builder 中关于窗体的一些操作
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
用c++ builder 创建具有吸附效果的窗口在许多程序中,窗口可以被拖放到另一个窗口中,并溶合为一体,例如c++ builder中的Class Explorer与其它窗口就是典型一例,在c++ builder中,这种特性被称为"窗口吸附"。
在bcb中的许多组件都具有与"吸附"功能相关的属性,例如:DockSite属性、UseDockManage属性,以及DragKing属性,它的属性可以设置为dkDock。
如果将这些属性值简单设置一下,窗口将自动具有吸附功能,不过这样的吸附功能非常死板,没有实用价值。
下面笔者就给大家介绍一下如何在c++ builder中实现真正的窗口吸附效果。
一、设计一个主窗口新建一工程,主窗体命名为MainForm,单元文件命名为Main。
添加一个TMainMenu 命名为MainMenu1,双击该主菜单添加两个子菜单分别为"红色窗口"和"蓝色窗口",这两个子菜单分别用来显示不同颜色的窗口。
接着在窗口的最右端添加一个宽度为0,高度为整个窗口高的Panel组件并命名为DockPanel,建立Panel组件是因为被"吸附"的窗口必须要有一个"吸附区",这种吸附区可以是窗口,也可以是窗口化组件,如Panel。
再在Panel右边添加一个Splliter组件,命名为VSplliter宽度设为4,高度为窗体的高度。
建立Splliter组件是为了有效地建立被吸附窗口的间隔区,并且可以方便用户调整被吸附窗口所占据的宽度。
(如图1所示)二、设计"被吸附"窗口作为主窗口的设计窗体,除了一般的属性设置外,有关Dock的属性均无需修改,只要将"被吸附"窗体的属性进行修改就可以了。
选择"File | New Form"命令,建立一个新窗体,将新窗体命令为DockWindow和吸附功能相关的属性修改如下:属性值DockSite TrueDockKind dkDockDockMode dmAutomatic在窗体中放置一个Memo组件,并将其Align属性修改为alClient,使其充满整个窗口区域。
C++Builder中不规则窗体的快速显示不规则窗体的应用增加软件的吸引力传统的WINDOWS应用软件界面给人的感觉总是千篇一律的方方正正的窗体,看的时间长了难免会有些厌烦,总是希望能见到些不同一般的软件界面。
如今,相当数量的商业软件在提供优秀而强大的功能的同时,软件的界面也是做得越来越漂亮,比如《超级解霸2000》中的界面插件,使用过的人一定对其华丽的外观充满好感。
作为一个编程爱好者,如果自己写出的软件也拥有类似的界面,也许会吸引更多目光的注视。
那么,我们现在就开始动手制作自己的漂亮界面吧。
技术内幕要想在自己的程序中加入不规则窗体的应用,你首先要熟悉几个WINDOWS API函数的使用,它们是:椭圆形(或圆形)区域创建函数CreateEllipticRgn 、多边形区域创建函数CreatePolygonRgn、矩形区域创建函数CreateRectRgn、带圆角的矩形区域创建函数CreateRoundRectRgn。
你可以用这些函数创建不同类型的窗体区域,也可以用WINDOWS API 函数CombineRgn将几个简单区域组合成一个复杂区域。
下一步要做的就是将已经创建好的区域显示在屏幕上,同样也是使用WINDOWS API 函数来实现,这次用到的是SetWindowRgn函数。
WINDOWS API 函数在Borland C++ Builder 头文件中均已定义,在应用程序中使用这些API函数就象使用C++的普通库函数一样。
准备工作为你的程序准备一幅背景图片,推荐方法是:在PhotoShop中打开图片后使用磁性套索工具选取你所需要的图象轮廓--复制--新建文件(背景使用白色)--粘贴--另存文件(PSD 文件)--用ACDSee等看图软件将保存的PSD文件转换为BMP文件face.bmp备用。
如下图:程序中引用图片打开Borland C++ Builder,在窗体上放置一个Image控件Image1,其Picture暂为空;在窗体上放置一个Popup菜单,编辑菜单项增加"Close"项(添加程序代码使得激活弹出菜单时即可关闭应用程序)。
第4讲窗体设计1 基本概念C++ Builder应用程序的界面主要是通过窗体来设计的。
窗体是C++ Builder构造程序的基础,是其它VCL组件的容器。
在一定意义上,可以认为:程序在运行时的窗体就是窗口。
PS:在Windows编程中,窗体和窗口是两个不同的概念。
窗体只是窗口的一个子集,按钮、菜单、单选框等都是一个窗口。
Windows系统可以识别窗口,并为窗口的操作调用函数。
当系统有事件发生,通知消息会发往相应的窗口,由窗口做出相应的响应。
也就是说,系统的每个窗口均有相应的函数来处理窗口的所有事件。
PS:在Windows系统中,有一个内核对象包含着每个应用程序所建立的窗口的列表,并赋给每个窗口一个唯一的值,这个值称为窗口的句柄(Handle)。
大部分应用程序都是通过窗体上的文字、图形图像、选择按钮以及菜单、工具条等控件和用户进行交互的。
目前,随着多媒体和因特网的发展,窗体也顺应这种趋势,较以往的窗体有了一些改变。
窗体设计器是C++ Builder最实用、功能最强大的特征之一,它也是C++ Builder可视化开发环境的表现。
使用窗体设计器,可以简单便捷地创建几乎所有的交互界面。
2 窗体的常用属性在C++ Builder中,窗体是从TForm类继承的子类的对象,TForm类是VCL中的标准窗体类,它代表了一个空的窗体。
TForm类有下列常用的属性(不要强制记忆,用熟了自然会记住。
现在记不住怎么办?查帮助。
):●AlphaBlend属性该属性用来设置窗体是否以半透明的方式来显示。
●AlphaBlendValue属性该属性指定了窗体以半透明方式显示时的透明度。
●BorderIcons属性该属性指定了窗体是否具有最小化、最大化、关闭等系统按钮。
●BorderStyle属性该属性指定了窗体边界的特性,如是否为可调整大小等。
●Caption属性该属性指定了窗体的标题。
我们在第一讲中已经使用到了此属性。
●ClientHeight属性该属性用于设置窗体客户区的高度,单位为像素。
C++ Builder 2010 实例一、介绍C++ Builder 2010是一款强大的集成开发环境(IDE),能够帮助开发者快速、高效地构建各种应用程序。
它结合了可视化开发工具和强大的C++编译器,为开发者提供了丰富的组件库和丰富的功能,使得开发过程更加简单高效。
在本文中,我们将通过具体实例来展示C++ Builder 2010的强大之处,帮助读者更好地理解和运用这一工具。
二、实例展示1. 创建新项目我们打开C++ Builder 2010并选择“File”->“New”->“VCL Forms Application”来创建一个新项目。
在弹出的对话框中,填写项目的名称,并点击“OK”来创建新项目。
2. 添加组件在新创建的项目中,我们可以通过拖放的方式,向窗体中添加各种组件。
我们可以添加按钮、标签、输入框等常见的控件,并根据需要设置它们的属性。
这样,我们就可以快速构建出一个基本的界面。
3. 编写代码在界面构建完成后,我们可以通过双击控件或者点击“事件”页签来添加相应的事件处理代码。
我们可以在按钮的单击事件中编写代码,实现按钮点击后的相应操作。
这里,我们可以展示一些常见的功能,比如文件操作、数据处理等。
4. 编译运行完成界面设计和代码编写后,我们可以点击“Run”按钮来编译并运行项目。
这样就可以看到我们所创建的应用程序在界面上的实际效果,以及代码功能的实现情况。
三、总结与回顾通过以上实例的展示,我们可以看到C++ Builder 2010的强大之处。
它提供了丰富的组件库和可视化开发工具,使得界面构建变得非常简单;搭配强大的C++编译器,开发者可以很方便地编写出功能丰富的代码。
C++ Builder 2010不仅适用于传统的桌面应用程序开发,还支持移动应用程序的开发,为开发者提供了更广阔的应用领域。
个人观点作为一款集成开发环境,C++ Builder 2010的强大之处在于其简洁高效的开发方式。
C++builder中关于窗体的一些操作C++ builder 中关于窗体的一些操作(总在最前,遍历控件...)一、让窗口总是在最前面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 属性。
ShowModal时,程序焦点固定在模式窗口中,不能转移,只有设置了ModalResult之后,模式窗口关闭,返回调用窗口Show就没有这个限制了orm1.showmodal属性if form1.showmodal:=mrok then这句话什么意思?提问者:Baigle一下 - 二级最佳答案这个问题说来话长,且听我慢慢道来。
首先,你仔细看一看,所有的命令按钮(不论是Button还是BitBtn)都有一个属性:ModalResult,该属性可以设置为mrOk 、mrCancel...等等,默认值是mrNone。
平时,ModalResult属性没什么用处,但如果命令按钮放置到用showmodal显示(模态显示,一般用于显示对话框)的窗体上时,就大大的有用了。
作用体现在:1、当设置命令按钮的ModalResult属性为mrOk、mrCancel...等时,程序运行后,单击该按钮,按钮所在的窗体会自动关闭,不用在OnClick事件中添加诸如Close;语句。
2、当设置命令按钮的ModalResult 属性为mrOk、mrCancel...等时,程序运行后,单击该按钮,按钮所在的窗体会自动关闭,同时将按钮的ModalResult属性值赋值给窗体的ModalResult属性(注意:任何窗体都有这个属性!)3、自动关闭上述窗体时,窗体的ModalResult属性又会自动传递给showmodal 方法,作为该方法的返回值。
所以说,showmodal方法的返回值总是与命令按钮的ModalResult属性相同。
楼主的代码:if form1.showmodal=mrok then如果要通俗化一下,可以写成如下等价的代码:var r:TModalResult;.............r:=form1.showmodal;if r=mrOK then ... ...很明显,根据showmodal方法的返回值,可以判断用户在对话框中,究竟是点击了OK按钮还是Cancel按钮,从而决定下一步的程序逻辑。
C++ Builder 初学问与答(一)第一部分:基础入门1.窗体1)问:Windows的编程就是在窗体的基础上实现的,C++Builder是怎样处理窗体的呢?答:窗体的一部分功能通过窗体的属性来实现,窗体的属性非常多,这里只对其中比较重要的属性进行介绍。
1.ActiveControl指定窗体上的某个组件为输入焦点。
如下面的语句将窗体上的Label1组件成为输入焦点:ActiveControl=Label1。
在同一时时刻,应用程序只能有一个输入焦点。
2.BorderIcons用来设定标题栏上出现哪些系统图标。
它是一个集合,可以设成以下几个类型:最大化按钮(biMaximize)、最小化按钮(biMinimize)、帮助按钮(biHelp)和系统菜单(biSystemMenu)。
3.Icon属性用来指定当窗体最小化时显示的图标。
4.KeyPreview属性为true时,表示击键事件发生时先传给窗体,然后再传给有输入焦点的组件上,相当于窗体截获了原本属于组件的事件。
缺省值为false,表示击键事件只送到当前有输入焦点的组件上。
5.Menu属性用来指定窗体的主菜单。
6.Visible属性用来确定窗体是否可见。
此外还有一些运行时态属性,这些属性只有在程序运行的时候才能通过编程访问。
这种属性主要有:Active属性用来确定窗体是否获得输入焦点。
ActiveMDIChild这个函数将返回当前活动的子窗体。
DropTarget属性用来指定窗体是否是拖放操作的对象。
Parent属性用来设定包含窗体的窗口控件,通常是另一个窗体。
如果窗体没有包含它的控件,那么它的Parent属性为nil。
2)问:Windows窗体有很多样式,比如对话框,弹出窗口。
如果我要控制窗体的边界样式,应该怎么办?答:属性BorderStyle可以指定窗体边界的外观和行为。
它一共有六种可能的取值。
bsDialog表示大小不可变的标准的对话框边界。
原创]C++builder组件属性详解尽管C++Builder的组件种类繁多,每种组件又都有许多不同的属性,但是在这些众多的属性中有相当一部分是大多数组件所共有的。
因此我们应当主要掌握这些共有组件。
在设计时设置属性一般是通过属性窗口来进行的。
在属性窗口设置组件属性的操作步骤如下:1)打开相应对象的属性窗口。
2)从属性列表中选定属性名称。
3)在属性窗口的右列输入或选择新的属性值。
注意:有些属性在设置值右侧有…按钮,单击该按钮会出现相应的设置对话框,设置值需要在对话框中选定。
在代码中设置组件属性的方法是:对象名称->属性名称=设置值;下面我们来介绍一些主要组件的主要属性。
窗体form的属性:1.Caption:标题。
是窗体和各种可视化控件的共有属性,用来指定窗体标题栏中的说明文字,默认与控件名相同,但程序员可以在对象监视器和代码中修改。
在代码中修改的格式为:Form->Caption = "da";// da表示程序员输入的标题。
通常,对于Windows系统中的多文档界面( MDI )应用程序,当主框架窗口中的子窗口以最大化显示的时候,应用程序的标题栏中显示的内容为“ <应用程序名> - <打开的文档名>”;当子窗口以非最大化窗口显示的时候,主框架窗口中只显示应用程序的名称,子窗口有自己的标题栏,其中显示该窗口打开的文件名。
所以,当窗体的显示方式发生了改变后,应该立即改变标题栏中的内容。
2.Name:变量名。
是窗体和所有控件的共有属性,系统给予其默认名字,但程序员可以在对象监视器修改,不要在代码中修改。
通常,应该在系统开发的设计阶段就将整个工程中所有窗体的名称确定,然后在编程阶段,根据设计文档修改窗体的Name属性。
一般情况下,不要在程序运行期间通过代码修改Name属性。
3.Enabled:可操作性。
决定了对象在运行时是否允许用户进行操作。
它是逻辑型:true表示允许用户操作并可对其操作作出响应;false表示禁止用户操作,此时对象呈灰色。
cbuilder listview控件的基本用法ListView控件是C++ Builder中常用的列表显示控件之一,它可以用于展示大量数据,并支持多列和多行显示。
ListView控件具有丰富的功能和样式设置,可以满足各种需求。
一、导入ListView控件在使用ListView控件前,首先需要添加Ctrls单元,该单元中定义了ListView控件的相关类和接口。
二、创建ListView控件1. 使用C++ Builder的可视化设计工具拖拽一个ListView控件到窗体上;2. 在代码中使用TListView类创建控件。
三、设置ListView控件的基本属性1. 设置ViewStyle:决定ListView控件的外观样式,可以设置为vsIcon、vsSmallIcon、vsList、vsReport和vsReportStyles;2. 设置ReadOnly属性:决定用户是否可以编辑ListView中的内容;3. 设置Columns属性:可以通过添加TListColumn对象来定义ListView的列;4. 设置ColumnClick属性:决定是否支持点击列标题进行排序;5. 设置GridLines属性:决定是否显示网格线;6. 设置HideSelection属性:决定是否隐藏选中项;7. 设置MultiSelect属性:决定是否可以多选;8. 设置ShowColumnHeaders属性:决定是否显示列标题栏;9. 设置ViewStyle属性:决定ListView的外观样式。
四、添加数据到ListView控件1. 使用Items属性添加行;2. 使用SubItems属性添加行的具体数据;3. 使用Columns属性控制列数和列标题;4. 使用AddItem方法、Add方法、InsertItem方法添加数据。
五、获取和处理ListView控件的事件1. OnClick事件:当用户点击ListView控件时触发;2. OnDblClick事件:当用户双击ListView控件时触发;3. OnEditing事件:当用户开始编辑ListView的某一项时触发;4. OnEdited事件:当用户完成编辑ListView的某一项时触发;5. OnColumnClick事件:当用户点击列标题时触发,可以用于对ListView控件的行进行排序;6. OnSelectItem事件:当选中ListView控件中某一项时触发;7. OnMouseDown事件:当鼠标在ListView控件上按下时触发;8. OnMouseUp事件:当鼠标在ListView控件上弹起时触发。
用C++ Builder开发一个窗口信息读取程序1前言我们经常会遇到很多界面十分漂亮的软件,我们在惊叹其作者高超水平的同时,心中也不禁会想:自己怎样才能作出这样的界面呢 ?本文就从设计一个窗口信息读取程序入手,利用 C++Builder 适合于快速开发的特点,详细的介绍了其实现过程。
有了本程序,我们可以很轻松的去读取别人程序窗口中的各种信息,从中获取我们想要的信息。
2相关知识2.1句柄要想在程序中实现对其他程序窗口信息的读取,必须先获得对该窗口的控制权,在具体编程中,我们可以通过获取目标窗口的句柄来实现对该窗口的各种操作。
那么,何为句柄呢 ?从数据类型上看句柄是一个无符号整数, Win dows用它来标识窗体或其他对象,例如字体或位图。
Win dows分配给每个窗口一个唯一的句柄,通过句柄操纵该窗口。
通俗地说,句柄就像一把扇子的柄,一扇门的把手,只有通过柄和把手,我们才能顺利地控制扇子和门。
同理,当要操纵某一个窗口时,需要先获取该窗口的句柄。
获取窗口句柄的函数很多,较为常用的一个是WindowFromPoint,其用途是返回指定坐标下窗口的句柄。
该函数有一个参数,原型如下:HWND WindowFromPoint (POINT Point // 指定的坐标 ( 位置));// 如果成功函数返回指定坐标下窗口的句柄,否则返回 NULL通过以上函数,我们可以获得目标窗口的句柄,以便我们通过句柄对窗口进行操纵,从而读取目标窗口的各种信息。
2.2消息消息(Message)就是指 Windows操作系统发给应用程序的一个通知,告诉应用程序某个事情发生了。
从数据结构的角度看,消息是一个结构体,它包含了消息的类型标识符以及其他一些附加消息。
这样,接受消息的对象就能根据这个消息的标识符知道系统中发生了什么事情,并利用其附加信息作出适当的反应。
在本程序中,将使用到的消息有:(1)WM_GETTEXTLENGTH 当程序向目标窗口发送此消息后,将得到与该目标窗口有关的文本的长度 ( 不包含空字符 ) 。
制作程序的启动窗口从File->new form新建一窗体,并设计好其外观。
窗体名为About,源文件命名为About.cpp。
在Projects->Options,将About窗体移至Available Forms从View->Project Manager中打开工程文件的源文件Project1.cpp,加入如下红色代码://---------------------------------------------------------------------------#include <vcl.h>#include <About.h>#pragma hdrstop//---------------------------------------------------------------------------USEFORM("Unit1.cpp", Form1);USEFORM("About.cpp", Form2);//---------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){DWORD lTime;try{Application->Initialize();Form2=new TForm2(Form2); //创建新窗体Form2Form2->Show(); //Form2显示Form2->Update(); //更新窗体,显示图片lTime=GetTickCount(); //Application->CreateForm(__classid(TForm1), &Form1);while((GetTickCount()-lTime)/1000<3); //显示3秒后Form2->Hide(); //窗体隐藏Form2->Free(); //从内存释放窗体Application->Run();}catch (Exception &exception){Application->ShowException(&exception);}catch (...){try{throw Exception("");}catch (Exception &exception){Application->ShowException(&exception);}}return 0;}//---------------------------------------------------------------------------以上代码在C++ builder 6和Windows XP下编译通过。
利用C Builder自定义Windows窗体
“系统菜单”
导读:本文利用C Builder自定义Windows窗体“系统菜单”,仅供参考,如果觉得很不错,欢迎点评和分享。
安徽合肥智能机械研究所张建军
---------------------------------------------------------- 在开发Windows应用程序时,软件人员希望所编制的程序具有风格独特的用户界面,为此不惜采用一些占用系统内存资源颇多的第三方OCX控件,结果导致程序运行速度变慢或者打包后的安装程序体积太大的缺点。
其实,如果我们仔细研究一下Windows提供的几百个WinAPI,就不难发现,通过直接调用API函数,发送、接收或者拦截系统消息等方法,同样可以实现在某些情况下只能依靠调用OCX才能达到的界面效果。
例如:为我们所熟知的屏幕抓图软件HyperSnap,在其强大的屏幕抓图功能背后,还具有一项比较特殊的界面效果。
通常情况下,当用鼠标点击一个Windows窗体左上角的Icon 时,所看到的系统菜单一般都是固定不变的。
HyperSnap的窗体改变了标准“系统菜单”,增加了多个新菜单项,并分别赋予它们不同的功能。
其实这种效果的实现并不复
杂,主要通过调用GetSystemMenu、AppendMenu等API函数完成。
下面,我们就以C Builder为例,讨论一下如何在自己的应用程序中实现类似HyperSnap的界面效果,并给出完整代码实例。
感谢阅读,希望能帮助您!。
C++Builder中的图像显示技巧在C++Builder中,实现一幅图像的显示非常简单,只要在Form窗体中定义一个TImage组件,设置其Picture属性,然后选择任何有效的.ico、.bmp、.emf或.wwf文件,加载进来,所选文件就显示在TImage组件中。
但这只是直接将图形显示在窗体中,毫无技巧可言,给人感觉是一种枯燥乏味。
为了使图形显示有别具一格的效果。
按下列步骤实现:1、定义一个TImage组件,把要显示的图形先加载到TImage组件中,也就是说,把图形内容从磁盘载入内存中,作为图形缓存。
2、创建一新的位图对象,其尺寸跟TImage组件中的图形一样。
3、利用画布(Canvas)的CopyRect功能(将一个画布的矩形区域拷贝到另一个画布的矩形区域),以达到动态显示位图。
下面介绍各种图形显示技巧的具体实现方法。
上拉效果图1实现原理:首先将暂存图形的第一条水平线,搬移至要显示位图的最后一条,接着再将暂存图形的前两条水平线,依次搬移至要显示位图的最后两条水平线,然后搬移前三条、前四条直到全部图形数据搬完为止。
在搬移的过程中即可看到显示的位图由下而上浮起,而达到上拉的效果(如图1)。
程序算法:void_fastcall TFor-m1::Button1Click(TObject*Sender){int i,width,height;Graphics::TBitmap*newbmp;newbmp=new Graphics::TBitmap;newbmp-〉Width=Image1-〉Width;newbmp-〉Height=Image1-〉Height;width=Image1-〉Width;height=Image1-〉Height;for(i=0;i{newbmp-〉Canvas-〉CopyRect(Rect(0,height-i,width,height),Image1-〉Canvas,Rect(0,0,width,i));Form1-〉Canvas-〉Draw(10,10,newbmp);}delete newbmp;}从左向右平铺显示效果图2实现原理:首先将暂存图形的最后一条竖线,搬移至要显示位图的第一条竖线,接着再将暂存图形的最后两条竖线,依序搬移至要显示位图的前两条竖线,然后搬移最后三条、四条竖线直到全部图形数据搬完为止。
C++ builder 中关于窗体的一些操作(总在最前,遍历控件...)
一、让窗口总是在最前面
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;
}。