C++ builder 中关于窗体的一些操作
用c++ builder 创建具有吸附效果的窗口

用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各种选取钮、列表框、面板

面板屬性列表
屬性 功能說明
Caption
BevelInner BevelOuter
Panel的標題名稱
Panel的邊界樣式 Panel的邊界樣式
BevelWidth
Locked Name Visible
Panel的邊界寬度
此Panel是否能移動 此Panel在程式中所具有的變數名稱 此Panel是否顯示
• Step2:點選CheckBox圖示,並用滑鼠在欲放置核取方塊的程式Form中, 拖曳出CheckBox控制元件。 • Step3:編輯CheckBox元件屬性;在元件上利用滑鼠點一下,「Object Inspector」視窗便會出現,下頁的表格列出常用的CheckBox元件屬性。
核取方塊屬性列表
功能說明
Name
此GroupBox在程式中所具有的變數名稱
8-4 面板(Panel)簡介
• 面板提供了一個固定的區域給集結在一起的控制項,當面板被移動,或是 被切換選取時,上面的控制項也會跟著移動,這可以用來製作工具列之類 的功能,在下圖中,三個面板放在同一個位置,用上面的三個Show Panel的按鈕來控制這三個面板的Visible屬性,如此一來,這三個面板及 附在其上的控制項能夠在這有限的區域中交互顯示而不會影響彼此。
• Step4:將控制項放置在ListBox中,只要在「Object Inspector」視窗中 點選屬性Items,便會彈出String List Editor視窗,在其中便可做編輯的 動作。整個列表盒的顯示區域就是用來顯示這個List的,這個列表所放 的就是列表盒最重要的資訊。
列表盒屬性列表
屬性 Caption Items ListBox的標題名稱 此ListBox中的控制項 功能說明
C++Builder中不规则窗体的快速显示

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"项(添加程序代码使得激活弹出菜单时即可关闭应用程序)。
C++builder 窗体设计

第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 实例一、介绍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中关于窗体的一些操作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 属性。
补充2:C++Builder窗体组件属性与事件简介
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C++Builder
可视化窗口操作设置组件属性
在设计时设置属性一般是通过属性窗口来进行的。在属 在设计时设置属性一般是通过属性窗口来进行的。 性窗口设置组件属性的操作步骤如下: 性窗口设置组件属性的操作步骤如下: 1) 打开相应对象的属性窗口。 ) 打开相应对象的属性窗口。 2) 从属性列表中选定属性名称。 2) 从属性列表中选定属性名称。 3) 在属性窗口的右列输入或选择新的属性值。 ) 在属性窗口的右列输入或选择新的属性值。
图像组件尚有以下属性: 图像组件尚有以下属性: 尚有以下属性 Picture:调入图形文件 调入图形文件(.jpg、.jpeg、.bmp、.ico、.emf等 调入图形文件 、 、 、 、 等 等格式) 等格式 Center:图形是否在中心 图形是否在中心
主讲教师: 主讲教师:张鹏祥
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C++Builder
七、选择按钮组件属性
选择按钮分单选和复选两类, 选择按钮分单选和复选两类,他们的如下属性 与窗体属性基本一样: 与窗体属性基本一样: Caption、Name、Enabled、Visible、 Caption、Name、Enabled、Visible、 Height,Width,Top和 Height,Width,Top和Left
主讲教师: 主讲教师:张鹏祥
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C本编辑框的如下属性与窗体如下属性基本一样: 文本编辑框的如下属性与窗体如下属性基本一样: Name、Enabled、Visible、Height,Width,Top和 、 、 、 和 Left Font、Color、AutoSize 、 、 文本编辑框尚有以下属性: 文本编辑框尚有以下属性: ImeMode:输入法类型 :
c++builder相关控件和响应函数
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菜单,工具栏和状态栏
4.2.1 ToolBar
在窗体中添加了 ToolBar组件后, Align属性默认设置为 alTop,所以ToolBar组件默认停靠在 窗体的最上边,并且宽度会自动适应窗体宽度的改变。
ToolBar组件是Win32组件页的第 16个组件。 选中ToolBar组件后,可以直接往其中添加其他组件。添加的组件会自动从左向右依次排列, 利用鼠标拖动某个组件可以改变组件排列的位置。注意,往 ToolBar组件中添加其他组件的时候, 最好先在组件栏中相应的参数上点击一下鼠标左键,然后松开并将鼠标移动到组件栏上,再点 击一下鼠标左键。这时新添加的组件的高度可以适合 ToolBar组件的高度。 另外,选中 ToolBar组件后,单击鼠标右键,可以通过菜单命令 New Button在组件栏上添加 一个按钮,也可以通过菜单命令 New Separator在组件栏上添加一个间隔。
下载
第4章 菜单、工具栏和状态栏
在标准 Windows应用程序的窗体中,通常要包括菜单栏、工具栏和状态栏,有时还可以 通过右键弹出菜单实现快捷操作。本章的主要内容就是关于如何在应用程序中添加、定制菜 单、工具栏和状态栏,并配以例程加以说明,最后是有关方法与技巧。
4.1 菜单
菜单为 Windows应用程序和用户之间提供了统一的交互方式,并且操作方便、简单。菜 单有多种样式,比如固定式、下拉式和弹出式等。
通常 Windows中的菜单由顶层的水平列表项以及分别与各项相连的下拉式菜单所组成, 当用户选择了顶层某个列表项时,就会弹出其相连的菜单——我们称为子菜单。下拉式的子 菜单由多个菜单项组成,可以将多个菜单项进行分组,把相关的菜单项作为一组,组与组之 间以分隔线隔开。菜单项一般可以分成三种情况:一种只是菜单项名称,这种菜单项直接导 致完成某种操作;另一种是菜单项名称后还有省略号,表示选择它将要弹出一个对话框,用 户需要在对话框中做进一步工作;还有一种就是菜单项名称后有一个右箭头,这表示选中它 后又会弹出一个菜单,这样就可以形成多级菜单。
c++ builder基本知识
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表示大小不可变的标准的对话框边界。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
}。