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 中关于窗体的一些操作(总在最前,遍历控件...)
一、让窗口总是在最前面
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;
}。