c builder 数据库访问数据库响应函数

C_Builder中数据库连接方法_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C_Builder中数据库连接方法
上传于|0|0|文档简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢这是服务器的软件大概像图上这样,许多终端通过TCP连接到服务器上,图上每行是一个终端,终端的一些信息等等,现在是自己写一些结构,链表这些来组织的,但是关闭软件时保存和打开会比较麻烦,想用数据库来管理,本地的就可以想用ACCESS的mdb,有下面几个问题.
1.在c++builder&2010中怎么使用数据库.(这方面的资料比较少,提供一些资料或简单的例子就可以,因为我只是保存一些文本之类的,也不会用到太复杂的东西)
2.每个终端登陆(连接上来的时候)都要配对一个用户名和密码,不同用户名的些终端也要分开来管理,是不是建对应数量的表?
3.客户端通过用户名和密码更新相应的终端列表到客户端软件上.(如果按上面的方法,怎么只把这张表的内容发给客户端软件)
4.客户端会上传文件上来通过服务器转发到终端上面,在数据库中可不可以存文件,不可以的话有什么其它办法,每个终端建一个文件夹放自己的文件,转发完后删除?
5.TCP服务器用的是INDY组件,在这里面应该是多线程的,有可能同时访问数据库文件,有没有问题?
回复讨论(解决方案)
bcb里访问ACCESS使用ado控件很容易,多线程程序要注意访问冲突,如在线程里改写界面显示时使用Synchronize(...);不然就会出现假死状态,ACCESS属于桌面数据库,并发不能多
1&一般用ADO连接数据库
2&这种情况一般按照实体-关系模型是建立几个相关联的表,比如终端是一个表,终端的一对多属性建立成另外的表等等
3&客户端要读取数据,对于LZ的这种情形,一般是客户端向服务器发出请求,如后服务器读取数据库,把结果返回给客户端,客户端不直接访问数据库
4&数据库不适宜保存大量的大文件,一般的做法是把文件存储在指定的目录中,然后在数据库中保存这些文件的路径
5&对于ACCESS这种文件型的数据库,在多线程访问的时候最好使用临界区进行一下同步
连接字符串AnsiString&pConnStr=&CONNECT=Provider=Microsoft.Jet.OLEDB.4.0;Data&Source=.\\Database\\DB.Mode=ReadWPersist&Security&Info=False&
下面是连接数据库的方法
TADOConnection*&m_pADOC
m_pADOConn-&LoginPrompt=
m_pADOConn-&ConnectionString=pConnS
if&(m_pADOConn-&Connected)&m_pADOConn-&Close();
&&&&m_pADOConn-&Open();
catch(...)
连接玩之后写sql语句调用如下方法执行
m_pADOConn-&Execute(pSqlStr);
打开记录集的方法是:
int&__fastcall&TDBOperate::OpenRecordset(const&char*&pSqlStr,TADODataSet*&pDataSet)
&&&&if&(!pSqlStr)&return&-1;
&&&&pDataSet-&Close();
&&&&pDataSet-&Connection=m_pADOC
&&&&pDataSet-&CommandText=pSqlS
&&&&pDataSet-&CommandType=cmdT
&&&&&&&&pDataSet-&Open();&
&&&&catch(...)
&&&&&&&&return&-1;
&&&&return&pDataSet-&RecordC
参考一下吧你
2.另外关于mdb里面能不能存文件的问题,应该是可以的,好像是BLOB数据类型,我之前在VB里面用过一次,对应mdb里的数据类型好像是&备注&,有函数转换的,好久了忘记了
3.不需要建N个终端的表,只需一个表就可以,建议你给每一个终端编一个唯一的ID号,每一个终端就是一条记录就可以了
4.至于服务端与客户端之间传输数据的问题,我看你们是通过TCP协议通信的,那我建议你制定一份内部的通信协议,通过发送端安装协议编码,接收端按照协议解码即可以实现你的传送目的,不需要传文件的方式吧,因为我做过的数据通信系统模式跟你这个类似,所以这样建议你
是啊,后面我也觉得两个表就够了,一个存所有用户的终端信息,另一个存各个用户名和密码这些,上面图片中的属主就是对应的用户名,那么客户端需要下载某一个用户名下的所有终端列表的时候,只要选择对应列是这个用户名的这些就记录就可以了,但是怎么传给客户端呢,全部转成字符串吗,那不是很麻烦,虽然不会很多,几百或1,2千条记录是有可能的,或者另外再生成一个mdb数据库文件,传这个文件下去吗?客户端之前肯定也有旧的数据的,最好能做成只更新变化部分的,这样更新起来应该也会快一点.
另外我也觉得直接把文件存在数据库里面对我这个不太合适,因为我这个可能很多个终端要发的就是相同的一个文件,所以记录这个文件路径和文件名好一些,发送完成后把记录里面这个信息删除,当整个数据库中都没有这个文件信息的时候(就是所有该发送这个文件的终端都发送完成之后)就把这个文件删除.
数据库实现起来其实比数据结构、链表之类更简单,楼主的图片看不到
数据库实现起来其实比数据结构、链表之类更简单,楼主的图片看不到
是啊,就是没用过数据库,对这些一点概念都没有,图片是上传到CSDN的,应该多刷新一下就能看到吧.
1.&用C++Builder自带的数据引擎,如BDE,ADO,DbExpress,可视化组件,应用很简单,只需设置几个属性即可,这个无需多说。
2.&既然是多个终端访问,建议用SQLServer之类的网络数据库,Access是单机数据库。用户和权限在数据库中设置。
3.&客户端连接服务器的IP,就可以简单的用数据敏感控件直接显示数据库中的内容。
4.&服务端负责维护客户端传来的文件,根据用户的不同,分目录存放文件。
5.&Indy组件的服务端支持多线程,象IndyTCPServer组件,在接收到数据时,触发OnExecute事件,参数中的提供了对应连接的上下文指针,操作很方便。
1.&用C++Builder自带的数据引擎,如BDE,ADO,DbExpress,可视化组件,应用很简单,只需设置几个属性即可,这个无需多说。
2.&既然是多个终端访问,建议用SQLServer之类的网络数据库,Access是单机数据库。用户和权限在数据库中设置。
3.&客户端连接服务器的IP,就可以简单的用数据敏感控件直接显示数据库中的内容。
4.&服务端负责维护客户端传来的……
2.终端不是PC,只是一台设备,只能通过TCP,或UDP连到服务器上,所以这个是单机数据库还是网络数据库应该没什么所谓有吧,毕竟用SQLServer搭服务器时要麻烦一些,可能还要涉及SQLServer购买的问题.
3.如果用Access单机版的数据库,可以在客户端里实现用敏感控件直接显示服务器数据库中的内容吗?
5.IndyTCPServer对应的客户端是多线程的,我前面指的是多个客户端可能会同时访问数据库(读写都有可能),就是多个线程同时访问数据库了.
根据你这个需求,那么建议是客户端不要直接访问数据库,而是通过指令,由服务端负责访问数据库,然后将筛选的数据进行组织,发送给客户端。如果访问量不大,服务端这边可以用Access数据库。
这样的设计,一是为了安全,二是客户端不需要考虑多线程访问数据库的诸多问题。
额,我上一个回复好像没了,晕....
数据库不大,像这样的记录最多也不会超过5000条吧,同一个用户的最多1000条左右.
一般一个用户同一时间只会有一个客户端,那么当客户端需要一个用户下的所有记录信息时,服务器访问数据库筛选出来,然后怎么组织发给客户端(通过TCP&socket),全部当成字符串组织一下或者生成个文件或者数据库文件,哪种方法好一点.
另外我想找一些SQL的资料,SQL语句这些,像这样的书应该就可以了吧
/MySQL%E5%BF%85%E7%9F%A5%E5%BF%85%E4%BC%9A-%E7%A6%8F%E5%A1%94/dp/product-description/B001NMTX9S/ref=dp_proddesc_0?ie=UTF8&s=books
另外这些&DataSource&,&ADOConnection&,&ADOQuery&这些的资料不好找吧,书肯定是找不到了.
将筛选出的数据按一定规则组织一下就行了。拼成字符串比较简单,你自己先尝试一下。
至于书籍,我不作太多评论,这个容易得罪人。
那另一个问题,在终端的TCP线程中修改数据库要怎么处理,互斥?
你这个服务端程序就是个前置机,前置机负责跟所有的终端设备通信,通信方式采用TCP或UDP协议(媒介可能是GPRS/CDMA/3G/以太网)对吗?同时前置机负责维护数据库,将终端设备信息存储到数据库里。而前置机的另一个功能就是负责与客户端通信,通过局域网的TCP或UDP,前置机负责将客户端的命令转发到终端,同时将终端反馈的信息转发到客户端,是这样一个模式吗?
如果是这样的话,最好能用网络数据库,客户端和服务端程序都可以维护数据库最好,如果网络数据库不行,只能用ACCESS数据库的话,那就如我之前给你建议的,自己制定通信协议来表示你所有要传输的信息,妖哥也是这样的建议。
如果你不知道怎么制定通信协议的话,那你的服务端程序是怎样跟终端设备通信的?他们之间肯定有通信协议的,你可以参考那个协议来制定。实际就是一个字节数组比如:用10个字节表示用户名+10个字节密码+终端逻辑地址+……,当然你还可以加上头和尾55AA&AA55之类的,还可以加上校验,
通信协议是一个编解码的约定,一条记录跟一万条记录处理起来是一样的,你把它做成函数就可以了
sql语句不需要怎么看书,网上一搜全都有,你是初学者,了解几个简单的就足够用了,insert,update,delete,select学会这几个就可以了,如果想深入,你后面再自己研究,没你想象的那么复杂
那另一个问题,在终端的TCP线程中修改数据库要怎么处理,互斥?
你加个锁就可以了,对数据库操作之前LOCK一下,操作完UNLOCK
你这个服务端程序就是个前置机,前置机负责跟所有的终端设备通信,通信方式采用TCP或UDP协议(媒介可能是GPRS/CDMA/3G/以太网)对吗?同时前置机负责维护数据库,将终端设备信息存储到数据库里。而前置机的另一个功能就是负责与客户端通信,通过局域网的TCP或UDP,前置机负责将客户端的命令转发到终端,同时将终端反馈的信息转发到客户端,是这样一个模式吗?
如果是这样的话,最好能用网络数据库,……
对,就是这样一个模式.先用ACCESS数据库做吧,简单点,自己定通信协议.
那另一个问题,在终端的TCP线程中修改数据库要怎么处理,互斥?
你加个锁就可以了,对数据库操作之前LOCK一下,操作完UNLOCK
解决互斥的方法有很多种,你这样就用临界区就可以了吧
CCriticalSection&m_
用到操作数据库的时候m_lock.Lock()一下
然后写你的操作数据库代码
用完之后m_lock.Unlock()一下就得了
我那个是VC里面的用法,可能在BCB里面也能用,没试过
解决互斥的方法有很多种,你这样就用临界区就可以了吧
CCriticalSection&m_
用到操作数据库的时候m_lock.Lock()一下
然后写你的操作数据库代码
用完之后m_lock.Unlock()一下就得了
c++builder里不能用.
那就用//互斥量
TMutex&m_也可以吧C++&Builder&可视化组件库(VCL)中的对象、组件与控件_C/C++教程_动态网站制作指南
C++&Builder&可视化组件库(VCL)中的对象、组件与控件
来源:人气:5987
&&&&图2 - 1为可视库的分层结构的简图,图中显示出了树状分层结构的五个主要的分支。
2.4.1 TObject分支&&&&下面几部分分别对包含于五个主要分支中的类做出简要地描述,为完整地说明VCL对象的分层结构,引用了包含于产品中的VCL对象分层结构图。&&&&所有的VCL对象都派生于TObject,其方法定义了构造、析构、消息处理等基本特征。VCL对象的许多强大的功能都建立在TObject给出的这些方法的基础之上。通过提供下列方法,TObject封装了所有VCL对象最基本的通用特征:· 在对象被创建或销毁时响应的能力。· 对象的类型和实例信息,及有关对象发布的属性的运行时类型信息(RTTI)· 支持消息处理。&&&&TObject是许多简单类的直接祖先。在这一分支中所包含的类有一个共同的重要的特性,它们都是暂时的。这是指,这些类都没有用来在对象被销毁之前保存状态的方法,它们不是固有的。&&&&在这一分支中一个较主要的类为异常(Exception)类。它提供一组内嵌的异常类用于自动处理除数为零的错误、文件I/O错误、非法的类型匹配及许多其他的异常情况。&&&&包含于TObject分支的还有一些封装数据结构的类,例如:· TBits,存储了一个布尔型“数组”的类。· TList,链接列表的类。· TStack ,包含一个“后进先出”的指针数组的类。· TQueue,包含一个“先进先出”的指针数组的类。&&&&此外,你还可以发现一些封装了外部对象的类,如Tinter,它封装了Windows打印机接口,TRegistry,它封装了底层系统注册及其函数。&&&&TStream是这一分支里其他类型的典型例子。TStream是流对象的基类,可以与如磁盘文件、动态内存等等各种存储介质进行读写操作。&&&&可以看到,这一分支中包含许多不同类,对于一个开发者来说,这些类都非常有用。2.4.2 TPersistent分支&&&&在VCL分层结构中直接在TObject之下的是TPersistent。TPersistent给其下所有的类添加了两个重要的方法:SaveToStream和LoadFromStream。这些方法向对象提供固有特性。例如:当窗体设计器需要创建DFM文件(存储窗体及其组件信息的文件)时,它循环检查窗体的组件数组,并对其中所有的组件都调用SaveToStream方法。每个组件都“知道”如何将改变了的属性写入流中(如文本文件)。反过来,若窗体设计器需要从DFM文件中装入组件属性时,它循环检查窗体的组件数组,并对其中所有的组件都调用LoadFromStream方法。因此,任何TPersistent的派生类都有保存状态信息和需要时还原它们的能力。&&&&在这一分支中包含的类主要有:· TGraphicsObject,图形对象的基类,封装了Windows图形对象:TBrush、TFont、TPen。· TGraphic,图标、位图、图元文件等能存储和显示可视图像的对象的基类,封装了TBitmap、TIcon和TMetaFile。· TStrings ,串列表对象的基类。· TClboard,封装了Windows剪贴板对象,它包含从应用程序中剪下或复制的文本或者图形。· TCollection、TOwnedCollection和TCollectionItem,包含非凡预定义项的索引集。2.4.3 TComponent分支&&&&TComponent是所有VCL组件的共同祖先。组件就是在设计时可在窗体中操纵的对象。虽然名为可视组件库,其实VCL中包含的大部分对象为非可视化的。&&&&VCL组件都是固有的对象,其功能主要有:· 可出现在组件面板上并可在窗体设计器中修改。· 可拥有和治理其他的组件。· 增强的流及文件治理能力。· 可通过New Objects对话框中ActiveX页的向导程序转换成ActiveX控件或其他COM对象。&&&&TComponent扮演了一个所有组件都可插入的标准“总线”的角色。TComponent通过Name和Owner属性及一些方法规定组件在设计时的行为。所有派生于TComponent的类都有Name和Owner属性。Owner属性值,也即组件的属主负责该组件对象的销毁。&&&&在这一分支中包含的类主要有:· TMainMenu 为窗体提供菜单栏及相应的下拉菜单的类。· TTimer 包含Windows API 中的计时器函数的类。· TOpenDialog、TSaveDialog、TFontDialog、TFindDialog、TColorDialog等,是通用Windows对话框类。 · TActionList,包含组件或控件,如菜单项和按钮的动作列表的类。· TScreen,负责治理应用程序创建的窗体和数据模块,当前的活跃窗体及其上的活跃控件、屏幕尺寸和分辨率,应用程序使用的光标和等内容的类。2.4.4 TControl分支&&&&所有的控件都是可视化对象,即它们在运行时可见并可被用户操纵。且它们都有作为可视化控件所共有的属性、方法和事件,例如控件的位置、光标、与控件关联的提示、用来描绘或移动控件的方法、用来响应鼠标动作的事件等。&&&&TComponent定义所有组件的行为,TControl则进一步定义了所有可视化控件的行为。包含画图例程、标准Windows事件及容器特性。&&&&在这一分支中一组较重要的类为TGraphicControl。TGraphicControl控件类必须能描绘它们自己并且从不接受焦点。在这组控件中主要包含:· TImage,一种显示图形类图像的控件。· TLabel,一种在窗体中显示文字的控件。· TBevel,一种表示边缘斜角的控件。· TPaintBox,一种提供画布的控件,应用程序能够使用画布创建及生成显示图像。&&&&注重到这些控件包含通用的画图例程(画图、重画、使无效等),但C++Builder不必为它们分配窗口句柄,因为它们从不需要接受焦点。2.4.5 TWinControl分支&&&&TWinControl是为所有的窗口控件的基类。下面的是窗口控件的几个特征:· 窗口控件是应用程序运行时能接受焦点的控件。· 也许还有其他控件可以显示数据,但是只有当该控件是一种窗口控件时,用户才能使用键盘来与之交互。· 窗口控件能包含其他控件。· 包含其他控件的控件是父代控件。只有窗口控件能够作为一个或多个子控件的父代控件。· 窗口控件有窗口句柄。&&&&除了能接受焦点外,TWinControl与TControl基本相同。这意味着它们不但包含许多标准Windows事件,同时Windows还必须给它们分配窗口句柄。这一分支中包含了两大类控件,一种是由Windows自动描绘的(包括TEdit、TListBox、TComboBox、TPageControl等),另一种是C++Builder自定义的(包括TDBNavigator、TMediaPlayer、TGauge等)。不过,你根本不必关心控件如何描绘它们自己或如何响应事件,这些都已被C++Builder所完全封装。2.4.6 TControl的共同属性&&&&所有可视化控件(TControl的后裔)共享的属性包括:· 位置、尺寸及排列属性。· 显示属性。· 父代属性。· 导航属性。· 拖放属性。· 拖动-停靠属性。· 动作(Action)属性。&&&&这些属性是从TControl继续而来的,它们都是发布属性,因此,只对于那些适用的组件它们才会出现在对象观察器中。例如:TImage未发布Color属性,因为它的颜色是由它所显示的图形决定的。&&&&1、Action(动作)属性&&&&Action可以让一些动作共享代码(例如:当工具栏按钮和菜单项所做的事相同),并且依靠于应用程序的状况,提供了简单的易实现的方法控制动作的有效与否。· Action指定与控件相关的动作。· ActionLink包含与控件相关的动作链接对象。&&&&2、位置、尺寸及排列属性&&&&这些属性用于定义控件在窗体或容器控件中位置和尺寸:· Height,设置垂直尺寸。· Width,设置水平尺寸。· Top,设置上边界。· Left,设置左边界。· AutoSize,指定控件尺寸是否自动地适应其中的内容。· Align,确定控件在容器(父代控件)内部如何排列。· Anchor,指定控件相对于其父代控件的定位。&&&&下列属性确定控件整个客户区的高度、宽度、尺寸:· ClientHeight,以像素为单位指定控件客户区的高度。· ClientWidth,以像素为单位指定控件客户区的宽度。&&&&对于非可视化组件,这些属性都是不可访问的,但是C++Builder记录下了将组件图标放置在窗体的何处。大多数情况下可以通过操纵控件的图像或使用排列面板来设置和改变这些属性,同时,也能在运行时改变它们。
三层交换技术
交换机与路由器密码恢复
交换机的选购
路由器设置专题
路由故障处理手册
数字化校园网解决方案
&&&&3、显示属性&&&&下面的属性控制控件的常规外观:· Color,改变控件的背景色。· Font,改变文本的颜色、类型、样式和尺寸。· Cursor,指定当光标通过控件时,用于表示鼠标指针的图像。· DesktopFont,指定控件在写入文本时是否使用Windows图标字体。&&&&4、父代属性&&&&为了在你的应用程序中保持一致的外观,你可以通过设置父代属性来使任何控件和它们的父代控件看上去都很相似。· ParentColor,确定控件可以到哪里找到它们的颜色信息。· ParentFont,确定控件可以到哪里找到它们的字体信息。· ParentShowHint,确定控件到哪里弄清楚帮助提示应如何显示。&&&&5、导航属性&&&&下面的属性确定用户如何在窗体的控件之中定位:Caption,包含作为组件标号的字符串。要为字符串中的字符加下划线,需在该字符之前加一连字符(&)。这类字符被称为快捷键。用户按下Alt键的同时键入加下划线的字符,就可选择控件或菜单项。&&&&6、拖放属性&&&&有两个组件属性影响拖放操作:· DragMode,确定拖动何时开始。DragMode的缺省值是dmManual,应用程序必须调用BeginDrag方法来开始拖动。当DragMode是dmAutomatic时,鼠标键一按下,拖动即开始。· DragCursor,指定鼠标指针在可拖放组件上方时的外形。&&&&7、拖动-停靠属性&&&&下面的属性控制拖动-停靠操作:· Floating,指示控件是否为浮动的。· DragKind,指定控件正进行正常地拖动还是进行停靠操作。· DragMode,确定控件如何开始拖放或拖动-停靠操作。· FloatingDockSiteClass,当控件为浮动的时,指定控件的临时寄主类。· DragCursor,指定拖动时的光标外形。· DockOrientation,指定控件与其他同时停靠于相同父代控件中的控件的关系。· HostDockSite,指出控件所停靠的控件。2.4.7 TControl通用标准事件&&&&VCL中的控件都定义了一些标准事件。下面的事件是TControl类所声明的一部分,因此所有TControl的派生类都可用:· OnClick,用户单击控件触发。· OnContextPopup,用户右击控件或用其他方式激活弹出式菜单(比如使用键盘)时触发。· OnCanResize,试图调整控件大小时触发。· OnResize,在控件调整大小之后立即触发。· OnConstrainedResize,在OnCanResize发生以后立即触发。· OnStartDock,当用户以DragKind属性为dkDock的方式开始拖动控件时触发。· OnEndDock,当对象的拖动结束,或进行了停靠操作又或终止拖动时触发。· OnStartDrag,当用户通过单击控件并保持鼠标键按下,开始拖动控件或者它包含的对象时触发。· OnEndDrag,当对象的拖动结束,或者通过终止拖动放下对象时触发。· OnDragDrop,当用户放下正在拖动的对象时触发。· OnMouseMove,当用户移动鼠标指针并且鼠标指针通过控件上方时触发。· OnDblClick,当鼠标指针在控件上方且用户双击鼠标时触发。· OnDragOver,当用户拖动一个对象通过控件上方时触发。· OnMouseDown,当鼠标指针在控件上方且用户按下鼠标键时触发。·OnMouseUp,当鼠标指针在组件上方且用户按下鼠标键后又松开时触发。2.4.8 TWinControl的共同属性&&&&所有的窗口控件(TWinControl的后裔)所共享的属性包括:· 关于控件的信息。· 边界样式显示属性。· 导航属性。· 拖动-停靠属性。&&&&这些属性是从TWinControl继续而来的,它们都是发布属性,因此,只对于那些适用的组件它们才会出现在对象观察器中。&&&&1、常规信息属性&&&&常规信息属性包含TWinControl的外观信息、客户区尺寸和起点、Windows指定信息、及鼠标信息。· ClientOrigin,指定控件客户区左上角顶点的屏幕坐标(以像素为单位)。这个坐标是由TControl而不是从TWinControl中继续而来的,是该控件的父代控件的屏幕坐标加上其Top和Left属性值。· ClientRect,返回一个矩形,其Top和Left属性值设置为零,Bottom和Right属性值设置为该控件的Height和Width属性值,ClientRect也就是等价于Rect(0,0,ClientWidth,ClientHeight)。· Brush,确定用于绘制控件背景的颜色和模式。· Handle,提供对控件窗口句柄的访问途径。· WindowHandle,提供对控件窗口句柄的另一种访问途径。· HelpContext,提供用于调用上下文相关的联机帮助的一种上下文相关的编号。· Controls,列出窗口控件的所有子控件。&&&&2、边界样式显示属性&&&&斜角(Bevel)属性控制应用程序中窗体或窗口控件斜角行、边框、页面的外观。· InnerBevel,指定内斜角为凸起、凹进或平面。· BevelKind,若控件存在斜角边缘、指定斜角的类型。· BevelOuter,指定外斜角为凸起、凹进或平面。BevelWidth指定内斜角和外斜角的宽度,以像素为单位。· Bevel,以像素为单位,指定内、外斜角的宽度。· BorderWidth,给出或设置控件边界宽度。· BevelEdges,给出或设置控件的哪些边做斜角处理。&&&&3、导航属性&&&&两个附加的属性确定用户如何在窗体之中定位控件:· TabOrder,指出控件在它们的父代组件中的Tab排序,也即用户按Tab键时控件收到焦点的顺序。初始的Tab排序就是组件加入到窗体的顺序,但是你能通过改变TabOrder来改变这一顺序。只有当TabStop是true时TabOrder才有意义。· TabStop,确定用户是否能按下Tab键顺序转至各控件。假如TabStop为true,控件具有Tab排序功能。&&&&4、拖动-停靠属性&&&&下面的属性治理拖动-停靠操作:· UseDockManager,指定拖动-停靠操作的治理者。· VisibleDockClientCount,指定放置于窗口控件中的可见控件的数目。· DockManager,指定拖动-停靠操作的治理者接口。· DockClients,给出窗口控件中放置的控件的列表。· DockSite,指定控件是否可以作为拖动-停靠操作的目标。2.4.9 TWinControl的通用标准事件&&&&下面的事件存在于所有从TWinControl派生的控件(包含所有的Windows定义的控件)。这些事件是对于存在于所有控件之中的事件的补充。· OnEnter,控件即将收到焦点时触发。· OnKeyDown,用户按键时,键处于按下状态时触发。· OnKeyPress,用户按单个字符键时触发。· OnKeyUp,用户按键时,键按下又弹起后触发。· OnExit,输入焦点从一个控件转移到另一个时触发。· OnDockDrop,另一控件被停靠到该控件时触发。· OnDockOver,另一控件被拖动通过该控件上方时触发。· OnGetSiteInfo,返回该控件停靠信息。· OnMouseWheel,鼠标轮旋转时触发。· OnMouseWheelDown,鼠标轮向下旋转时触发。· OnMouseWheelUp,鼠标轮向上旋转时触发。· OnUnDock,应用程序试图释放窗口控件中停靠的控件时触发。2.4.10 创建应用程序用户界面&&&&在C++ Builder中,所有的可视化设计工作都在窗体中展开,当你打开C++Builder或建立一个新工程时,屏幕上会出现一个空白的窗体。可以用这个窗体来建立应用程序界面,包括窗口、菜单、对话框等。&&&&通过可视化的组件,如按钮、列表框等在窗体上的放置和排列,可以设计出用户图形界面的外观,而底层的工作细节则由C++ Builder自动治理。同时,也可以将一些非可视化的组件放入窗体之中,以便治理信息,进行计算,治理其他操作等。2.4.11 使用组件&&&&大多数可视化组件由开发环境本身提供,放置在组件面板之上。从组件面板中选择组件并放置到窗体中即可设计应用程序用户界面。可视化组件被放入窗体中后,就能调整它们的位置、尺寸、及其他设计时属性。&&&&组件面板上的C++Builder组件以其功能的不同分属于不同的页。例如,常用组件,比如那些用来创建菜单、编辑框或按钮的组件,位于组件面板中的标准(Standard)页。一些简便的控件比如,计时器、绘图框、媒体播放机、OLE容器控件等在系统(System)页。&&&&乍看之下,C++Builder组件与任何其他的C++类大致一样。但是,在C++Builder组件和大多数的C++程序员所使用的标准C++类分层结构之间还是存在一些差异的。下面就是其中的一些差别:· 所有的C++Builder组件由TComponent类派生而来。· 组件大多数的应用是通过改变他们的属性来使用,而不是作为“基类”以使其子类能够增加或改变其成员函数。当组件被继续时,通常是给现有的事件处理成员函数加上具体的代码。· VCL组件只可分配在堆中,而不能在栈中(它们必须用new操作符来创建)。组件的属性本质上包含运行时类型信息。· 组件可以被加到C++Builder用户界面的组件面板中并且可在窗体中操纵。· 组件通常比标准C++类封装得更好。例如:考虑一个包含一个按钮的对话框。在C++Windows应用程序中,当用户单击按钮时,系统产生一个WM_LBUTTONDOWN消息。程序必须捕捉这个消息(典型的是在Switch状态、消息映象、或响应列表),并将它分派到可响应这个消息的例程中。&&&&C++Builder组件可处理大多数的Windows消息。若要响应一个Windows消息时,只需提供一个事件句柄即可。
优质网站模板

我要回帖

更多关于 数据库响应时间 测试 的文章

 

随机推荐