BCB编程过程中的各种问题集锦

合集下载

经典 BCB编程实例及基础讲解

经典 BCB编程实例及基础讲解
C++ Builder的主要特点
C++Builder(以后简称CBuilder)是Borland公司在Delphi成功的基础上开发的可视化C++编程工具,什么?等等!也许有的朋友会问:Borland以前不是出了一个Borland C++吗,难道CBuilder不是从BC演变而来?不错,CBuilder确实也吸取了不少BC的好东西,但CBuilder可视化编程的关键——Visual Component Library(VCL,可视化元件库)却是从Delphi搬过来的,因此CBuilder象Delphi比象BC更多一些。CBuilder面世的时间虽然不长,但几乎是以最快速度成为最流行的C++编程工具之一,由于自身的优秀品质,它受到了越来越多的程序员的喜爱,目前最新版本已经出到了5.0。
第5步选择安装类型(图1-1),所列的安装类型包括典型、简洁、自定义和完全安装四种类型。其中完全安装(Full)的内容最完整,包括CBuilderIDE、BDE(Borland数据库引擎)、数据库桌面等,典型安装(Typical)只比完全安装缺少MFC支持和微软SDK帮助文档,简洁安装(Compact)则只包括CBuilder的主程序和ITE(Internet Translate Environment)、CodeGuard等少数工具。自定义安装(Custom)是由用户选择安装内容。另外还有一个“仅配置注册信息”的选项,用于修复以前的安装信息,如果选取了该选项,则仅仅对安装过程中搜集到的信息进行注册,安装过程中不拷贝或只拷贝很少的必需文件,在第一次安装时不要选中该选项。为了能够充分体验CBuilder5的强大功能,心铃建议大家在这一步选择完全安装,大约需要388MB的硬盘空间。

BCB基础

BCB基础

第一部分:基础入门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表示大小不可变的标准的对话框边界。

bsSingle表示大小不可变的单线边界。

常见的少儿编程学习难题及解决方法

常见的少儿编程学习难题及解决方法

常见的少儿编程学习难题及解决方法随着科技的不断发展,编程已经成为了一项越来越重要的技能。

在当前的教育体系中,越来越多的学校将编程纳入到课程中,以培养学生的创造力和解决问题的能力。

然而,对于许多少儿来说,学习编程并不是一件容易的事情。

本文将探讨常见的少儿编程学习难题,并提供一些解决方法。

一、缺乏兴趣和动力对于很多少儿来说,编程可能是一个全新的领域,他们可能对此并没有太大的兴趣。

此外,编程需要一定的耐心和坚持,这对于一些孩子来说也是一种挑战。

为了解决这个问题,家长和老师可以采取以下措施:1. 创造有趣的编程项目:通过设计有趣的编程项目,可以激发孩子的学习兴趣。

例如,可以让孩子编写一个小游戏或者制作一个动画片。

2. 奖励机制:设立一些小奖励,如小红花或者小礼物,以激励孩子的学习动力。

3. 鼓励合作学习:让孩子和其他同学一起学习编程,可以增加学习的乐趣,同时也可以互相帮助和激励。

二、缺乏系统性的学习方法编程是一门需要系统性学习的技能,而许多孩子缺乏这种系统性的学习方法。

他们可能只是零散地学习一些编程知识,而没有建立起完整的知识结构。

为了解决这个问题,可以采取以下方法:1. 选择适合的教材:选择一本适合孩子年龄和水平的编程教材,教材应该有清晰的章节划分和逐步深入的内容。

2. 建立学习计划:为孩子制定一个合理的学习计划,明确每天或每周需要学习的内容和目标。

3. 注重实践:编程是一门实践性很强的技能,让孩子多做一些实践项目,可以帮助他们更好地理解和掌握编程知识。

三、缺乏编程思维编程思维是指一种解决问题的方式,它强调逻辑思维、创造性思维和系统思维。

然而,许多孩子在学习编程时缺乏这种思维方式。

为了培养孩子的编程思维,可以采取以下方法:1. 鼓励问题解决:让孩子遇到问题时,先自己思考和尝试解决,培养他们的解决问题的能力。

2. 提供挑战性的项目:给孩子一些有挑战性的编程项目,鼓励他们思考和尝试新的解决方法。

3. 培养抽象思维:编程需要一定的抽象思维能力,可以通过一些逻辑游戏和思维训练来培养孩子的抽象思维能力。

BCB 6中开发Office(主要是Excel)程序的心得

BCB 6中开发Office(主要是Excel)程序的心得

在本文中,我将结合我的个人经验,和大家讨论一下在BCB 6中开发Office(主要是Excel)程序的心得。

一、用控件还是用OLEAutomation?这个问题应该说很常见。

我也在任何可能的情况下坚持我的主张:用BCB 6提供的Server 控件组。

如果你是用Delphi 6/7版本开发,那么用Delphi提供的Server控件组。

这样做有什么好处?我个人认为至少有如下两个:第一,维护结构化+OO的程序设计风格。

例如:ExcelApplication1->set_DisplayAlerts(0,false);ExcelApplication1->Quit();又如:int SheetCount=ExcelWorkbook1->Worksheets->Count;这些代码都还是比较直观的。

而且很具有OO的美感。

第二,强类型检查胜于弱类型检查。

如果使用OleGetProperty或者OleSetProperty函数,那么对传递给这两个函数的参数,是没有办法控制的。

例如,我完全可以随心设置一个单元格的属性FOO为100。

但是这样的函数调用在运行期一定会出错。

而使用Server控件就不会有这个问题——编译期就不能通过。

可以在编译期发现并纠正的错误,不要留到运行期去解决。

这是我的主张。

二、必要的辅助手段使用BCB编写控制Excel的程序,是很繁琐的。

因为有时编译通过后会出现难以琢磨的异常!又有一种很无助的感觉:BCB在这上面的帮助简直是BS。

CodeInsight的速度又是相当的慢,无法忍受!不过,我们不要轻易放弃。

根据我的经验,在BCB下要想好好掌握Excel编程,必须掌握三个获得帮助的途径。

这三个获得帮助的途径就是(以我个人喜好的程度降序排列):1. Excel本身的宏命令。

我现在的习惯是,如果我要在BCB中实现一个功能,但是却不知道相应的方法和参数,我就会打开Excel,在随便一个Sheet中用宏记录下我要进行的操作,然后研究宏代码。

a+b问题c++语言题解

a+b问题c++语言题解

a+b问题c++语言题解(原创版)目录1.问题描述2.C++语言的基本概念3.a+b 问题的解决方案4.C++语言题解的实现5.总结正文1.问题描述a+b 问题是一个简单的数学问题,要求求解两个数 a 和 b 的和。

在计算机编程中,这个问题可以通过各种编程语言来实现。

本文将使用C++语言来解决这个问题。

2.C++语言的基本概念C++是一种通用编程语言,它具有高性能、通用性和可移植性。

C++语言的基本概念包括变量、数据类型、运算符、控制结构、函数、类等。

在解决 a+b 问题时,我们需要了解 C++语言的基本概念和语法规则。

3.a+b 问题的解决方案要解决 a+b 问题,我们可以使用 C++语言中的基本语法和运算符。

首先,我们需要定义两个变量 a 和 b,然后使用运算符 + 来计算它们的和。

最后,我们需要输出结果。

下面是一个简单的 C++代码示例:```cpp#include <iostream>using namespace std;int main() {int a, b, sum;cout << "请输入两个整数:";cin >> a >> b;sum = a + b;cout << "两数之和为:" << sum << endl;return 0;}```4.C++语言题解的实现根据上述解决方案,我们可以实现一个 C++语言题解。

首先,我们需要创建一个 C++源文件,例如:a_b_problem.cpp。

然后,我们将上述代码复制到该文件中,并保存。

接下来,我们需要使用 C++编译器(例如:g++)来编译这个源文件。

在命令行中,我们可以输入以下命令:```bashg++ a_b_problem.cpp -o a_b_problem```编译成功后,我们会得到一个名为 a_b_problem 的可执行文件。

BCB第二讲C++ Builder集成开发环境(上)

BCB第二讲C++ Builder集成开发环境(上)

C++ Builder 集成开发环境(上)介绍一个新软件,总免不了要介绍该软件的用户界面,如菜单、工具条等等的使用方法,也许有的朋友会说“我的E 文不错,又有过使用IDE 编程开发的经验,所以这一步可以省了。

”,但所谓“磨刀不误砍柴功”,CBuilder 集成开发环境具有相当丰富的功能,如果能够熟练掌握这些功能,势必会大大提高我们的工作效率。

当然,仅仅通过短短的讲座没有办法在短时间内对CBuilder 集成开发环境进行详细的介绍,但心铃仍然希望借此大家能对CBuilder 的使用和操作有一个初步的了解,并为进一步学习打下一个良好的基础。

CBuilder 集成开发环境采用了浮动式窗口/工具条的界面风格,如图2-1所示。

缺省的集成开发环境由主菜单、工具条、元件面板、对象浏览器、窗体编辑器、代码编辑器和类浏览器组成,用户还可以通过View 菜单中的一系列命令来定制自己习惯的窗口布局。

菜单CBuilder 的菜单命令非常多,主菜单就有10个菜单栏,上百个菜单项,另外还有众多右键关联菜单。

主菜单和关联菜单一起涵盖了CBuilder 集成开发环境支持的所有操作命令。

许多常用菜单命令都有加速键,如F9(调试运行)、Ctrl+S (保存文件)等,熟练使用这些加速键可以提高编程时的工作效率。

主菜单按不同用途分为10个菜单栏。

File菜单中主要包括与文件操作有关的命令,其中最常图2-1:C++ Builder IDE 的外观和组成用的是新建工程(New Application )、打开工程(OpenProject )、打开文件(Open )和保存(Save )。

另外一个非常有用的命令是新建对象(New ),它会调出如图2-2所示的对话框。

CBuilder 中有许多预先建立的对象模版和向导,如各种类型的工程、不同用途的窗体等等,从New Items 对话框中选择一种对象模版或向导,可以让你按照向导的指示生成一个新的对象,许多高级的功能都可以通过这种方式实现,从而避免了大量手工重复性的劳动。

C++Builder (BCB)编程规范

C++Builder (BCB)编程规范

C++Builder (BCB)编程规范 之 鲨鱼美美版本鲨于2002年出道,直今的2004年,快有两年啦! 时间流逝可真快! 毕业后共打了四份工,全部是做软件书写师。

都涉及到数据库的领域!.不过薪金也逐步提高了 从50,130,150,到250英镑。

每次进一家公司,不是去做开发而是做维护。

所以修改代码,调试程序,找出BUG。

简直是莫大的痛苦,尤其是修改那些用管C语言人开发的程序,乃是今生莫大的痛苦呀!就逐步总结了一些可行的经验。

1 单元每个单元只包含一个类的声明。

类中不永许写类的实现,类成员函数不超过20个,需要被外界调用的成员函数放在Public外,其余的全部放在Proteced,明确的不想让继承者修改的话放在Private中。

包含的头文件 也就是#include <VCL.h> 在头文件应该包含该类所需要的类型的。

如果cpp也包含了,那么头文件就不要在包含,使用Class vcl; 告诉头文件有些需要的已经在CPP文件中包含啦!另外对不再使用的包含文件要及时的清除出去,否则可能碰到连接出错的问题,bcb的连接提示少的可怜啊!就有苦头吃拉!还有要记得给自己加进的包含写注解啊!!2 实现文件中千万不要定义全局变量和全局函数,至于会发什么问题啦,只有碰到了几十万的代码,五六个项目集合,一两百个单元所可能发生的问题。

那该怎么办了? 简单把它归到所在单元的类声明中去。

函数的实现代码行不要超过200行 包括之间的空格.因为人的暂时记忆能力不强啊! 为什么文章要分段落啊! 就是人暂存上下文的关联的内存是有限的呀3 组件的属性设置和数据库的字段表名:一般下都会在对象检查器中的设置。

当调试过不去而你又忘记了设置的属性时的哭相,是多么地可气啊!而且BCB没有组件之间的比较,否则的话可以拖个同样的新组件来比一比到底哪里设置的不同! 所以没有办法只好麻烦些直接在代码中设置吧! 虽然很麻烦 却可以节省比较可观的时间呀! 要不就像 kateboy (老公)由于设置了ADOConnection 的Attrib里中的自动事务处理。

atcoder abc题解合集

atcoder abc题解合集

AtCoder ABC题解合集AtCoder是一个非常知名的上线技术竞赛评台,拥有大量高质量的比赛和题目。

其中,AtCoder Beginner Contest(ABC)是为初学者设计的比赛,每周都会举行。

在这个比赛中,主办方会发布4个问题,分为A、B、C、D四个等级。

题目涵盖了数学、逻辑、编程等多个领域,对于提高编程能力和算法理解非常有帮助。

以下是对AtCoder ABC比赛中一些典型题目的解答合集,希望能对广大参赛者有所帮助。

一、A题A题是ABC比赛中最简单的一道题,通常是一个很容易理解和解答的数学问题,往往能在5-10分钟内完成。

下面是一道典型的A题:问题描述:给定两个整数a和b,求它们的和。

解答:这是一个非常简单的数学问题,只需要将a和b相加即可得到结果。

具体的代码如下:```cpp#include <iostream>using namespace std;int m本人n(){int a, b;cin >> a >> b;cout << a + b << endl;return 0;}```二、B题B题比A题稍微难一些,通常需要一些基本的编程技巧和逻辑思维。

下面是一道典型的B题:问题描述:给定一个长度为N的字符串S,将其每隔K个字符用"-"分隔,并在末尾不加"-",输出最终的字符串。

解答:这是一个字符串处理的基础问题,需要用到循环和字符串的截取功能。

具体的代码如下:```cpp#include <iostream>#include <string>using namespace std;int m本人n(){int N, K;string S;cin >> N >> K >> S; for (int i = 0; i < N; i++) {if (i K == 0 i != 0) {cout << '-';}cout << S[i];}cout << endl;return 0;}```三、C题C题是ABC比赛中的一道中等难度题目,通常需要一些较为复杂的算法和数据结构知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++需要掌握:类、构造函数、析构函数、函数重载、运算法重载;私有成员、公有成员、保护成员的作用域。

一:安装1、找到INSTALL文件夹里,双击Setup,注册码可从注册机中获得。

安装时选择custome方式,最好装在c盘(即使装在D盘,重做系统后也必须重装)。

2、注意一些选项勾选去掉就可以,不装VisiBroker和interbase,可以不备份uninstall信息。

3、安装完成后,重新启动计算机,打开BCB,会提示注册,再打开注册机,将所给的三个代码全部输入到注册机中,注册机会自动给出第四个代码,将其粘贴到空白选项内,即可完成注册。

4、Win7系统注意:帮助文档安装不上的需要另外安装一个更新包,将帮助文档连接上即可,此更新包叶连杰有。

此外还会出现管理权限问题,可通过各盘右键单击,属性->安全->编辑中将所有用户的完全控制打钩即可。

二:开始运行1、创建工程File->New->Application2、修改Tabsize,菜单tools->Editor Option->Tab Stops=43、保存:创建一个工程目录,下建sourse子目录,用于存放工程源文件。

会先提示保存窗体和类的名字,一般名字前加U表示Unit,窗体文件前面加UForm,再保存工程名一般名字前面加个Pro。

4、文件存放位置:通过Project->Options->Directories/Conditionals来设置,将运行程序产生的可执行文件、OBJ文件分别放在相应文件件内。

通常Debug source path内输入$(BCB)\source\ ;Intermediate output 内输入debug(相应文件存入debug内),Final output 内输入exe。

若要在上层文件夹内创建以上两个文件可在相应的输入前加..\ 。

为了产生的文件可以在没有C++Builder的计算机上运行还要通过Project->Options->Linker内取消Use dynamicRTL选项的勾选、Project->Options->Packages内取消Build with runtime packages选项的勾选最后单击Complier->单击Release。

三:常用组件1.Standard选项卡中PopupMenu, Label, Edit, Memo, Button, CheckBox, RadioButton, ListBox, ComboBox, GroupBox,(RadioGroup, Panel)2.Aditional选项卡中StringGrid, LabelEdit, Chart(MaskEdit, Image, CheckListBox, ColorBox)3.Win32选项卡中PageControl, (DateTimePicker, StatusBar)4.System选项卡中Timer, MediaPlayer5.Win31选项卡中FileListBox, DirectoryListBox, DriveComboBox, FilterComboBox.6.Dialog选项卡中OpenDialog, SaveDialog(ColorDialog)做菜单程序要用到的: MainMenu, ActionList, ImageList, Toolbar四:常用函数(一)字符串AnsiString相关1、SubString(start,num) 字符截取函数start为起始位置,num为截取字符个数2、Delete(start,num) 删除字符start为起始位置,num为截取字符个数3、Length() 计算字符串长度4、Pos(start) 计算start在该字符串内的位置5、Trim 去除字符串左右的空格6、UpperCase() 将字母改成大写7、strcpy(目标,源)用于两个字符指针char*间的赋值(二)字符串转换IntToStr, FloatToStr, IntToHex,FormatStringStrToInt,StrToFloat.c_str String类型的字符串形式(AnsiString型转换成char*型)(三)获取文件信息1.ExtractFileName 从全路径文件名中获取文件名2.ExtractFilePath 从全路径文件名中获取路径包括最后的”\”3.ExtractFileDir4.ExtractFileExt(四)文件操作1.FileExists(“start”) 检测文件夹内是否存在文件名为start的文件2.CopyFile3.MoveFile4.DeleteFile(五)类的转换(用于批量处理类似的组件或者实现多个组件共用一个事件函数) dynamic_cast<类型名>(变量名)五:串口通讯用到的函数CreateFile 打开串口CloseHandle 关闭串口SetCommState 导入参数GetCommState 导出参数SetupComm(现在用不上)SetCommTimeoutsClearCommErrorReadFileWriteFile串口参数变量类型COMMTIMEOUTS commtimeoutDCB dcb1,dcb2;COMSTAT comstat1,comstat2;六:网络通讯用到的组件InterNet选项卡下的ClientSocket和ServerSocket实验要求:编写两个工程,或在同一个工程的两个窗体下,完成两个网络通讯组件的全部功能测试服务器:1.组件的配置(端口)2.打开和关闭3.客户端管理4.断开某个客户端5.向指定客户端发送数据6.接收某个客户端发来的消息7.各种事件的响应客户端:1.组件的配置(IP、端口)2.连接和断开服务器3.向服务器发送消息4.接收来自服务器的消息5.各种事件的响应七:容器的使用1.定义:vector<TMsgFromClient *> MsgList;2.向容器里最后压入一个基本单元TMsgFromClient *MsgFromClient=new TMsgFromClient(CSocketMsg[ID]->StrIP,CSocketMsg[ID]->IntPort,StrMsgBody);MsgList.push_back(MsgFromClient);3.从容器中删除一个单元MsgFromClient=MsgList[0];MsgList.erase(MsgList.begin());OrigDataList.erase(OrigDataList.begin(),OrigDataList.begin()+HandleNum0-1);4.指针的容器要注意内存释放的时机八:自定义windows消息1.宏定义一个消息的名字及其编号(该宏定义在消息发送的单元及消息处理单元均应可见)#define WM_SSocket (WM_APP+405)2.在消息处理单元定义消息的处理方法#define WM_SSocketStatusChange (WM_APP+405) //由SSocket发来的信息#define WM_SSocketControlMsg (WM_APP+406) //外部发来,控制SSocketprotected: ……………………..//定义消息void __fastcall SSocketStatusChange(TMessage &Message);void __fastcall SSocketControlMsg(TMessage &Message);BEGIN_MESSAGE_MAPMESSAGE_HANDLER(WM_SSocketStatusChange, TMessage, SSocketStatusChange)MESSAGE_HANDLER(WM_SSocketControlMsg, TMessage, SSocketControlMsg)END_MESSAGE_MAP(TControl)3.定义消息协议//WPARAM(共32位):// 第1~4位(最低4位):Socket事件状态:(0~F)// 0--Accept(接受了客户端连接)// 1--Connect(客户端建立连接)// 2--DisConnect(断开连接)// 3--Listen(正在监听)// 4--Read(读到消息)// 5--Write(发送消息)// 6--GetSocket// 7--GetThread// 8--ThreadStart// 9--ThreadEnd// F--Error(出现错误)// 第5~18位(14位):错误代码// 第19~32位(14位):Client端口号//LPARAM(共32位):Client的IP地址从高到低4个部分各占8位4.消息的发送PostMessage(MessageHandle,WM_SSocket,(IntLocalPort<<18)+3,(IP[0]<<24)+(IP[1]<<16) +(IP[2]<<8)+IP[3]);5.编写消息处理函数的实现代码九:INI文件的使用TINIFILE *FileIni;FileIni=new TiniFile(FileName);StrMid=FileIni->ReadString(Section, key, Default Value);FileIni->WriteString(Section, key, Value);Delete FileIni;十:多线程ThreadTerminatedSuspendApplication->ProcessMessage()Terminate();Suspend()Resume();十一:数据库编程基本概念数据库、数据库表(字段、字段类型)、数据库引擎(ADO,BDE,ODBC)、SQL语言BCB编程1.加入数据库组件ADOConnection, ADOCommand, ADOQuery2.连接数据库ADOConnection->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+StrFileName+";Persist Security Info=False";ADOConnection->Connected=true;3.编写修改数据库的SQL语句的执行代码bool TModuleADO::ModifySQL(AnsiString StrSQL){ADOCommand->CommandText=StrSQL;try{ADOCommand->Execute();return true;}catch(...){ShowMessage("TCustomerData::ModifySQL错误:\n"+StrSQL);return false;}}4.编写查询数据库的SQL语句的执行代码bool TModuleADO::SelectSQL(AnsiString StrSQL){QuerySelect->Close();QuerySelect->SQL->Clear();QuerySelect->SQL->Add(StrSQL);try{QuerySelect->Open();}catch(...){QuerySelect->Close();ShowMessage("TCustomerData::SelectSQL错误:\n"+StrSQL);return false;}return true;}5.查询到的数据如何取出QuerySelect->Fields->Fields[i]->FieldName;//获取查到的数据集的字段名QuerySelect->FieldByName(StrField)->AsString.Trim()6.其他相关指令ADOConnection->GetTableNames(SLTableName,false);//获取数据库中的数据库表名日常遇到的问题1、命名规则:窗体命名为”UForm…”2、*.bpr和*.res不需要我们修改3、内存泄露:一定要注意处理内存泄漏的问题,定义一个指针后,在new之后一定要在使用后写上delete的程序,一般没要情况下建议直接用数组形式。

相关文档
最新文档