C++Builder 总结 151121
- 格式:doc
- 大小:285.44 KB
- 文档页数:14
C++模式设计之Builder2002-07-23 13:12作者:出处:COM集中营责任编辑:一、功能将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
二、结构图各类之间的交互关系如下图所示:三、示例代码namespace DesignPattern_Builder{class Product1 { /*...*/ } ;class Product2 { /*...*/ } ;// class Builderclass Builder //抽象基类{public:virtual void BuilderPartA() {} //提供缺省实现virtual void BuilderPartB() {}virtual void BuilderPartC() {}protected:Builder() {}} ;// class ConcreteBuilder1class ConcreteBuilder1 : public Builder //创建Product1{public:ConcreteBuilder1() : _product(NULL) {}virtual void BuilderPartA() { /*...*/ }virtual void BuilderPartB() { /*...*/ }virtual void BuilderPartC() { /*...*/ }virtual Product1* GetProduct1() { return _product ; } //返回创建的Product1对象private:Product1 *_product ;} ;// class ConcreteBuilder2class ConcreteBuilder2 : public Builder //创建Product2{public:ConcreteBuilder2() : _product(NULL) {}virtual void BuilderPartA() { /*...*/ }virtual void BuilderPartB() { /*...*/ }virtual void BuilderPartC() { /*...*/ }virtual Product2* GetProduct2() { return _product ; } //返回创建的Product2对象private:Product2 *_product ;} ;// class Directorclass Director{public://创建对象(Director并不知道具体创建出来的对象是什么样的,只有调用该函数的client知道)void Construct(Builder *builder){builder->BuilderPartA() ;builder->BuilderPartB() ;builder->BuilderPartC() ;}} ;}客户端代码:{using namespace DesignPattern_Builder ;Director director ;// 创建第一种对象ConcreteBuilder1 *pBuilder1 = new ConcreteBuilder1() ; director.Construct(pBuilder1) ;Product1 *product1 = pBuilder1->GetProduct1() ;// 创建第二种对象ConcreteBuilder2 *pBuilder2 = new ConcreteBuilder2() ; director.Construct(pBuilder2) ;Product2 *product2 = pBuilder2->GetProduct2() ;}四、实例(1)例子一。
计算机程序课程设计报告设计题目文件管理器班级姓名学号目录1.设计题目 (1)2.功能描述 (1)3.程序设计 (1)3.1.总体设计 (1)3.2.详细设计 (2)4.代码实现 (4)5.程序调试 (9)6.实现结果 (9)7.改进构想 (13)8.完成工作 (13)9.设计总结及体会 (13)1.设计题目文件管理器2.功能描述该设计是以文件和文件夹为操作对象,获取当前电脑的系统目录和文件,然后实现目录和文件的创建、重命名与删除,实现文件的浏览和运行,有剪贴板功能(剪切、复制和粘贴)。
并增加了启动画面、登录界面、菜单栏、快捷工具栏、右键菜单和状态栏。
整个工程由七个窗体组成,分别来实现上述总体功能,它们的具体功能实现如下:(1)启动画面:实现启动画面的淡入淡出,使设计正式且美观;(2)登录界面:输入用户名和密码登录到主界面,保障了安全性;(3)文件管理器界面:实现对文件和目录的主要操作,包括文件夹的新建,文件和目录的删除,可刷新列表,运行选中的文件,并且可以剪切、复制和粘贴;(4)文件新建:在已选中路径下建立新的各个类型文件;(5)文件重命名:对已选中的文件进行改名操作;(6)文件夹重命名:对已选中的文件夹进行改名操作;(7)关于:叙述该设计功能,版本信息和制作人。
3.程序设计3.1.总体设计该软件总体由七个模块组成,各个模块之间存在相应的调用关系,并且每个窗体下有多个功能要实现。
文件管理器的总体设计框图如图3.1所示:图3.1 系统框图3.2.详细设计下面分窗体介绍每个窗体设计思路:某种功能以何种方式实现;所使用控件、各控件用到的主要属性、事件及备注。
(1)窗体1Form1实现启动画面淡入淡出功能,其控件信息如表3.1所示:表3.1 窗体1控件列表在Image中导入启动画面,然后添加两个时钟控件,并设置初始状态为时钟1打开,时钟2关闭,并将时间间隔值都改为10。
利用两个时钟的开关来控制图片透明度值增大或减小,从而达到淡入淡出的目的。
C++Builder的基本功能我们用高级语言写程序,我们很得意,因为高级语言比较接近人类的语言,使我们用起来得心应手,所以我们当然得意。
但我们更得意的一定是让程序代码赶快变成可执行文件。
无论是在写代码的过程,还是最后要编译成可执行文件,都需要有一个工具存在。
这一工具一般称为编程集成环境(IDE)。
之所以称为集成,是因为从写代码到最后软件的出炉,我们需要它的地方实在太多了,这里列出其中最重要的功能项。
1、代码编辑:方便的代码编辑功能。
尽管你可以使用记事本、Word或其它任何文本编辑器来写代码,但除非特殊需要,否则那将是极为低效的方法。
相反,现在的编程集成环境,都相当的智能,举例如:代码自动功能,可以在很多情况下自动完成我们所需的代码,既准确还迅速。
Borland公司出品的编程集成环境不仅有常见的关键字高亮等功能,还支持代码模板,支持键盘宏,同样支持高级的脚本插件功能。
2、界面设计:可视化的程序界面设计功能。
你所要产生的窗口,在设计期间就真实地出现,包括字体、颜色和定位。
比如:你不仅可以插入falsh的动画,而且无需运行,就直接可以在你的界面上看到该动画的演播,这是别的编程环境不能做到的。
3、程序编译:这是编程工具的主要功能。
我们写的代码在成为机器能懂的可执行程序时,必须通过编译。
4、程序调试:如何尽量减少你程序的BUG呢?没有编程集成环境提供的强大调试功能,我们做的程序将毫无质量保证。
5、代码优化:Borland 提供的编译器,不仅在编译速度上一直在美国屡获大奖,而且其代码自动优化功能一直领先对手几近一个时代。
使用编程集成环境,我们可以轻松获得更快更优的最终可执行程序文件。
6、辅助程序安装:程序的安装已属于另外一种工具的范畴,但我们仍可以通过编程集成环境来决定最终生成单一可执行文件,还是带有其它动态库。
如果是后者,我们还可以通过集成环境来检查程序运行时调用了哪些动态库文件。
C++Builder 提供的功能远不止我上面所说的,并不是因为我嘴笨,而是我认为对一个工具,你只有动手使用,才会真正了解它。
《可视化程序设计》综合实验报告题目:(实验四)数据库应用设计班级:姓名:学号:一、试验目的:熟悉数据库应用程序的开发步骤;学会运用数据库组件结构中的数据集组件、数据源组件和数据控制组件;练习使用BCB DataBase Desktop创建数据表、编辑数据表;练习使用BDE Administrator设置、连接、管理数据;练习使用Query组件及SQL语句完成对数据库的查询。
二、实验内容:1.编写一个通讯录应用程序,通讯录中的信息包括姓名、性别、院系、班级、地址、邮编、电话1、电话2、E_mail地址。
2.该通讯录应用程序应具有信息的查看、编辑功能。
3.该通讯录应用程序应具有对信息的添加和删除功能。
4.该通讯录应用程序应具有如下对信息的查找功能:1)按院系查找,用户选择一个院系后应列出该系的所有班级,用户选择某一班级后应列出该班的所有学生信息。
2)按姓名查找。
3)按学号查找。
4)支持模糊查询。
三、试验步骤:1、数据库设计与建立通过主菜单Tool-〉DataBase Desktop命令打开C++ Builder数据库辅助工具——数据库桌面,并在该环境下创建数据表,步骤如下:(1)建立数据库别名为(2)选择菜单命令File->Working Directory,建立数据库存放路径。
本实验中,存放路径为E:\txl\data(3)选择菜单命令File->New->Table,创建新表,在Create Tabled对话框中选择表的类型,界面如图1所示。
(4)建立表结构。
在Create Tabled对话框中选择表的类型,并单击OK键后,出现表结构对话框。
逐行设置表中各字段的字段名、字段类型、字段长度和索引。
设置后单击Save AS 键保存至事先建立好的数据库路径。
图创建XSJBXX表结构(5)打开BDE Administrator窗口,对数据库别名进行建立和维护,配置数据库驱动程序等。
图别名为txl,路径为E:\txl\data(6)实验所建立表如下所示:表1 学生基本信息(XSJBXX)表2 班级名称(BJMC)表3 院系名称(YXMC)2.数据库界面设计。
C++Builder一些小技法怎样在C++Builder中创建使用DLL自从C++Builder从去年浪漫情人节上市以来,吸引了大量的Delphi、VC、Vb的程序员到它的怀抱,大量的C、C++程序员感叹道:总算有了C的可视化开发工具,对我也是一样,从BC、Delphi到C++Builder。
动态链接库(DLL)是Windows编程常遇到的编程方法,下面我就介绍一下在BCB (C++Builder下简称BCB) 中如何创建使用DLL和一些技巧。
一、创建:使用BCB File|NEW建立一个新的DLL工程,并保存好文件BCB,生成一个DLL的程序框架。
1.DllEntryPoint函数为一个入口方法,如果使用者在DLL被系统初始化或者注销时被调用,用来写入对DLL的初始化程序和卸载程序;参数:hinst用来指示DLL的基地址;reason用来指示DLL的调用方式,用于区别多线程单线程对DLL的调用、创建、卸载DLL;2.在程序中加入自己所要创建的DLL过程、函数;3.用dllimport描述出口;例程序如下:#include#pragma hdrstopextern 揅?__declspec(dllexport) int test();int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){return 1;}int test(){return 3;}注意:动态链接库中调用过程、函数时有不同的CALL方式__cdecl、__pascal, __fastcall、__stdcall,BCB中默认的方式为__cdecl(可不写),如果考虑兼容性可用时__stdcall声明方法为:extern 揅?__declspec(dllexport) int __stdcall test();对于其中过程、函数也改为:int __stdcall test()二、使用DLL在BCB中使用DLL有两种方法:1.用静态调用法首先需要在BCB的项目中加入输入接口库(import library),打开工程项目,使用BCB View|Project Manager打开项目列表,向项目中加入接口库(*.lib)。
c++builder数据库开发经典案例解析目录1. 引言1.1 背景和意义1.2 结构概述1.3 目的2. 基本概念介绍2.1 C++Builder简介2.2 数据库开发概念与原理2.3 经典案例解析的重要性3. 经典案例1:学生信息管理系统3.1 实现思路和需求分析3.2 数据库设计与建模3.3 编码与功能实现细节4. 经典案例2:图书借阅管理系统4.1 实现思路和需求分析4.2 数据库设计与建模4.3 编码与功能实现细节5. 结论与展望5.1 主要研究结果总结5.2 存在的问题与改进方向提出引言1.1 背景和意义随着信息技术的飞速发展,数据库已成为各个领域中不可或缺的组成部分。
数据库开发是利用计算机系统进行数据管理和处理的关键任务之一。
而C++Builder作为一种强大而灵活的开发工具,广泛应用于软件开发领域。
本文将通过经典案例解析的方式,探讨C++Builder在数据库开发中的应用。
通过深入剖析两个经典案例:学生信息管理系统和图书借阅管理系统,我们可以了解到C++Builder在实际项目中的优势和应用方法。
1.2 结构概述本文将按照以下结构展开:•第一部分:引言。
介绍本文的背景、意义以及文章结构。
•第二部分:基本概念介绍。
对C++Builder和数据库开发的相关概念进行简要概括,并说明经典案例解析对于理解这些概念的重要性。
•第三部分:经典案例1:学生信息管理系统。
详细阐述该系统的实现思路与需求分析,以及数据库设计与建模过程,最后介绍编码与功能实现细节。
•第四部分:经典案例2:图书借阅管理系统。
类似地,我们将深入分析该系统的实现思路与需求分析,数据库设计与建模过程,并介绍编码与功能实现细节。
•第五部分:结论与展望。
总结本文的主要研究结果,并提出存在的问题和改进方向。
1.3 目的本文旨在通过对C++Builder数据库开发经典案例的解析,帮助读者理解C++Builder在实际项目中的应用。
通过学习这些经典案例,读者可以熟悉数据库开发的基本概念和原理,并掌握C++Builder在处理数据库相关操作时的技巧和方法。
C++Builder程序设计经验五则C++Builder程序设计经验五则夏登城---- 一、数据库程序设计---- Borland C++Builder与Delphi一样使用BDE(BorlandDatabase Engine)数据库接口,特别是它使用BDE Administrator统一管理数据库别名,使得数据库操作与数据库文件位置无关,从而使数据库开发更容易操作。
但在发布应用数据库程序时我们不得不同时“发布”BDE,对于一些简单的数据库程序来说,可能BDE比我们的自己设计的程序还大,而且如使用InstallShield配置BDE,添加数据库别名,很可能会配置失败。
所以我们可以采用如下方法:在程序设计阶段仍采用BDE管理数据库别名进行调试,但在程序初始化时(如在主窗体的OnCreate事件处理函数中)修改Table部件的DatabaseName属性,如使用类似如下语句:Table1->DatabaseName = ExtractFilePath(Application->ExeName);或Table1->DatabaseName= ExtractFilePath(Application->ExeName+”DB”);---- 这样,对调试阶段没有什么影响,发布应用程序时只要将Table1使用的数据库文件放在当前目录或其“DB”子目录下,数据库程序即可正常运行。
甚至您还可以将数据库文件所在目录以字符串形式写入注册表(可在安装程序中设置),然后在程序初始化时从注册表获取目录名,赋值给DatabaseName属性即可。
无论怎样,您不必强迫用户安装相对庞大的BDE了。
---- 二、注册表存取---- 在我们在设计Windows 9x/NT程序时经常需进行注册表信息的存取,如读取程序配置信息、保存配置信息等。
写一个注册表存取子程序就很有必要。
当需存取注册表时,直接调用此子程序即可,而不必每次都重复一些操作。
文章标题:C++ Builder 5高级编程实例精解一、C++ Builder 5高级编程实例概述C++ Builder 5是一个强大的集成开发环境,它能够帮助开发者快速而高效地构建Windows应用程序。
它结合了C++语言的强大性和可视化编程工具的便利性,为开发者提供了丰富的组件库和丰富的编程示例。
在本文中,我们将深入探讨C++ Builder 5高级编程实例,旨在帮助读者深入了解该环境下的高级编程技巧和应用实例。
二、C++ Builder 5高级编程实例解析1. 多线程编程实例在C++ Builder 5中,多线程编程是一个重要的高级技术,它能够提高程序的并发性和效率。
通过使用C++ Builder 5提供的多线程库,开发者可以轻松地实现多线程程序,并进行资源共享和同步控制。
可以利用多线程技术实现一个并发下载器,提高文件下载的速度和效率。
2. 数据库编程实例C++ Builder 5提供了丰富的数据库编程组件,使得开发者可以方便地连接数据库并进行数据操作。
利用这些组件,开发者可以实现诸如数据的增删改查等功能,并且可以轻松地构建数据驱动的应用程序。
可以利用C++ Builder 5实现一个简单的学生信息管理系统,实现学生信息的录入、查询和统计等功能。
3. 图形界面编程实例C++ Builder 5支持快速可视化界面设计,开发者可以通过拖拽和组件配置来实现丰富的用户界面。
借助C++ Builder 5提供的图形界面库,开发者可以实现各种图形效果和交互功能,使得应用程序更加美观和易用。
可以利用C++ Builder 5实现一个简单的绘图工具,实现各种图形的绘制和编辑功能。
三、总结与展望通过以上的C++ Builder 5高级编程实例解析,我们可以看到该环境下的丰富功能和灵活应用。
多线程编程、数据库编程和图形界面编程是C++ Builder 5中的核心技术,它们为开发者提供了丰富的编程资源和便捷的开发工具。
C++Builder三方组件(图文详解)C++builder第三方控件包的安装使用图文教程整理:墨羽---(控件包有需要的可直接与本人联系,我可以邮箱发送)教程使用的组件包名为iocomp,本人非专业编程人员,只是为实验室的项目做上位机界面,简单使用了这款组件包,感觉灰常强大。
从网上搜集的安装方法,亲自使用没有什么问题,将之分享出来,欢迎广大行家里手批评指正。
1、File->Open->找到你要安装的第三方控件的.BPK文件,打开2、在弹出的窗口中点击Compile3、编译成功后再点击Install4、关闭窗口,提示是否保存,选择“是”5、重新启动C++Builder或者是:1、component->Install component->Package file name->Browse2、同上或者是:1、component->Import ActiveX->Package file name->Browse->找到你想要安装的OCX->Install ->ok2、同上6、从控件栏选择某一控件拖放到界面窗口,如一按钮控件,运行(F9),会出现该头文件无法找到的情况。
7、头文件需要自己找到对应的控件添加进去,(也可尝试一直点取消),直到出现8、显然,需要我们手动将组建包中的各种头文件放到编译器能找到的位置。
点“工程->选项”,从选项卡中选择“Directories/Conditionals”,打开Directories->include path后面的“…”9、再次点击“…”10、找到你的组件包存放位置,选中组件包文件夹,依次点“确定”“添加”“确定”“确定”型,于是手动修改代码中的头文件名为.hpp类型(此处不知是否有更快捷的方法)12、运行成功。
Borland C++ Builder 5.0是Inter pries(Borland)公司推出的基于C++ 语言的快速应用程序开发(Rapid Application Development,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。
C++Builder 充分利用了已经发展成熟的Delphi 的可视化组件库(Visual Component Library,VCL),吸收了Borland C++ 5.0 这个优秀编译器的诸多优点。
C++Builder 结合了先进的基于组件的程序设计技术,成熟的可视化组件库和优秀编译器,调试器。
发展到5.0版本,C++Builder 已经成为一个非常成熟的可视化应用程序开发工具,功能强大而且效率高。
C++Builder的特色:1.C++Builder 是高性能的C++开发工具C++Builder是基于C++的,它具有高速的编译,连接和执行速度。
同时,C++Builder具有双编译器引擎,不仅可以编译C/C++程序,还能编译Object Pascal语言程序。
2.C++Builder是优秀的可视化应用程序开发工具C++Builder是一完善的可视化应用程序开发工具,使程序员从繁重的代码编写中解放出来,使他们能将注意力重点放在程序的设计上,而不是简单的重复的劳动中。
同时,它提供的完全可视的程序界面开发工具,从而使程序员对开发工具的学习周期大大缩短。
3.C++Builder具有强大的数据库应用程序开发功能C++Builder 提供了强大的数据库处理功能,它使的程序员不用写一行代码就能开发出功能强大的数据库应用程序,这些主要依赖于C++Builder众多的数据库感知控件和底层的BDE数据库引擎。
C++Builder除了支持Microsoft的ADO(Active Data Object)数据库连接技术,还提供了一种自己开发的成熟的数据库连接技术——BDE(Borland Database Engine)数据库引擎。
C++ builder 的文件读写操作总结在编程的过程中,文件的操作是一个经常用到的问题,在 C++Builder 中,可以 使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于 C 的文件操作; 2、基于 C++的文件操作; 3、基于 WINAPI 的文件操作; 4、基于 BCB 库的文件操作; 5、特殊文件的操作。
1. 基于 C 的文件操作 在 ANSI C 中,对文件的操作分为两种方式,即流式文件操作和 I/O 文件操 作,下面就分别介绍之。
1)流式文件操作 这种方式的文件操作有一个重要的结构 FILE, FILE 在 stdio.h 中定义如下:以下是引用片段: 以下是引用片段: typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char _FAR *buffer; /* Data transfer buffer */ unsigned char _FAR *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */ FILE 这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结 构的指针来进行,此种文件操作常用的函数如下: 函数 功能 fopen() 打开流fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串到流 fgets() 从流中读一行或指定个字符 fprintf() 按格式输出到流 fscanf() 从流中按格式读取 feof() 到达文件尾时返回真值 ferror() 发生错误时返回其值 rewind() 复位文件定位器到文件开始处 remove() 删除文件 fread() 从流中读指定个数的字符 fwrite() 向流中写指定个数的字符 tmpfile() 生成一个临时文件流 tmpnam() 生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen 的原型是:FILE *fopen(const char *filename,const char *mode), fopen 实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流 返回一个 FILR 指针。
C++Builder 自定义消息处理总结这几天忙着弄一个SSDT HOOK驱动,一环扣一环啊,无奈要去理解一下C++Builder是怎么定义自定义消息的。
网上资料很多,看了几篇,觉得有必要总结下。
也希望找到这篇文章的同志,可以省点力气...首先,简单讲一下C++Builder的消息机制,BCB的消息处理集成在每个控件类中,首先主窗口有一个最大的消息处理循环函数MainWndProc,这个函数针对一些由BCB特定的消息做处理,其他的则交给WINAPI函数WndProc来处理,这个函数是虚拟函数,在子类中可以具体制定相应的处理函数。
WndProc函数也只是初步处理消息,最后还是要调用控件类自己定义的Dispatch函数,这个函数也能被重写,这点告诉我们,我们可以重新写一个DisPatch 函数来处理我们自定义的消息。
这就是以下的第一种方法:第一种方法:在TForm1窗体类中的private成员区中加上:void __fastcall Dispatch(void * Message);//overwrite····在cpp中的实现为:void __fastcall TForm1::Dispatch(void * Message){TForm::Dispatch(Message);PMessagepMsg=(PMessage)Message;if(pMsg->Msg==(unsigned int)msgnum)ShowMessage(AnsiString(msgnum)); //接收消息}其中msgnum为RegisterWindowMessage("MSG_MY");有人会问,如果这样重写了,那么系统其他发往本程序或者控件的消息会不会失去处理了呢?答案是否定的,BCB里采用了一套机制来防止这种情况,大概的原理是,先让用户的函数来处理函数,处理完毕后交给它本身所提供的函数来处理。
掌握C++builder的除错艺术(2).12007-8-10作者:编辑:眼镜丢了点击进入论坛掌握C++Builder的除错艺术第二篇-近距离观察(1)1.调试可执行程序前的准备2.工程选项3.设置断点并闯入可执行程序4.察看储存在变量中的值5.使用Watches(观察)6.使用Inspectors(巡视器)7.使用Evaluate/Modify(求值/修改)8.Stepping Through,Over and Around Blocks of Code9.Stepping的类型10.Stepping的注解11.其他提示Okay,(再小小准备一下)现在开始追踪、搜索经过前次的努力后仍然躲在代码中的bug的时候了,也就是开始跟踪前一篇文章代码里标记过的bug/异常。
首先是准备阶段。
调试可执行程序前的准备在我们开始调试可执行程序前,我们需要确保一些设置在大多数情况下的正确性。
我将会一条接一条的过一遍,并简单解释一下为什么必须那样做。
(如果您对有些东西感兴趣的话,按下帮助按钮,会有许多更详尽的内容)。
现在就开始吧,先打开Project|Options选项。
工程选项首先我们在"Compiler"(编译)标签处停下。
您只需简单的单击"Full debug"(完全调试模式)按钮,我们所需的绝大多数的其余设置就已经搞定了。
将"Code optimization"(代码优化)设为"None"(无)总是件好事,这样做实际上告诉编译器:所有的事情都已做好,只需产生机器码就行了。
而不要为了提高一点点运行速度尝试进行其他的智能优化。
(当然,一切都完成之后,您可以打开此项。
)这样做的好处是大大降低了我们调试的难度。
因为程序中的代码与我们书写的一样,没有被编译器优化过。
在"debugging"(调试)面板中,将"Debug information"(调试信息)选上(点一下),并且必须设置为"Line number information"(行数信息)。
1 串口接收程序使用:int i,j;String s;unsigned char *ReadBuffer=(char *)malloc(BufferLength);memcpy(ReadBuffer,Buffer,BufferLength); //C语言基础性东西for(i=0;i<BufferLength;i++){s = s + IntToHex(*ReadBuffer++,2)+ ' ';存}Memo1->Text = Memo1->Text + s;Memo1->SelStart = Memo1->Text.Length();Memo1-> SelLength = 0;// free(ReadBuffer);//因为使用了ReadBuffer计算故不能释放内2 将Edit中的内容输入十六进制转换(其实是字符串转换为十六进制发送)AnsiString HexValue= "0x "+Edit1-> Text;int DecValue=StrToInt(HexValue);再进化一下TestCmd[i++] = StrToInt("0x"+Edit2->Text);2 Read txtvoid __fastcall TForm1::Button1Click(TObject *Sender) {StringGrid1-> Align=alClient;StringGrid1-> ColCount=5;StringGrid1-> Cells[0][0]= "城市 ";StringGrid1-> Cells[1][0]= "天气 ";StringGrid1-> Cells[2][0]= "最低气温 ";StringGrid1-> Cells[3][0]= "最高气温 ";StringGrid1-> Cells[4][0]= "风力 ";char const *Path = "aaa.txt ";if(!FileExists(Path))return;TStringList * thelist=new TStringList();thelist-> LoadFromFile(Path);int rowCount;rowCount=thelist-> Count;StringGrid1-> RowCount=rowCount;TStringList * list2=new TStringList();for(int k=0;k <rowCount-1;k++){String s;s=thelist-> Strings[k];s=AnsiReplaceStr(s, ", ", "\n\r ");list2-> Clear();list2-> DelimitedText=s;StringGrid1-> Cells[0][k+1]=list2-> Strings[0];StringGrid1-> Cells[1][k+1]=list2-> Strings[1];StringGrid1-> Cells[2][k+1]=list2-> Strings[2];StringGrid1-> Cells[3][k+1]=list2-> Strings[3];StringGrid1-> Cells[4][k+1]=list2-> Strings[4];}delete list2; list2=0;delete thelist; thelist=0;}3 循环时响应外部事件在循环的时候,操作窗口不能动作,可在循环中加入:Application->ProcessMessages();this->Update();注意不是在程序刚开始加入就OK,而是要在每次循环中加入才能起作用4 增加换行String + char(13)+char(10)5同一事件共用代码如何在CB中用Sender实现代码重用?答:面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),宝兰的BCB当然可以实现这一功能。
我们都知道,在BCB中,大部分程序代码都直接或间接的对应着一个事件,此程序称为事件处理句柄,它实际上就是一个过程。
从应用程序的工程到窗口、组件和程序,BCB强调的是其开发过程中每一层次的重用性,可以充分利用已编写过的代码来减少工作量,更会使你的程序变得优美。
代码段间的共享都跟发生该事件的控件有关有关,需要根据控件类型做出相应的处理,这时就要用到Sender参数。
每个函数的开头都有形如:void _fastcall TForm1::Button1Click(TObject *Sender)其中的Sender是一个TObject类型的参数,它告诉BCB哪个控件接收到这个事件并调用相应的处理过程。
我们可以编写一个单一的事件处理句柄,通过Sender参数和if语句或者case语句配合,来处理多个组件。
在Delphi中可以用IS来测试Sender类型,或者用AS进行类型转换,BCB我们只在用dynamic_cast 来进行上面两个工作。
1.进行判断我们用dynamic_case来测试Sender,以便找到调用这个事件的处理句柄或组件的类型。
如,我们将窗口中的编辑框和标签的Click事件的处理句柄都指向窗口的xxx函数(其实你只要先把一个控件的Click事件命名为xxx,并在其中写上共享代码,其它控件的Click事件都指向xxx就行了),本例中的编辑框和标签对Click事件将有不同的反应,代码如下:void __fastcall TForm1::xxx(TObject *Sender){if(dynamic_cast<TEdit *>(Sender))ShowMessage("This is a editbox");if(dynamic_cast<TLabel *>(Sender))ShowMessage("This is a label");}当然若是多个同类组件,只是想共用一个事件,那要比这简单多了。
举个例子,若你的很多编辑框(Edit),你想在输入某一项的时候先把这一项清空,你只要写一个OnEnter事件就可以了:void __fastcall TForm1::Edit1Enter(TObject *Sender){TEdit *Edittemp=(TEdit*)(Sender);//把不同的编辑框统一起来Edittemp->Text="";}其它的Edit组件的OnEnter事件都指向Edit1Enter,这样就行了,试一下,是不是鼠标放在编辑框里一点就清空了 其实这里只是把不同的编辑框(Sender 清楚是那一个编辑框)统一起来,好用一个共同的事件来处理。
你在同一组件共用同一事件时一定要注意这一点。
printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。
N指精度。
用于说明输出的实型数的小数位数。
为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。
h用于将整型的格式字符修正为short 型。
----------------------------------格式字符格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。
有以下几种用法:%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。
如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。
对长整型可以用"%lo"格式输出。
同样也可以指定字段宽度用“%mo”格式输出。
例:main(){ int a = -1;printf("%d, %o", a, a);}运行结果:-1,177777程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
③x格式:以无符号十六进制形式输出整数。
对长整型可以用"%lx"格式输出。
同样也可以指定字段宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。
对长整型可以用"%lu"格式输出。
同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。
有几中用法%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。
若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。
这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。
如果n>m,则自动取n值,即保证n个字符正常输出。
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。
有以下几种用法:%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:以指数形式输出实数。
可用以下形式:%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。
此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
----------------------------------关于printf函数的进一步说明:如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:-printf("%f%%", 1.0/3);输出0.333333%。