barriers / 阅读 / 详情

C++ Buidler 6中需要注意的几个问题

2023-06-07 08:15:57
TAG: idler
共1条回复
贝贝

一、引言

C++ Buidler和Dephi同为RAD的典范,它使得快速、高效、方便地开发程序成为可能。但是在使用C++ Buidler的过程中发现,不是仅仅熟悉C++ Buidler的VCL组件就能顺利地完成程序的编写,还需要注意一些容易忽视的细节。本文列举了一些遇到的问题,并提供解决办法,以供参考借鉴。

二、具体问题及解决办法

1.使用SQL语句操作数据库时,如果语句中出现了变量,同一变量不能进行重复使用

如:需访问数据表T1和T2中符合条件T1.T1_F1="01"及T2.T2_F1="01"的纪录,按照常规思维,只需在SQL语句中设置一个变量p,分别用来判断T1.T1_F1和T2.T2_F1的值是否为"01",BCB语句如下: if(ADOQuery1-Active)

{ ADOQuery1-Close();

ADOQuery1-SQL-Clear(); }

ADOQuery1-SQL-Text="SELECT * FROM T1, T2 WHERE T1.T1_F1=:p AND T2.T2_F1=:p";

ADOQuery1-Parameters-ParamValues["p"]="01";

ADOQuery1-Open();

但是在运行这段代码后,查询的结果为空。(在访问Access2003过程中得到证实)通过追踪SQL语句中的变量p,发现第二次调用p时,BCB没有对p赋值,即p为NULL;所以得不到期待的查询结果。正确的参数设置应该为: ADOQuery1-SQL-Text="SELECT * FROM T1, T2 WHERE T1.T1_F1=:p1 AND T2.T2_F1=:p2";

ADOQuery1-Parameters-ParamValues["p1"]="01";

ADOQuery1-Parameters-ParamValues["p2"]="01";

从上面可以看出,BCB对SQL语句中出现的每个赋值变量只使用一次。即使需要在SQL语句中对出现两次的变量赋予相同的值,也要申请两个变量,分别赋值。

2. goto语句的使用

在C++ Builder的goto语句中,如果保留字goto与目标标识之间有本地变量的初始化语句: goto EndMark;// EndMark为目标标识

int a=1;

EndMark:;

则运行goto语句时会报错,这给goto语句的使用带来不便,但如果在goto与目标标识之间加上一对花括弧,则可顺利运行: goto EndMark;

{

int a=1;

}

EndMark:;

C++ Builder将{}内的变量初始化理解为局部变量的初始化,局部变量的初始化不会对{ }外面的语句有影响。所以适当地使用花括弧,就可以消除C++ Builder对goto语句使用的限制。

3. 动态创建窗口带来的影响

动态创建窗口的好处是在不需要该窗口时可以用delete命令释放内存。但是由于窗口是在内存中完成创建和释放,也存在一些问题。如:在新建的Application中建立Form1、Form2和Form3,Form1上设有Button1和Edit1、Memo1,Form2上设有Button21、Button22和Edit2、Memo2,Form3上设有Button3和Edit3、Memo3.Form1-Button1的Click事件中动态创建窗口Form2,并设置Form2-Button21的Click事件显示窗口Form3,且Form1、Form2、Form3分别各有一个Edit1和Memo1,现在试图通过点击Form3上的Button3按钮分别将Edit3和Memo3中的文字赋给Form2的Edit2和Memo2构件,再通过点击Form2上的Button22按钮把Edit2和Memo2中的文字赋给Form1.

Form1中的函数: void __fastcall TForm1::Button1Click(TObject *Sender)

{

TForm2 * Form2_N=new TForm2(Form1);

Form2_N -ShowModal();

delete Form2_N;

}

Form2_N中的函数 void __fastcall TForm2_N::Button21Click(TObject *Sender)

{

Form3-ShowModal();

}

void __fastcall TForm2_N::Button22Click(TObject *Sender)

{

Form1-Edit1-Text=Form2-Edit2-Text;

Form1-Memo1-Text=Form2-Memo2-Text;

this-Close();

}

Form3中的函数: void __fastcall TForm3::Button3Click(TObject *Sender)

{

Form2-Edit2-Text=Form3-Edit3-Text;

Form2-Memo2-Text=Form3-Memo3-Text;

this-Close();

}

测试中发现,Form3上Edit3和Memo3中的文字不能赋值到Form2_N的Edit2和Memo2中,但Form2_N上Edit2和Memo2中的文字可以赋到Form1上的Edit1和Memo1中。

如果修改Form1中Button1的Click事件的执行语句,将创建Form2_N改为创建Form2,并将在其它地方出现的Form2_N改为Form2: void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form2=new TForm2(Form1);

Form2-ShowModal();

delete Form2;

}

这样,Form3上Edit3和Memo3中的文字就能赋给Form2的Edit2和Memo2了。

创建属于TForm2类的窗口Form2_N和Form2时,不同点在于,在创建Form2_N时(点击Button1时),需要向系统申请内存创建。Form2_N的创建过程 “TForm2 * Form2_N=new TForm2(Form1);”中包含了定义新的窗体类Form2_N和对其进行初始化两个动作, Form2_N在定义过程中申请了内存空间;而Form2是在Design-Time定义的窗体,在程序初始化时就完成了申请内存空间的动作。两种窗体申请内存的时间先后影响了它们对所传递数值的接受。

三、结语

C++ Builder中有些隐含的使用限制还不太直观,像动态窗口的创建会给窗口之间的变量赋值带来不便,而在Delphi中创建动态窗口(Form1:=TForm1.Create(self);)就不存在这样的问题。因此如果遇到在C++ Builder中的不能用一般方法解决的一些问题时,还需要进一步熟悉C++ Builder,细致分析,多进行尝试摸索解决,积累了一些经验,就可以提高编码效率。

相关推荐

builder什么意思

builder 英[u02c8bu026aldu0259(r)] 美[u02c8bu026aldu025a] n. 建设者,建筑者; 创建者; 经营建筑业者; 增洁剂,促净剂; [例句]The builders have finished the roof.建筑工人已经盖好了房顶。[其他] 复数:builders
2023-06-06 16:35:481

builder什么意思

builder的意思为:建筑工人。builder的基本释义为:n.建筑工人;建设者;建造者;营造商;泥瓦匠;创建者;创立者;创建某物的人。复数:builders.网络释义为:建造者模式;建造者;生成器;模式;生成器模式;建筑工人。短语搭配:1、body builder 健美运动员。2、empire builder 扩展帝国疆土的人;谋求扩张者。3、speculative builder 风险建造商;冒险房屋开发商。4、muscle builder 肌肉构建器;肌肉健壮器;增肌。它的同根词为:词根:buildBuilt:adj.身段优美的;由某某建成的。v.建造,build的过去分词。Build:n.构造;体形;体格。vi.建筑;建造。vt.建立;建筑。building n.建筑;建筑物。v.建筑;建立;增加(build的ing形式)。双语例句:1、The builder I"ve hired to renovate my new domicile.我雇来装修新家的建筑工人。2、Breaking the record was a real confidence builder.打破纪录确实可以使人树立信心。3、Currently he"s working in a hotel but in his own country he"s a builder.目前他在一家旅馆工作,但在他自己的国家,他是一名建筑工人。4、The tertiary phosphate of sodium used as a builder in soaps and detergents.一种钠的三代磷酸盐,用作肥皂和清洁剂增洁剂。5、Their product line included Way Way , Builder Builder, Light Show, and Musician.他们的产品包括探索者、塑造家家、灯光秀和音乐人。6、Harvard Business School has an "Elevator Pitch Builder" for alumni on its website.哈佛商学院网站上有一个为校友开设的“电梯游说策划”栏目。7、There are two major types of visuals in Flex Builder: styling and skinning.在Flex Builder中主要有两种类型的视觉效果:造型和外观。8、Skyway Builder users generally create a diagrammatic representation of the desired application functionality.SkywayBuilder的户通常都为所期望应功能创建一个图形表示。9、A builder from nearby Meishan City recognized the faulty columns and flooring problems.一个来自临近的眉市的建筑工人认定了立柱和楼板的缺陷问题。10、LAN in a computer search of program sourcecode in CBUILDER development.一个在局域网中搜索计算机的程序原代码用CBUILDER开发。
2023-06-06 16:35:551

builder怎么读

biú德尔~
2023-06-06 16:37:053

builder是什么意思

builder生成器双语对照词典结果:builder[英][u02c8bu026aldu0259(r)][美][u02c8bu026aldu025a]n.建设者,建筑者; 创建者; 经营建筑业者; 增洁剂,促净剂; 复数:builders例句:1.Her father was a builder from a town on the outskirts of turin. 她的父亲是一个建筑工人,来自都灵市郊一个小镇。
2023-06-06 16:37:141

builder和constructor区别

builder和constructor的区别分别是:1、builder:既能保证像重叠构造器那样的安全,也能实现JavaBean模式那样的可读性。可以不必知道你的内部构造是怎样的,我可以直接使用Builder建造自己需要的客户端;代码清晰,易维护,易扩展;将构造和表示分离,降低耦合。2、constructor:在constructor模式下,你提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,以此类推,最后一个构造器包含所有的可选参数。但是在constructor中当一个类的参数多的情况下,使用重叠构造器模式客户端代码会很难编写。使用build模式的步骤:不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个build对象。然后让客户端在build对象上调用类似的setter方法来设置每个相关的可选参数,最后,客户端调用无参的build方法来生成不可变的对象。这个builder是它构建的静态成员类。
2023-06-06 16:37:211

builder和engineer的区别

Builder一般指建筑物制作者。而engineer一般指工程师通常用于机械方面。
2023-06-06 16:37:383

builder软件怎么注册

双击appbuilder文件夹下的“AppBuilder.exe”程序2.点击“OK”3.选择“I accept the agreement”,点击“Next”下一步4.阅读更新日志,直接“Next”下一步
2023-06-06 16:37:464

java设计模式之Builder(解耦过程和部件)

   Builder模式定义:   将一个复杂对象的构建与它的表示分离 使得同样的构建过程可以创建不同的表示     Builder模式是一步一步创建一个复杂的对象 它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们 用户不知道内部的具体构建细节 Builder模式是非常类似抽象工厂模式 细微的区别大概只有在反复使用中才能体会到      为何使用?   是为了将构建复杂对象的过程和它的部件解耦 注意: 是解耦过程和部件     因为一个复杂的对象 不但有很多大量组成部分 如汽车 有很多部件:车轮 方向盘 发动机还有各种小零件等等 部件很多 但远不止这些 如何将这些部件装配成一辆汽车 这个装配过程也很复杂(需要很好的组装技术) Builder模式就是为了将部件和组装过程分开      如何使用?   首先假设一个复杂对象是由多个部件组成的 Builder模式是把复杂对象的创建和部件的创建分别开来 分别用Builder类和Director类来表示     首先 需要一个接口 它定义如何创建复杂对象的各个部件:    public interface Builder {       //创建部件A  比如创建汽车车轮    void buildPartA();     //创建部件B 比如创建汽车方向盘    void buildPartB();     //创建部件C 比如创建汽车发动机    void buildPartC();       //返回最后组装成品结果 (返回最后装配好的汽车)    //成品的组装过程不在这里进行 而是转移到下面的Director类中进行     //从而实现了解耦过程和部件    Product getResult();   }      用Director构建最后的复杂对象 而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的) 也就是说Director的内容是如何将部件最后组装成成品:    public class Director {      private Builder builder;       public Director( Builder builder ) {       this builder = builder;     }     // 将部件partA partB partC最后组成复杂对象    //这里是将车轮 方向盘和发动机组装成汽车的过程    public void construct() {       builder buildPartA();      builder buildPartB();      builder buildPartC();     }   }   Builder的具体实现ConcreteBuilder:  通过具体完成接口Builder来构建或装配产品的部件;  定义并明确它所要创建的是什么具体东西;  提供一个可以重新获取产品的接口:    public class ConcreteBuilder implements Builder {       Part partA partB partC;     public void buildPartA() {      //这里是具体如何构建partA的代码      };     public void buildPartB() {       //这里是具体如何构建partB的代码    };      public void buildPartC() {       //这里是具体如何构建partB的代码    };      public Product getResult() {       //返回最后组装成品结果    };     }     复杂对象:产品Product:    public interface Product { }     复杂对象的部件:    public interface Part { }     我们看看如何调用Builder模式:  ConcreteBuilder builder = new ConcreteBuilder();  Director director = new Director( builder );     nstruct();   Product product = builder getResult();     Builder模式的应用  在Java实际使用中 我们经常用到 池 (Pool)的概念 当资源提供者无法提供足够的资源 并且这些资源需要被很多用户反复共享时 就需要使用池      池 实际是一段内存 当池中有一些复杂的资源的 断肢 (比如数据库的连接池 也许有时一个连接会中断) 如果循环再利用这些 断肢 将提高内存使用效率 提高池的性能 修改Builder模式中Director类使之能诊断 断肢 断在哪个部件上 再修复这个部件 lishixinzhi/Article/program/Java/gj/201311/27314
2023-06-06 16:37:521

android,,Builder 的作用是什么??

使用了简化的builder模式,将抽象建造者省略,只使用一个具体建造者,并且将指导者角色也省略了。 AlertDialog.Builder就是具体建造者,另外,它是以匿名类的方式被创建的,而且,Builder类是AlertDialog的内部类,这样,耦合性比较低
2023-06-06 16:37:591

C++ Builder 是什么?与vc++6.0有什么区别?

分类: 电脑/网络 >> 程序设计 >> 其他编程语言 解析: c++ builder是Borland公司推出的基于VCL组件库的windows快速C++程序开发工具,VC++ 6.0是微软公司推出的C++集成编译工具。编制windows程序使用MFC类库,它如果Borland公司早期的Borland C++的OWL类库。应该说VCL类库是更为先进的平台,它使得利用C++开发windows程序如果VB那样简单。开发效率要比VC高得多。 由于Borland公司长期支持delphi而忽略BCB的发展,使得BCB总是比Delphi推出要慢,特别是微软推出了开发平台使得windows程序开发变得简单,而且以后任何在windows平台上的程序必须使用 framework使得其它编译器厂商难以为继,Borland如果使用VCL而VCL底层必要还有使用从而多出了一个中间层。因而borland公司最终决定退出集成编译工具开发领域,c++ builder在6.0 版本后的很长一段时间后终于推出了Borland C++ builder 2006,决定转让开发工具,它的下一个版本不知道将是哪家公司开发了。
2023-06-06 16:38:061

C++Builder是什么啊?

IDE这种问题直接百度就行了
2023-06-06 16:38:274

C++ Builder 经验小技巧

读写注册表现在的Windows程序大都使用了注册表来存储软件的配置信息。C++Builder 3.0中给我们提供了一个TRegistry类帮助我们管理注册表,它有以下几个常用的方法:OpenKey 打开一个键值ReadBool 从注册表中读取布尔值ReadInteger 从注册表中读取整型值ReadString从注册表中读取字符串值WriteBool向注册表中写入布尔值WriteInteger 向注册表中写入整型值WriteString向注册表中写入字符串值代码演示:TRegistryregkey.OpenKey(“softwaremyapp”,true);regkey.WriteInteger(“Max”,100);int x=regkey.ReadInteger(“Max”);delete注意:使用TRegistry类时应包含头文件。模仿超级链接用过Winamp的朋友知道Winamp的界面中有一些模仿的超级链接,可以把你直接带到它的相关网站中去。下面这个例子就实现了这种功能,当鼠标点击其中的仿超级链接时,你就会直接到达《电脑商情报》的新建一个应用,在窗体Form1上添加一个名为Label1的TLabel组件,然后在代码编辑器中添加以下代码:void __fastcall TForm1::FormCreate(TObject *Sender){Label1→Cursor=crHandPoint;Label1→Font→Color=clBlue;Label1→Font→Style=Label1→Font→Style Label1→Caption=“”;}void __fastcall TForm1::Label1Click(TObject *Sender){ShellExecute(Handle,NULL,Label1→Caption.c_str(),NULL,NULL,SW_SHOWNORMAL);}void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,int X, int Y){Label1→Font→Color=clRed;}void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,int X, int Y){Label1→Font→Color=clBlue;}注意:本示例应该包含头文件。取得Memo的行和列新建一个应用,在窗体Form1上添加两个TLabel组件名为Label1,Label2;添加两个TButton组件名为Button1,Button2;添加一个TMemo组件名为Memo1.然后在代码编辑器中添加以下代码。void __fastcall TForm1::Button1Click(TObject *Sender){Label1→Caption=SendMessage(Memo1→Handle,EM_LINEFROMCHAR,-1,0)+1;}void __fastcall TForm1::Button2Click(TObject *Sender){Label2→Caption=Memo1→SelStart-SendMessage(Memo1→Handle,EM_LINEINDEX,-1,0)+1;}这种方法同样适用于RichEdit.全编译的问题在C++ Builder 3.0下,如果不进行设置,那么程序是不完全编译的,运行时要用到Windows的System目录下的一些文件,如将这样编译所得的可执行文件拷到其它未装C++ Builder 的机子里将无法运行。如果想全编译可以通过设置完成。设置方法如下:按“Project”下“Option”,选中“Packages”页下角的“Build with runtime packages”即可。在线帮助的制作安装组件一个完整的程序应该有在线帮助。制作在线帮助并不难,主要工作在制作帮助文件上,这需要一个帮助文件编译器,在C++ Builder的“CBuilder3HelpTools" 目录下就有一个帮助文件编译器HCW.实际上帮助编译器的作用就是将。rtf文件编译成。hlp文件。让我们来看一个最简单的例子,用Word随便写一个。rtf文件,启动HCW,先建一个项目;按窗体右边的”Files“按钮,把刚才做的。rtf文件添加进去;最后按右下角的“Save and Compile”按钮,这样在你的项目的目录下,将会出现一个和项目同名的。hlp文件。在程序中使用帮助文件如下:Application-HelpFile=″myhelp.hlp″ ;//指定帮助文件Application-HelpCommand(HELP_Contents,0); //打开帮助窗体安装组件C++ Builder一个很吸引人的地方,就是它的组件。你不但可以利用系统中提供的丰富的组件,而且可以利用第三方提供的组件。安装组件的操作很简单,打开“Compoment”菜单下的“Install Compoment”,然后选中要安装的组件的文件就行了。
2023-06-06 16:38:341

C++ builder消息的运用

一、TApplication的OnMessage事件OnMessage事件只处理消息队列中的消息,SendMessage()发送的消息不会被截获。任何窗体接收到一个windows消息,都会触发一次此事件函数原型:typedef void __fastcall (__closure *TMessageEvent) (tagMSG Msg,bool Handled);Msg表示被截获的消息,Handled表示是否处理完成,为TRUE则防止被再次处理,设为FALSE则可以继续处理。代码//计算程序响应的消息数//---------------------------------------------------------------------------#ifndef Msg_testH#define Msg_testH//---------------------------------------------------------------------------#include Classes.hpp#include Controls.hpp#include StdCtrls.hpp#include Forms.hpp//---------------------------------------------------------------------------class TForm1 : public TForm{__published: // IDE-managed ComponentsTLabel *Label1;void __fastcall FormCreate(TObject *Sender);private: // User declarations//自定义消息响应函数void __fastcall AppMessage(tagMSG MSG,bool Handled);public: // User declarations__fastcall TForm1(TComponent* Owner);int Num;};//---------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------------------------------------------#endif//---------------------------------------------------------------------------#include vcl.h#pragma hdrstop#include "Msg_test.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner){Num = 0;}//---------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender){//将自定义函数与OnMessage事件联系起来Application-OnMessage = AppMessage;}//---------------------------------------------------------------------------void __fastcall TForm1::AppMessage(tagMSG MSG,bool Handled){Num++;Label1-Caption = AnsiString(Num);Handled = false;}二、消息映射使用消息映射,一般需要三步:(1).声明消息映射表,把某些消息的处理权,交给自己定义的函数以一个没有参数的BEGIN_MESSAGE_MAP宏开始,以END_MESSAGE_MAP宏结束(唯一参数是组件的父类的名字,通常为TForm)在中间插入一个或多个MESSAGE_HANDLER宏,其将一个消息句柄和一个消息处理函数联系在一起。MESSAGE_HANDLER(windows消息名,消息结构体名,消息处理函数名)(2)声明消息处理函数函数名称和参数必须和MESSAGE_HANDLER宏定义的一样(3)实现消息处理函数与一般类函数差不多,只是在最后加上一条语句,完成VCL对消息的默认处理TForm::Dispatch(Message);消息映射//---------------------------------------------------------------------------#ifndef Unit1H#define Unit1H//---------------------------------------------------------------------------#include Classes.hpp#include Controls.hpp#include StdCtrls.hpp#include Forms.hpp//---------------------------------------------------------------------------class TForm1 : public TForm{__published: // IDE-managed ComponentsTLabel *Label1;private: // User declarationspublic: // User declarations__fastcall TForm1(TComponent* Owner);//自定义消息映射函数void __fastcall WMGetMinMaxInfo(TWMGetMinMaxInfo Msg);BEGIN_MESSAGE_MAPMESSAGE_HANDLER(WM_GETMINMAXINFO,TWMGetMinMaxInfo,WMGetMinMaxInfo)END_MESSAGE_MAP(TForm)};//---------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------------------------------------------#endif//---------------------------------------------------------------------------#include vcl.h#pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::WMGetMinMaxInfo(TWMGetMinMaxInfo Msg){//当用户单击窗体状态栏上的最大化按钮时,限制窗体的长宽Msg.MinMaxInfo-ptMaxSize.x = 600;Msg.MinMaxInfo-ptMaxSize.y = 400;//设定窗体最大化时,左上角左边为窗体当前位置Msg.MinMaxInfo-ptMaxPosition.x = Left;Msg.MinMaxInfo-ptMaxPosition.y = Top;//当用户用鼠标拖动的方式改变窗体尺寸时,限制其最大值Msg.MinMaxInfo-ptMaxTrackSize.x = 600;Msg.MinMaxInfo-ptMaxTrackSize.y = 400;//当用户用鼠标拖动的方式改变窗体尺寸时,限制其最小值Msg.MinMaxInfo-ptMinTrackSize.x = 200;Msg.MinMaxInfo-ptMinTrackSize.y = 10;//显示当前窗体的尺寸Label1-Caption = "Width:" + AnsiString(this-Width)+" Height: " + AnsiString(Height);TForm::Dispatch(Msg);}三、消息映射的深入讨论../include/vcl/sysmac.h中有消息映射的宏定义代码#define BEGIN_MESSAGE_MAP virtual void __fastcall Dispatch(void *Message){switch (((PMessage)Message)-Msg){#define VCL_MESSAGE_HANDLER(msg,type,meth)case msg:meth(*((type *)Message));break;// NOTE: ATL defines a MESSAGE_HANDLER macro which conflicts with VCL"s macro. The// VCL macro has been renamed to VCL_MESSAGE_HANDLER. If you are not using ATL,// MESSAGE_HANDLER is defined as in previous versions of BCB.//#if !defined(USING_ATL)!defined(USING_ATLVCL)!defined(INC_ATL_HEADERS)#define MESSAGE_HANDLER VCL_MESSAGE_HANDLER#endif // ATL_COMPAT#define END_MESSAGE_MAP(base) default:base::Dispatch(Message);break;}}//对与消息映射:BEGIN_MESSAGE_MAPMESSAGE_HANDLER(WM_GETMINMAXINFO,TWMGetMinMaxInfo,WMGetMinMaxInfo)END_MESSAGE_MAP(TForm1)//将被扩展为:virtual void __fastcall Dispatch(void *Message){switch (((PMessage)Message)-Msg){case msg:WMGetMinMaxInfo(*((TWMGetMinMaxInfo*)Message));break;default:TForm1::Dispatch(Message);break;}}VCL_MESSAGE_HANDLER写法,是为了调用ATL时,命名不冲突四、重载WndProc()函数函数原型:virtual void __fastcall WndProc(Message::TMessage Message);代码//头文件中声明void __fastcall WndProc(TMessage Message);//实现文件void __fastcall TForm1::WndProc(TMessage Message){if(Message.Msg == WM_GETMINMAXINFO){//付给结构体LPMINMAXINFOLPMINMAXINFO lpmmi = (LPMINMAXINFO)Message.LParam;//当用户单击窗体状态栏上的最大化按钮时,限制窗体的长宽lpmmi-ptMaxSize.x = 600;lpmmi-ptMaxSize.y = 400;//设定窗体最大化时,左上角左边为窗体当前位置lpmmi-ptMaxPosition.x = Left;lpmmi-ptMaxPosition.y = Top;//当用户用鼠标拖动的方式改变窗体尺寸时,限制其最大值lpmmi-ptMaxTrackSize.x = 600;lpmmi-ptMaxTrackSize.y = 400;//当用户用鼠标拖动的方式改变窗体尺寸时,限制其最小值lpmmi-ptMinTrackSize.x = 200;lpmmi-ptMinTrackSize.y = 100;//显示当前窗体的尺寸Label1-Caption = "Width:" + AnsiString(this-Width)+" Height: " + AnsiString(Height);}TForm::WndProc(Message);}五、非标准消息1.通知消息(Notification message)此消息只发生在一些标准windows控件上当一个窗体的子控件发生了一些事情后,他通知给其父窗体的消息包括:按钮、编辑框、列表空、label等..如:BN_CLICKED 单击按钮2.自定义消息相比通过改变对象成员的优点:可以不用知道接收者的确切类型,只要知道其窗口句柄;可以广播给多个接受者。一般有两种方式:直接定义,WM_USER + XXX 或 WM_APP+XXX 分别为0x0400和0x8000或调用API函数RegisterWindowMessage()向系统注册一个3.发送自定义消息向特定窗体发送消息:TControl::Perform() 由C++ builder提供SendMessage() 和 PostMessage() API函数发送广播消息TWinControl::Broadcast() 由C++ builder提供BroadcastSystemMessage() API函数Perform() 适用于在同一应用程序的不同窗体和控件消息的传递。SendMessage() 把消息直接发送给窗口函数(不入队列),等消息被处理后才返回。PostMessage() 只是单纯吧消息送到消息队列中,就立刻返回。Boradcast() 只能向C++ builder应用程序中的指定窗体上的所有子控件广播消息,无法向其他应用程序广播。BroadcastSystemMessage() 可以向任意的应用程序或者组件广播消息。代码//窗体1(四个按钮)//---------------------------------------------------------------------------#ifndef Unit1H#define Unit1H//---------------------------------------------------------------------------#include Classes.hpp#include Controls.hpp#include StdCtrls.hpp#include Forms.hpp#include "Unit2.h"//---------------------------------------------------------------------------class TForm1 : public TForm{__published: // IDE-managed ComponentsTButton *Button1;TButton *Button2;TButton *Button3;TButton *Button4;void __fastcall Button1Click(TObject *Sender);void __fastcall Button2Click(TObject *Sender);void __fastcall Button3Click(TObject *Sender);void __fastcall Button4Click(TObject *Sender);private: // User declarationspublic: // User declarations__fastcall TForm1(TComponent* Owner);};//---------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------------------------------------------#endif//---------------------------------------------------------------------------#include vcl.h#pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){Form2-Perform(WM_CLOSE,0,0);}//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){SendMessage(Form2-Handle,WM_CLOSE,0,0);}//---------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender){PostMessage(Form2-Handle,WM_CLOSE,0,0);}//---------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender){//向窗体Form2的子控件广播WM_LBUTTONDOWN消息TMessage M;M.Msg = WM_LBUTTONDOWN;Form2-Broadcast(M);}//---------------------------------------------------------------------------//窗体2(两个panel)//---------------------------------------------------------------------------#ifndef Unit2H#define Unit2H//-----------------
2023-06-06 16:38:541

在C++Builder中定义事件

在C++ BUILDER中,事件是一种委托模型,它是对消息的封装。如果你用过VC,你就知道在VC中并不存在什么事件,而只有消息处理函数,而在C++ BUILDER中则是由事件处理函数来负责响应消息。同是,事件本身也是一指针,它是一个闭包,通常在C++ BUILDER中有两种事件:通知类型事件(即TNOTIFYEVENT,对WINDOWS消息的封装)和自定义事件。除此之外,我们也知道事件是通过一个虚拟函数来点燃的,比如说ONEXIT事件是由DOEXIT虚拟函数点燃的,下面我写一个自定义事件,很明显以下我写的代码中的事件将是对WM_MYMESSAGE消息的封装。 .h File#include .........#define WM_MYMESSAGE WM_USER+100typedef void __fastcall (__closure *TMyEvent)(TObject *Sender,Param1,Param2,......);class TMyControl:public TWinControl{private:TMyEvent FOnMyEvent;//保存指向事件的指针.void __fastcall DoSomething(TMessage Message);public:BEGIN_MESSAGE_MAPVCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,DoSomething);END_MESSAGE_MAP(TControl);protected:virtual void __fastcall DoMyEvent(Param1,........);//由这个虚拟函数来触发事件virtual void __fastcall WndProc(TMessage Message);__published:.........__property TMyEvent OnMyEvent={read=FOnMyEvent,write=FOnMyEvent};.....};.cpp File//Omiting constructor and deconstructor//Virtual function,which will spring the event:TMyEventvoid __fastcall TMyControl::DoMyEvent(Param1,.....){if(FOnMyEvent){FOnMyEvent(this,Param1,Param2,.....Paramn);}}//Message Handlervoid __fastcall TMyControl::DoSomething{//TODO:Add your code here....}void __fastcall TMyControl::WndProc(TMessage Message){if(Message.Msg==WM_MYMESSAGE){DoMyEvent(Message.WParam,.....);}......}按照上而的代码,我们就会在OBJECT INSPECTOR中看到一个ONMYEVENT事件,和其它事件一样,用户只要将代码写到这里来就可以响应消息并根据应用的需求来给出这个事件触发时的行为,上面代码是随手写的,请各位自已加以调整。
2023-06-06 16:39:011

C++ Builder中消息机制的研究与应用技巧

Windows消息处理 BCBC++ Builder作为一种RAD方式的程序开发工具,提供了功能强大的集成开发环境。C++ Builder提供的VCL组件,封装了Windows的底层API和具体实现细节,也提供了对组件消息机制的良好封装。比如,可以对按钮控件(TButton)的单击、按下、拖动等事件消息设置相应的处理函数,并在对应的函数体中实现对该消息的处理与响应。虽然C++ Builder对VCL组件的消息处理提供了一套良好的处理机制,且封装了许多常用的消息,但是当开发者需要处理未定义的Windows消息或自定义消息时,C++ Builder不能提供直接的支持。这就需要开发者对Windows 消息驱动机制和C++ Builder 中的消息处理机制能有一个深入的认识。1 Windows 消息驱动机制Windows是以消息驱动的操作系统,Windows 消息提供了应用程序与应用程序以及应用程序与Windows系统之间进行通讯的手段。Windows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。消息循环代码是应用程序中主函数winmain ( )中类似如下的程序段: while(GetMessage(msg,NULL,NULL,NULL)){//从消息队列中取得消息后,检索并生成字符消息TranslateMessage(msg);//将消息发送给相应的窗口函数DispatchMessage(msg);}由此可见,所谓“消息循环”,实际是程序循环。Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个switch-case 语句,用以处理由消息循环发送到该窗口的消息。 Switch(msg){case : break;default : break;}窗口函数由Windows 采用消息驱动的形式隐式地调用(由系统调用),而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给Windows.Windows消息处理过程实质包括以下四个步骤:(1) 系统发生事件;(2) 根据事件产生消息,并放入消息队列;(3) 应用程序从消息队列中取得消息,并封装后,通过消息循环把消息分派给对应的处理函数;(4) 处理函数最终处理这个消息。2 C++ Builder 中的消息处理在类 Application中封装、实现了Windows 程序框架,包括一些初始化、消息循环代码等。一般用C++ Builder 编写的Windows GUI 应用程序,缺省生成如下代码://Windows 应用程序主函数WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try{//作初始化Application-〉Initialize();Application-〉CreateForm(__classid(TForm1), Form1);//其中封装了消息循环Application-〉Run();}//例外处理catch (Exception exception) {Application-〉ShowException(exception);}return 0;}对于消息处理,C++ Builder采用基于组件(component)的程序设计模式,每种控件都继承一套完整的消息派送体系。 它为每一种类型的控件都注册一个名为 MainWndProc的方法函数作为窗口函数,接受“消息循环”派送来的消息,它是一个非虚拟方法,不对任何特定消息作特别处理,它仅仅调用WndProc方法函数,并作一些例外处理。不同控件对消息处理的定制发生在WndProc 方法中,因为它是一个虚拟方法,每一种控件可以通过覆盖它来适应特别的情况。WndProc 方法检查不同的条件,作不同的处理,从而能够滤掉不希望处理的各种消息。最终,WndProc 调用 Dispatch 方法,它是一个从所有控件的始祖TObject 继承而来的虚拟方法,它确定调用哪个方法处理传来的消息。3 对VCL事件的处理在C++ Builder中,VCL事件包含了许多Windows消息,所以在通常情况下对Windows消息的响应就转化为对VCL事件的响应处理。VCL事件与响应函数之间的映射关系可以是静态的(程序设计时确定),也可以是动态的(在程序运行时确定)。下面分别以建立动态和静态的响应函数映射关系。在静态映射关系条件下,建立VCL事件的响应处理非常简单。我们以一个实例来说明。在一个新建工程中,放入一个按钮控件(TButton),在对象观察器中选择事件标签,在该标签中选择OnClick事件,写入响应函数,通常双击该事件选项,则可以很方便地建立事件与函数的对应关系和响应函数框架。 void __fastcall TMsgExp::Button1Click(TObject *Sender){//对单击按钮事件的响应ShowMessage("你触发了一个单击事件!");}程序设计完成后,消息映射就确定下来,不会改变。在动态映射关系条件下,需要在运行时设定事件与函数的对应关系。C++ Builder的应用程序中的任何窗体收到一个Windows就会触发一个OnMessage事件,通过该事件来捕获发送给程序的消息,并动态地建立消息与响应函数之间的映射关系,也以一个实例来说明。按上面提到的例子,建立一个按钮单击事件的响应,如下: void __fastcall TMsgExp::Button2Click(TObject *Sender){//根据单选按钮的不同状态,动态建立消息与响应函数的映射if (RadioButton1-Checked)Application-OnMessage=ClickMouse;if (RadioButton2-Checked)Application-OnMessage=Move;}void __fastcall TMsgExp::ClickMouse(tagMSGMsg, boolHandled){//对单击鼠标事件的处理if(Msg.message==WM_LBUTTONDOWN){num++;Label1-Caption="你一共点击了"+AnsiString(num)+"次";//允许后继过程继续处理该事件Handled=false;}}void __fastcall TMsgExp::Move(tagMSGMsg, boolHandled){//对鼠标移动事件的处理if(Msg.message==WM_MOUSEMOVE){//从消息中过去鼠标的位置参数WORD xPos = LOWORD(Msg.lParam);WORD yPos = HIWORD(Msg.lParam);Label1-Caption="当前鼠标位置 x:"+AnsiString(xPos)+" y:"+AnsiString(yPos);//允许后继过程继续处理该事件Handled=false;}}上面的例子利用Application 的OnMessage事件实现了对鼠标移动和单击事件的动态响应。需要说明的是OnMessage事件仅仅接受发送到消息队列中的消息,对于利用API直接发送给窗口函数的消息将不与理会。4 对自定义消息的处理在有的情况下,程序需要发送自己定义的消息,它既可以用在两个应用程序之间的通讯,也可以用在一个程序内部的不同窗体和组件之间的通信。使用自定义消息有两个优点:一是发消息时,无须知道接受者的具体类型,只要知道窗口的句柄;二是消息可以广播给多个接受者。它也有静态和动态的两种函数响应映射关系。同样举一个例子,在窗体类的头文件(。h)中加入自定义消息MY_SELFDEFINE,并静态的对这个自定义消息建立函数映射关系 #define MY_SELFDEFINE (WM_USER+100)//定义响应函数void __fastcall Handle(TMessageMsg);//建立响应函数(Handle)与自定义消息(MY_SELFDEFINE)的映射BEGIN_MESSAGE_MAPMESSAGE_HANDLER(MY_SELFDEFINE,TMessage,Handle)END_MESSAGE_MAP(TForm)在窗体类的实现文件中(.cpp)分别实现定义的响应函数(Handle)和发送自定义的消息(MY_SELFDEFINE)//响应函数的实现void __fastcall TMsgExp::Handle(TMessageMsg){ShowMessage("拦截到自定义消息MY_SELFDEFINE");}//发送自定义的消息(MY_SELFDEFINE)this-Perform(MY_SELFDEFINE,0,0);应用程序接受到自定义的消息后,根据静态建立的映射关系,将消息交由响应函数处理。接着上面的例子,再建立一个动态对自定义消息进行响应的例子。分别建立两个响应函数: OpenForm(打开新窗口)和CloseForm(关闭新窗口)。 void __fastcall TMsgExp::OpenForm(TMessageMsg){//截获到MY_SELFDEFINE消息,则打开新窗口,否则交由原来的函数处理if (Msg.Msg == MY_SELFDEFINE)NewWindows-Show();elseWndProc(Msg);}void __fastcall TMsgExp::CloseForm(TMessageMsg){//截获到MY_SELFDEFINE消息,则关闭新窗口,否则交由原来的函数处理if (Msg.Msg == MY_SELFDEFINE)NewWindows-Hide();elseWndProc(Msg);}//根据单选按钮的不同状态,动态建立自定义消息与响应函数的映射if (RadioButton3-Checked)/*利用TControl控件的WindowProc属性,动态地设置对处理消息的响应函数*/this-WindowProc=OpenForm;if (RadioButton4-Checked)this-WindowProc=CloseForm;//发送自定义的消息(MY_SELFDEFINE)this-Perform(MY_SELFDEFINE,0,0);5 结束语本文分别探讨了对Windows消息和自定义消息建立静态和动态响应函数映射的技巧和方法,阐述了由事件到消息,再由消息映射到响应函数处理的整个机制,具有很大的实用价值和理论探讨价值。示例程序在Windows2000/C++ Builder6.0环境下编译通过。
2023-06-06 16:39:071

C++Builderr是什么软件

C++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C++ Builder内置了100多个完全封装了Windows公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件;C++ Builder具有一个专业C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等。它实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。
2023-06-06 16:39:371

windows builder怎么用

方法/步骤首先要下载“WindowsBuilder”:度娘WindowsBuilder,进入官方下载页面,点击“Download”,进入版本选择页面。关于版本号的说明:选择与Eclipse相对应的WindowsBuilder版本,例如我电脑上安装的Eclipse版本代号是“Mars”,则选择相应版本下载。其中“Release Version”是发行版,“Integration Version”是集成版,两版下的“Update Site”是在线安装连接,“Zipped Update Site”手动安装包,用于本地自己安装。我们一般选择优化了的“Release Version”。接下来介绍两种安装方法:1、在线安装点击对应版本的“Update Site”链接,复制链接后,打开Eclipse,选择“help”—>“Install New Software...”打开安装选项框,在“Work with”输入刚复制的链接,点击Enter键进行搜索,然后下面会出现需要安装的内容,选择后,点击“Next”进行安装。2、手动安装点击对应版本的“Zipped Update Site”,打开下载页面,直接下载解压包到本地磁盘。然后打开Eclipse,仍然选择“help”—>“Install New Software...”打开安装选项框,点击“add”,在弹出的窗口中“Name”输入WindowsBuilder或任意名称,也可以不填写,“Location”中选择刚下载的ZIP文件,点击OK即可。或者直接复制下载包所在的本地磁盘地址,粘贴到“Work with”,点击“Enter”自动加载所需安装内容。两种方法加载完所需的插件后,接下来的安装情况相同,方法1由于需要在线下载各个插件,会慢一些,具体过程如下图所示。安装完成后,会提示重新启动Eclipse,点击“Yes”进行重启,重启后即可进行窗体类应用程序开发。重启Eclipse后,选择“File”—>New—>Project...—>WindowBuilder—>SWT Designer—>SWT/JFace Project新建项目,例如我建得“FirstSS”,然后右击所建项目,选择“New”—>Other...—>WindowBuilder—>Swing Designer或SWT Designer,选择希望建立的窗体类。
2023-06-06 16:39:461

HBuilder适合做什么?

HBuilder适合Web开发。从Frontpage、Dreamweaver、UE,到Sublime Text和JetBrains的WebStorm,Web编程的IDE已经更换了几批。HBuilder是DCloud(数字天堂)推出一款支持HTML5的Web开发IDE。“快,是HBuilder的最大优势,通过完整的语法提示和代码输入法、代码块及很多配套,HBuilder能大幅提升HTML、js、css的开发效率。”问到HBuilder的优势时,DCloud CEO王安表示。HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。[1]HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse,所以顺其自然地兼容了Eclipse的插件。快,是HBuilder的最大优势,通过完整的语法提示和代码输入法、代码块等,大幅提升HTML、js、css的开发效率。
2023-06-06 16:40:052

关于c++Builder的一段程序

没有问题啊,我试过了static int i=0;i++是没有问题的不过你的case处有问题,就是 case 1 :你的case后没有空格
2023-06-06 16:40:182

求c++ builder软件下载

分类: 电脑/网络 >> 程序设计 >> 其他编程语言 解析: 1. Borland C++ Builder V6.0 with Update4 大企业集成安装版 [点击这里下载] oamo/Sofare/Catalog130/1406 2. Borland C++ Builder Compiler V5.5 Borland C++ Builder Compiler 是一个 BC 编译器。它是 sky/soft/13127 3. Flash ScreenSaver Builder 4.8 Build 060224 功能强大的屏幕保护制作程序!内置强大易用的精灵向导,支持直接导入MP download.pchome/system/desktop/s *** aker/6128 4. MG Screen Saver Builder 3.9 三个步骤即可完成属于你自己的屏幕保护程序 download.pchome/system/desktop/s *** aker/1667 5. Calendar Builder 3.4 非常棒的日历制作软件,支持中文字形,可加入文字及喜欢的图片 download.pchome/home/calendar/9215 6. Inter ScreenSaver Builder 5.15 Build 050412 强大的屏幕保护制作程序!内置强大易用的ISSB制作向导 download.pchome/system/desktop/s *** aker/9164 7. CourseBuilder for Dreamweaver 3.0 CourseBuilder是加强Dreamweaver的一套工具,让使用者可轻易的建立互动题库式的网页。 onlinedown/soft/11087 8. Screen Saver Builder 汉化版 3.11 Screen Saver Builder 汉化版 download.pchome/system/desktop/s *** aker/4334 9. 2Flyer Screensaver Builder 7.4.1 onlinedown/soft/19506 10. SetupBuilder Professional 中文版 1.50sc(SP6) Build 2002 方便快速制作专业的 Windows 安装程序的工具软件 download.pchome/development/install/567 11. LMD Tools for C++ Builder 5 V5.01 一套霸王级的控件包,附带控件数超过 150 个 download.pchome/development/cbuilder/864 12. 搜索引擎工厂(Search Engine Builder) V2.46 标准版 为你的网站自动生成一个站内搜索引擎。很多人访问您的 sky/soft/8126 13. AHM Triton Tools For Borland C++ Builder 5.0 V2000 AHM 2000 提供的控件超过 150 个 download.pchome/development/cbuilder/866 14. SetupBuilder Professional V1.50sc(sp6) 简体中文版 SetupBuilder Professional 是一套用于方便快速制作专 sky/soft/3932 15. All AHM Triton Tools 2002 Borland C++Builder V6.0 早在 Delphi3 流行时,AHM 控件集就已经声名远扬,现在 sky/soft/11763 16. C++Builder 5 试用版 不论是初学Windows程序设计的学生。或开发关键性任务、客户机/服务器结构应用系统 download.21/list.php?id=11953 17. 2Flyer Screensaver Builder Pro 7.4.1 onlinedown/soft/9290 18. 搜索引擎工厂(Search Engine Builder) V2.23 专业版 为你的网站自动生成一个站内搜索引擎。很多人访问您的 sky/soft/9300 19. Calendar Builder V3.42 非常棒的日历制作软件,支持六种语言,可以在日历的任 sky/soft/4907 20. Flash ScreenSaver Builder V4.8 Build 060224 Flash ScreenSaver Builder 是一个功能强大的屏幕保护 sky/soft/2322 21. Search Engine Builder 搜索引擎工厂 专业版 2.16 搜索引擎工厂(Search Engine Builder) 专业版 download.pchome/inter/isearch/14504 22. Dream Collection for C++ Builder 5 V4.01 Dream Collection 是 Dream Company 公司生产的控件包 download.pchome/development/cbuilder/862 23. Search Engine Builder 搜索引擎工厂 标准版 2.45 Build 50913 为你的网站自动生成一个站内搜索引擎 download.pchome/inter/isearch/14501 24. 2Flyer Screensaver Builder Pro V7.4.1 一个非常好的屏保制作工具!自带十几种特效!你所需要做 sky/soft/12514 25. AppBuilder For ODBC API 简体中文版(含示例) V3.07 国内首创完全基于VC的大型综合开发平台,智能编程机器人 download.pchome/development/c/707 26. Screen Saver Builder V3.11 汉化版 是制作屏幕保护程序的工具。这个工具可以很容易地制作 sky/soft/2333 27. LMD Tools for C++ Builder 4 5.01 一套霸王级的控件包,附带控件数超过 150 个 download.pchome/development/cbuilder/863 28. DSW Screen Saver Builder 5.2 可以指定文件夹选择播放图片,并且可以播放一个声音文件 download.pchome/system/desktop/s *** aker/11907 29. Super screensaver builder 6.2.006 一个非常不错的屏幕保护程序制作工具 download.pchome/system/desktop/s *** aker/17236 30. ASP Web Database Interface Builder 6.05 制作拥有资料确认的专业级和安全的ASP网页,此允许你增加、搜寻、分类、编辑和删除你 onlinedown/soft/21006 31. Document Builder 2004.05 Rational Rose 是一个被业界普遍认可并被广泛使用的设 sky/soft/17122 32. 搜索引擎工厂(Search Engine Builder) 2.46 为你的网站自动生成一个站内搜索引擎。很多人访问您的网站只是为了得到其中一部分信息 onlinedown/soft/3690 33. InfoPower for C++ Builder 5 V2000.17 InfoPower 它是为专业数据库开发人员设计的 C++ Build sky/soft/4746 34. ASP Web Database Interface Builder V6.05 制作拥有资料确认的专业级和安全的ASP网页,此允许你增 sky/soft/14214 35. Search engine Builder 汉化版 1.65 Search engine Builder 1.65汉化版 download.pchome/design/homepage/13074 36. Borland C++ Builder Compiler V5.5 Borland C++ Builder Compiler 是一个 BC 编译器。它是用来优化 BC 开发系统的工? download.21/list.php?id=32937 37. Calendar Builder 3.42 onlinedown/soft/3467 38. DocBuilder 智能文档编著系统 2.1 自动的文档以及帮助系统产生程序,通过简单的拖拉操作就可以显示出清 download.pchome/development/helpbuilder/6733 39. Flash ScreenSaver Builder 汉化补丁 4.5 Flash ScreenSaver Builder 4.5 汉化补丁 download.pchome/system/desktop/s *** aker/16000 40. AppBuilder for MFC ODBC v3.07 国内首创大型综合开发平台 download.pchome/development/database/7540 41. AppBuilder for ODBC API V3.07 国内首创大型综合开发平台 download.pchome/development/database/7539 42. Power Screen saver Builder V3.0 一个专业级的屏保制作程序。具有Flash 动画插入功能, sky/soft/8350 43. Traffic Builder 1.5.50 又一款搜索网站登入的利器。 Traffic Builder给你带来900个站点! download.pchome/inter/addweb/1078 44. AppBuilder for ODBC API V3.4.06.27 大众版 最新推出的专门为个人或者小型企业用户度身定做的综合开发平台 download.pchome/industry/business/7624 45. AppBuilder for MFC ODBC V3.4.06.27 大众版 最新推出的专门为个人或者小型企业用户度身定做的综合开发平台 download.pchome/industry/business/7623 46. Inter ScreenSaver Builder 汉化补丁 4.58 Inter ScreenSaver Builder V4.58 汉化补丁 download.pchome/system/desktop/s *** aker/17080 47. 搜索引擎工厂(Search Engine Builder) Pro 2.24 onlinedown/soft/3688 48. Jmouse MPC Builder 预览版 Jmouse MPC Builder 是一款 MuskPack 音频格式编码和解 sky/soft/18242 49. Screen Saver Builder V3.32 是制作屏幕保护程序的工具。这个工具可以很容易地制作 sky/soft/2332 50. 搜索引擎工厂(Search Engine Builder) 1.70 汉化版 为你的网站自动生成一个站内搜索引擎。很多人访问您的网站只是为了得到其中一部分信息 onlinedown/soft/3689 51. AL Screensaver&Slideshow Builder V1.9 Beta 3 一个内置高达120种特效的屏幕保护制作软件,可导入BMP sky/soft/2337 52. 2Flyer Screensaver Builder Standard V7.4.1 一个非常好的屏保制作工具!自带十几种特效!你所需要做 sky/soft/20777 53. AppBuilder For ODBC API V3.4 大众版(2001.08.01) AppBuilder 大众版本是川大软件最新推出的专门为个人或 sky/soft/2108 54. CuteSITE Builder V4.0.0.108 CuteSITE Builder 是一个WYSIWYG的网页制作工具,可以 sky/soft/7026 55. Flash ScreenSaver Builder 4.8 Build 051018 FlashScreenSaverBuilder是一个功能强大的屏幕保护制作程序!内置强大易用的精灵向导, onlinedown/soft/7421 56. Perl Builder V2.0c Perl Builder 是一个综合,完善的Perl语言编译器。他独 sky/soft/2144 57. Super ScreenSaver builder V6.2.006 Super screensaver builder 是一个非常不错的屏幕保护 sky/soft/12672 58. Advanced Playlist Builder 1.00 AdvancedPlaylistBuilder是一个免费的MP3播放清单制作软件,图时还可以用来管理音乐文 onlinedown/soft/9607 59. Screen Mate Builder V1.1 整天对着枯燥的计算机桌面是不是觉得很无聊。那就赶快 sky/soft/13555 60. Resource Builder 2.4.1 onlinedown/soft/12422 soft8/soft8.php?page=3&word=c%2b%2b+builder&site=all&by=name&num=679
2023-06-06 16:40:261

c++ builder哪个版本更好用

一、简单回答:1、当前,功能相对完全和成熟的是XE7。2、如果开发传统的程序,C++ BUILDER 2006最成熟轻量。二、可以难说哪个更好用,每个版本都有它自个的特点,典型的版的本个人理解供你参考:1、C++ BUILDER 4.0是BCB(C++ BUILDER的简称)的第一个win下的版本,后继还有个小升级到C++ BUILDER 4.5,如果你想在win下做DOS应用的需求可以找它。2、C++ BUILDER 5.0只支持windows了,但它在人性化设计上有了长足的进步,不过现在用的人很少了,因为相对6.0,它没有优点。3、C++ BUILDER 6.0 ,很经典,也很古老的一个版本。个人认为它不够好用,因为它的自动完成不太完善,另外,它自带的一些TCP/IP控件也存在BUG。不过,从成熟度来说,还是可以的。在它之后,宝蓝公司有好多好多年没有出新的版本。4、C++ BUILDER 2006,这是6.0之后的一个版本,相对6.0来说,它更成熟了,但也更体积大了,对电脑性能的要求更高,自动化程度更好。对当前的电脑来说,它是非常好的。这是本人这种业余爱好者很喜欢的一个版本。它的缺点:不能进行64位编程,也不支持Unicode(统一码、万国码、单一码)。所以,它应该要被淘汰,特别是现在64位操作系统已正式进入千万家。当然了,64位操作系统当前是兼容x86(32位)程序的,所以,当前用它来开发实用程序还是非常好的。5、C++ BUILDER 2010是C++ BUILDER 2006之后的版本,中间还有一两个版本,更新很快,本人用得少,基本上也就是2006的改进版,没有太多特色。对电脑性能的要求更高一些。6、然后,C++ BUILDER 后面的版本称为XE了,从XE1,一直到现在的XE10,更新得很快,很疯狂,其间C++ BUILDER的所有者不再是原来的宝蓝公司了,好象整个团队被embarcadero收购。XE1到XE10中,逐步增加了对Unicode的支持,增加了对安卓的支持,增加了对win10触控应用的支持,XE5中C++ BUILDER正式支持64位编程。XE8开始不再支持winxp及windows2003。
2023-06-06 16:40:331

build 和built 和building 及builder 的区别

build建造动词,bulit是build的过去时,building是建筑名词,builder是建造者名词
2023-06-06 16:40:401

谷歌草图大师附赠的layout3和style builder2是干什么的呢?

LayOut 是 Google SketchUp 专业版 的一种功能,它是一个工具集,可以更轻松地建立包含 SketchUp 模型的设计演示。设计展示|模型下载|插件开发|渲染动画|虚拟现实|LayOut 能够帮助设计者来准备文档集以便传递他们的设计理念。使用简单的 LayOut 工具,设计者可以放置 SketchUp 模型、草图及其他绘图元素,还可以整理它们,并添加标题和注解来将其汇编成演示文稿或文档图形。在 LayOut 中,设计者可以创建演示板块,小格式手册及幻灯片。[|建筑|室内|景观|规划|插件|渲染|动画|教程|下载|LayOut 是非真实渲染应用程序或 2D CAD 应用程序。 Style Builder则是用来修改线条的软件,修改完后应用到风格里就可以了。作用不是特别大,因为它只能改线条笔触,背景呀什么的直接在SKETCHUP里改。
2023-06-06 16:40:503

C++ Builder操纵多媒体数据库

随着计算机软、硬件技术的日益发展,对多媒体信息的处理能力不断增强,利用快速开发工具C++ Builder所具有的强大数据库开发功能,使得对多媒体数据(库)的创建、存、取、显示、播放等控制都非常容易实现。本文将以构建具有5个字段“编号、姓名、像片、声音、活动影像”的数据库为例,根据多媒体数据与数据库本身是否共同存储,介绍两种多媒体数据库处理方法,在这里称为集成法和分离法。集成法此方法是将多媒体数据直接存入数据库中,“编号”和“姓名”字段都取ftString字段类型,“像片”字段采用ftGraphic字段类型用于存放BMP文件,“声音”和“活动影像”字段均采用ftBlob字段类型(其他格式的多媒体文件均可以采用这种二进制类型存储),分别用于存放WAV和AVI文件,这样的数据库结构既可以采用C++ Builder提供的“Database Desktop”创建,也可以用下面的代码创建:TTable *newTable = new TTable(this);newTable-Active = false;newTable-DatabaseName = “e:\mydata”;newTable-TableName = “example1.db”;newTable-TableType = ttParadox;//定义数据表类型newTable-FieldDefs-Clear();newTable-FieldDefs-Add(“编号”,ftString,8,false); //定义字段、类型、长度等newTable-FieldDefs-Add(“姓名”,ftString,8,false);newTable-FieldDefs-Add(“像片”,ftGraphic,0,false);newTable-FieldDefs-Add(“声音”,ftBlob,0,false);newTable-FieldDefs-Add(“数字电影”,ftBlob,0,false);newTable-CreateTable(); //创建数据表delete newTable;由于要编程实现往数据库中添加记录的功能,因此假定在数据库程序设计阶段数据表example1。db已经建好,同时假定所需要的多媒体文件均存放于e:mydatamedia路径之下。所要完成的程序的功能界面如图1所示:点击“打开数据库”按钮将打开库文件example1.db并显示原有记录的相应信息。点击“增加记录”按钮将追加新的记录,通过数据导航按钮进行记录的移动、修改等操作,在每一时刻,点击“听听声”按钮可以听到当前记录所对应的声音,点击“看看影”按钮可以看到当前记录对应的活动影像。这个应用已具备一个多媒体数据库应用系统的基本功能,以下是主要设计步骤:1. 组件设置向窗体增加一个TTable组件Table1,一个TDataSource组件DataSource1,两个TDBEdit组件DBEdit1和DBEdit2,一个TDBImage组件DBImage1,一个TDBNavigator组件DBNavigator1,一个TMediaPlayer组件MediaPlayer1,一个TOleContainer组件OleContainer1,四个TButton组件和三个TLable组件。这些组件需要设置的部分属性如下表:作者:来自:计算机世界网注: 表中标记“▲”的几个属性表示只有数据表example1.db已经存在,才能在设计阶段进行设置。2. 创建字段变量双击窗体的Table1组件,在弹出的 “Form1-Table1” 小窗口的空白处单击鼠标右键,选择“Add Fields”菜单命令,然后选中“像片、声音、活动影像”三个字段,点击OK按钮。回到“Form1-Table1”小窗口,选中“图片”,将其Name属性修改为Table1BMPField.类似地将“声音”和“活动影像”的Name属性分别修改为Table1WAVField和Table1AVIField,这样就创建了对应的字段变量,利用它们就可以动态地向相应字段中存入多媒体数据了(如果数据表example1.db不存在,应该选择“New Fields”菜单命令创建,这样做必须创建所有的字段,较为麻烦)。3. 代码设计“打开数据库”按钮的OnClick事件过程代码如下: void __fastcall TForm1::Button1Click(TObject *Sender){ Table1-DatabaseName = “e:\mydata”;Table1-TableName = “example1.db”;Table1-Active = true; //打开数据表}在“增加记录”按钮的OnClick的事件过程中输入代码: void __fastcall TForm1::Button2Click(TObject *Sender){ Table1-DatabaseName = “e:\mydata”;Table1-TableName = “example1.db”;Table1-Active = true;Table1-AppendRecord(OPENARRAY(TVarRec,(“20010521”,“刘德友”)));//增加一条记录Table1-Edit( ); //进入编辑状态Table1BMPField-LoadFromFile(“\media\ldy.bmp”);//将图片文件载入像片字段Table1WAVField-LoadFromFile(“\media\ldy.wav”);//将声音文件载入声音字段Table1AVIField-LoadFromFile(“\media\ldy.avi”);//将电影文件载入活动影像字段Table1-AppendRecord(OPENARRAY(TVarRec,(“20010522”,“王英”)));//增加第二条记录Table1-Edit( );Table1BMPField-LoadFromFile(“\media\wy.bmp”);Table1WAVField-LoadFromFile(“\media\wy.wav”);Table1AVIField-LoadFromFile(“\media\wy.avi”);Table1-AppendRecord(OPENARRAY(TVarRec,(“20010523”,“张雪花”)));//添加第三条记录Table1-Edit( );Table1BMPField-LoadFromFile(“\media\zxh.bmp”);Table1WAVField-LoadFromFile(“\media\zxh.wav”);Table1AVIField-LoadFromFile(“\media\zxh.avi”);}用类似的语句可以添加多条记录。显然,若需要其他格式的多媒体数据文件也可用此法,作为二进制文件将其存入数据库。如果利用TOpenDialog组件则能够在运行过程中实现“动态”加载多媒体数据文件到相应字段。按钮“听听声”的OnClick事件过程的代码如下: void __fastcall TForm1::Button3Click(TObject *Sender){ AnsiString waveName = “temp.wav”;Table1WAVField- SaveToFile(waveName);//存成临时文件Sleep(50); //作为缓冲,暂停50毫秒MediaPlayer1-FileName = waveName;MediaPlayer1-Open();MediaPlayer1-Play();}按钮“看看影”的OnClick事件过程的代码如下:void __fastcall TForm1::Button4Click(TObject *Sender){ AnsiString aviName = “temp.avi”;Table1AVIField-SaveToFile(aviName);Sleep(50);OleContainer1-CreateLinkToFile(aviName,false);OleContainer1-DoVerb(ovPrimary);}注意这里使用TOleContainer1组件实现AVI播放,当然也可以用MediaPlayer1组件进行播放,此处只是提供了一种方法:利用软件的OLE技术对一些特殊格式的多媒体数据文件采用TOleContainer处理,例如DOC、PSD、DWG、SWF等,只要目标计算机安装了该软件的服务程序(想知道计算机支持哪些格式媒体文件只要在Word软件中查看“插入——对象”菜单便知),笔者利用此技术成功地实现了Flash动画存储和播放(已装有Flash 5)。当然也可使用第三方开发的组件或控件,C++ Builder也支持OCX控件,例如利用MP3Play控件实现MP3的播放。至此,一个小型的多媒体数据库系统用“集成法”创建完成。分离法这种方法就是将多媒体数据与数据库分开存放。在数据库中相应的字符字段只存放该多媒体数据的文件名,它是数据库与数据之间的“接口”。这种情况下数据库结构可以在运行中动态创建,因此可在功能界面上(功能界面上的其他部分与图1完全相同)再增加一个按钮“创建数据库结构”并在其OnClick事件过程置入如下代码: void __fastcall TForm1::Button5Click(TObject *Sender){ TTable *newTable = new TTable(this);newTable-Active = false;newTable-DatabaseName =“e:\mydata”;newTable-TableName = “example2.db”;newTable-TableType = ttParadox;newTable-FieldDefs-Clear();newTable-FieldDefs-Add(“编号”,ftString,8,false);//字段均为字符型newTable-FieldDefs-Add(“姓名”,ftString,8,false);newTable-FieldDefs-Add(“像片”,ftString,12,false);newTable-FieldDefs-Add(“声音”,ftString,12,false);newTable-FieldDefs-Add(“活动影像”,ftString,12,false);newTable-CreateTable();delete newTable;}由于允许动态创建库结构,组件Table1的DatabaseName属性和DBEdit1、DBEdit2的DataField属性用代码进行设置。因为“像片”字段存放的只是其文件名,所以组件DBImage1用Image1组件代替。这时,只需将“打开数据库”按钮的OnClick事件过程修改为: void __fastcall TForm1::Button1Click(TObject *Sender){ Table1-DatabaseName = “e:\mydata”;Table1-TableName = “example2.db”;DBEdit1-DataField = “编号”;DBEdit2-DataField = “姓名”;Table1-Active = true;Image1-Picture-LoadFromFile(Table1-DatabaseName + “\media\” + Table1-FieldByName(“像片”)-AsString);}将“增加记录”按钮的OnClick事件过程修改为: void __fastcall TForm1::Button2Click(TObject *Sender){ Table1-Active = false;Table1-DatabaseName = “e:\mydata”;Table1-TableName = “example2.db”;Table1-Active = true;Table1-AppendRecord(OPENARRAY(TVarRec,(“20010521”,“刘德友”,“ldy.bmp”,“ldy.wav”,“ldy.avi”)));Table1-AppendRecord(OPENARRAY(TVarRec,(“20010522”,“王英”,“wy.bmp”,“wy.wav”,“wy.avi”)));Table1-AppendRecord(OPENARRAY(TVarRec,(“20010523”,“张学华”,“zxh.bmp”,“zxh.wav”,“zxh.avi”)));Table1-First();//记录指针移到数据表首条记录Image1-Picture-LoadFromFile(Table1-DatabaseName + “\media\”+Table1-FieldByName(“像片”)-AsString);}将“听听声”按钮的OnClick事件过程修改为: void __fastcall TForm1::Button3Click(TObject *Sender){ AnsiString wavName = Table1-DatabaseName + “\media\” + Table1-FieldByName(“声音”)-AsString;MediaPlayer1-FileName = wavName;MediaPlayer1-Open();MediaPlayer1-Play();}将“看看影”按钮的OnClick事件过程修改为: void __fastcall TForm1::Button4Click(TObject *Sender){ AnsiString aviName = Table1-DatabaseName + “\media\” + Table1-FieldByName(“活动影像”)-AsString;OleContainer1-CreateLinkToFile(aviName,false);OleContainer1-DoVerb(ovPrimary);}为了使操作界面上显示的像片能随记录指针的移动而改变,可以添加组件DBNavigator1的OnClick事件,其过程代码只有一条语句:void __fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button){ Image1-Picture-LoadFromFile(Table1-DatabaseName + “\media\” + Table1-FieldByName(“像片”)-AsString);}至此,一个小型的多媒体数据库系统用“分离法”创建完成。小 结以上介绍了多媒体数据从创建、存入,到读取、显示、播放等两种不同的控制方法,这两种处理方式各有优劣。若多媒体数据与数据库共同存储,数据便于管理,整个数据库系统只有一个数据库文件,但它的缺点是数据库文件会变得非常之大,使应用系统读取的运行效率降低; 若多媒体数据与数据库分开存储,其缺点是文件数量较多,维护、管理不太方便,但它的优点是数据库文件较小,数据库打开和应用系统读取的运行效率大大提高。一般的原则是,如果多媒体数据的尺寸较小并且又有专门的数据库组件可与之关联,如职工的照片BMP文件可用组件TDBImage、格式化文档RTF文件可用组件TDBRichEdit等,这时可以采用“集成法”将数据直接存入数据库; 若多媒体数据的尺寸较大,如音频、视频等,可将数据与数据库分开存储,在数据库中只保留多媒体数据的文件名,是一种“链接”的方式,这样做有一定的灵活性,比如想修改某条记录的信息,只需直接修改数据文件,而不必打开数据库。
2023-06-06 16:41:241

C++Builder是干什么用的?——C爱好者

diagram文件。可以在单元文件中使用图形化的描述,此类型文件对编译源代码无影响,但是如果使用了diagram功能,则此文件对理解单元可能会比较有用,在我们的工程中无需这些文件进源代码库,即使有这些文件也可能是因为切换到diagram页生成的。
2023-06-06 16:41:325

把握C++ Builder的调试艺术

以代码为基础的调试方法程序的bugs越少,最终用户对这个程序的评价越高。而开发人员事先对bugs的处理越多,最终用户能提供的关于bugs的信息就越多,也越准确,这样,开发人员在接到最终用户反映之后,就能够快速找到出现bugs的那部分代码,并以最快速度发布程序的升级包。在这份教程中,我们从最基本的部合并始,逐步介绍许多在调试程序时“该当做”或“不该当做”的原则。正如你将看到的,这份教程中所指的“调试”这个词所包括的意思很多,而不只是如大部分人所想到的--利用IDE集成的调试器的“调试”。我期望读过这份教程之后,读者可以在思路上有所收获。写易读的代码第一点,大概也是最重要的一点,就是写洁净易读的代码。易读的代码是很有价值的。请想象一下,假如随便扫视一眼代码或注释,就能马上知道这段代码的的作用,以及在写代码的时候为什么要这样写,当时的思路是什么,那么就可以节约大量时间。这样的代码,在写的时候可能会稍稍慢一些,不过,当你调试程序时,就不会花上几个小时来寻找bugs,相反,你可以快速,简单的完成除错工作。这时,你就会觉得多花一些时间使程序易读是很值得的。所以,我推荐你在写程序的时候,该当养成自己的风格,或是读一读Scott的关于代码风格的文章。使用Exceptions和Exception的处理方法我们教程的下一步,仍然是以代码为基础的。因为除去一些少数的情况,开发人员不可能总是依靠于集成的调试工具。所以,学会用其它的方法来找到烦人的bugs是很重要的。一些重要的、处理的错误可能会在窗体之外发生。在C++标准制定出来之前的黑暗日子里,在程序里面发出发生错误的信号,通常是通过返回错误代码完成的(现在这种方法仍然应用于OLE技术和一些Winapi函数),这样的处理方法很轻易就会被忽略。(比如说,你经常反省winapi函数的返回值吗?)所以,出现问题的可能性并不小。由于以上的原因,我们需要一个这样的机制,它能让我们不能忽略这些错误,而且,这个机制该当能被我们控制和自定义的。在这样的需求下,异常处理机制出现了。需要一个非凡的错误类型吗?简单,定义一个新的异常类型就行了(和定义一个类的方法差不多),然后抛出(throw)它。下面这个例子说明了这一过程。例1://----------------------------------------------------------------class MyException{public:AnsiString iMessage;MyException(AnsiString Message) { iMessage=Message;}};throw new MyException(“Test Exception Message”);//---------------------------------------------------------------就是它!(不是十分好,下面我们会继续完善它)。简单高效,而且便于自定义。或许你现在会问:“我可以使抛出异常了,但是,怎么控制它们呢?我的意思是,我想在代码的最前面排除异常。”C++Builder为我们中定义了try {} catch (...) {}机制。这和我们刚刚定义的异常机制的结构很相似。这个机制完全可以按照需要自定义。要使用异常处理了,只要把要执行的代码放到try块里面,为了让程序知道出现异常后该当做什么,还需要定义一个catch()或是__finally块。catch()语句里面可以指定一个要捕捉的类型或是变量(比如例1,就是catch(MyException E){ /* 异常处理代码/}这个机制很强大,甚至可以用它来捕捉树结构或是继续类的异常,假如捕捉了基类的异常,它就能捕捉到继续这个基类的所有的类的异常。比如,在VCL中,所有的异常都是继续于Exception类。所以,catch(Exception E)可以捕捉到除了EsocketError的所有VCL异常。(这点请非凡注重,当前还将继续讨论。)为了让这个机制更强大,C++Builder中还定义了catch()语句。(没错,就是三个点)使用这条语句可以捕捉到所有的异常。还有更多的功能吗?当然,你可以添加更多的catch()语句,可以向使用if...else if...语句那样使用它。注重,在一系列的catch()语句中,错误不会被重复的捕捉,也就是说,假如前面的catch()语句捕捉到了错误,后面的catch()语句将不会捕捉这条错误。例2://---------------------- try{// 正常代码}catch(EDBEngineError E){// 处理数据库引擎错误}catch(EExternalError E){// 处理窗口类的错误}catch(Exception E){// 处理所有的VCL错误}//----------------------请看例2,它的代码运行流程是这样的:“错误是EDBEngineError吗?是-处理它。不是-运行下一个catch语句”“错误是EExternalError吗?是-〉处理它。不是-〉运行下一个catch语句”等等。这个机制还有更多的功能。假如你想处理异常,但是不想在处理的位置停止,那么可以重新抛出异常。这时,程序将继续寻找下一个catch()语句来处理这个异常。这个方法和“throw”差不多。这样,你处理过的异常会再次被抛出,继续寻找下一个catch语句来处理它。最后一个要说的是__finally(这不是标准的用法,是Borland添加的一个好方法),在__finally{}程序块中代码,无论是否发生异常都会被执行。这是一个清理程序中使用new分配的本地变量,设置用作旗标的变量值为正常的好位置。(比如,把一个等待状态的光标图标设置为正常光标。)就是这些了。有时间的话,请看看C++Builder帮助文件中的Exception类以及继续Exception的类。这些将对于理解本节所说的内容有很大帮助。使用记录机制你不可能总是用调试器来调试代码,在某些情况下,可能无法使用内部集成的调试器,这时候,你就不得不依靠其他手腕调试程序了。(比如:Windows NT服务程序,ISAPI/CGI程序,实时应用程序等等)。这时候,有经验的程序员可能会借助古老的调试方法,例如,使用一些分类的记录机制来确定程序实际运行的过程。我们很幸运,现在有一系列的方法可以简单的完成这样的工作。下面将介绍3种我最喜欢的方法。第一个:OutputDebugString。(WinAPI: VOID OutputDebugString(LPCTSTR lpOutputString);)很幸运,微软彻底的实现了调试子系统。它包括的一些特点可能让你想把自己的记录系统扔掉。应用程序在调试器进程中运行时OutputDebugString将用C字符串把调试器输出的信息打印出来。假如程序没有在调试器进程中运行,它将忽略这些调用。它会很好的在客户的机器上运行,不会弹出信息窗口。假如在发布给客户的时候,忘记去掉这些代码程序仅仅会变慢一点,不会有别的不良后果。第二个方法:使用了GExperts,通过 dbugint.pas接口进行调试。它是个可以称之为伟大的程序,你可以把它分发给客户。和OutputDebugString一样,假如客户没有这个程序,它就根本什么也不作。(它会主动检测机器上是否安装了客户端)。要使用dbugintf,它很轻易被加入到你的工程中,加入#include "dbugintf.HPp"(要把它加入工程,然后会编译它的pascal文件)。然后,你就可以直接使用SendDebug(要送到记录文件的字符串); 或者,你需要它更机警一些,可以使用SendDebugEx(它给TMsgDlgType增加了一个新的消息类型)SendMethodEnter, SendMethodExit, SendSeparator等等(用法都差不多)。假如你打算给最终用户分发客户端 (Gdebug.exe),不要忘记include所需要的程序包。GExperts可以在 得到,它是收费的。第三个,大概是最艰苦的方法,就是使用你自己的记录控制。这个方法可能不是你想象的这么简单。你可能首先会想到“在窗体上扔一个RichEdit,把它设置为只读的,然后往里面写记录”是这样吧?理论上不错,但是,实施起来...首先,使用RichEdit控件来做记录,会大大降低应用程序的速度,还会在内存中造成碎片,甚至丢失内存。通常,在运行10分钟左右之后,会使整个计算机的速度变慢!(这样做简直是在犯罪!)所以,假如你期望在自己的记录中能够使用彩色和图标,那么最好自己创建一个组件。假如没有这么高的要求,那么有一个简单有效的方法,就是使用ListBox控件作记录,把ListBox的Style属性设置为lbOwnerDrawFixed,这样句柄将会自绘。(GExperts的控制台就是用这样的方法制作的)。将记录和异常处理结合使用你不用总是担心可能会发生什么偶然的异常。一般来说,通过很多的bugs测试后(尽量折磨程序,看看它会不会崩溃),应用程序在运行是该当不会出现什么错误。下面的这个技术,建议组件开发者,在第一次把组件放在IDE环境测试的时候,很该当恪守。一个在IDE中产生的异常会导致很多问题,甚至可能无法重新启动IDE也不能恢复。这个技术很简单。在代码中每一个函数或是主要的函数中加入:try{//函数的代码}catch(Exception E){SendDebugMessage(“Exception caught in classname::functionname of type:” +E.ClassName()+” with the message:”+E.Message);};(把字符串中classname 和 functionname 替换成相应的类名和函数名。在出现错误时,你会马上知道错误发生的位置。这样也就不至于强制重起IDE的了。现在,让我们看看前面的内容, ClassName()给了我们什么样的帮助呢?它只是用于返回字符串“Exception”吗?每一次,E都被声明为异常类型?这是VCL另一个优秀的地方,所有的类都从TObject继续,所以,这些类都能主动获得正确的类型和基类的类型,所有的更多的信息都可以在这里找到。(请参见TObject的帮助)所以,尽管我们使用了Exception E,其中的E.ClassName()将返回捕捉到的产生异常的实际类名。得到这些好处需要付出的代价是编译出来的可执行文件变大了一些。所有的Delphi/CBuilder用户都注重到了这一点,但是他们说,没有付出就没有收获。其中,他提到了使用TStringList作记录的方法:先将错误通过TStringList的Add方法加入到StringList里面,然后使用SaveToFile保存到硬盘上。不过要注重在程序结束的时候不要忘记使用SaveToFile()方法把TStringList保存起来。或者,也可以每次捕捉到异常之后都保存一次。在代码外部进行异常处理这是使用代码处理异常的最后一节,当前,我们将使用IDE的调试工具。但是,这节中讲到的方法在处理致命错误时是很重要的。比如说:可以显示一个包括了错误信息的对话框,这样,用户报告bugs的时候会清除的多。你肯定不想听到用户报告说:“啊,这有个对话框,上面写着什么地址发生了错误”。有个好办法能改善这种状况,请往下面看。第一步:在主窗体(工程设置里面,主动创建的第一个窗体)中创建这样一个函数:void __fastcall AppLevelExceptionHandler(TObject *Sender, Exception *E){}然后,在里面加上显是错误(E-Message)的代码,错误类型(记住前面提到过的E.ClassName())以及其他需要的细节信息。第二步:把它与系统挂钩。很简单,只需要在窗体的OnCreate事件中加入这行:Application-OnException=AppLevelExceptionHandler;在这行代码上,不要吝啬,因为加上它,基本上就可以说所有的错误都不会漏掉了。无论在任何地方发生的错误都可以被捕捉到。现在,所有以代码为基础的调试方法你都学会了,马上把他们加入到你的工程里去吧。最好能把它们变为你的习惯。这将对你的程序有很大帮助。
2023-06-06 16:41:571

如何使用c++builder?

  C++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境:  只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C++ Builder内置了100多个完全封装了Windows公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件;C++ Builder具有一个专业C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等。  它实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。
2023-06-06 16:42:133

在C++Builder中自定义预览窗口

Borland C++ Builder是基于C++语言的可视化编程环境,它提供了可重用组件库和一系列RAD设计工具,使得编程者只需用少量的手工代码就可以创建出高效的Windows应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱。在开发数据库访问应用程序时,会经常涉及到报表的打印问题。C++ Builder中提供了Quick Report(快速报表)组件供编程人员设计报表。Quick Report是挪威的QuSoft AS公司专门为C++ Builder设计的用于制作报表的一组控件,在C++ Builder中关于Quick Report的帮助文档不是很详细。另外它与C++ Builder的其他控件的风格也不太一致。直接使用Quick Report的报表预览功能总是不能达到令人满意的效果,因此有必要自定义快速报表的预览窗口。设置预览窗口新建工程,在Form1窗体上添加一个ToolBar控件,并在其上添加以下按钮:“打印”、“打印设置”、“上一页” 、“下一页”、“放大”、“缩小”和“关闭”。 在Form1窗体上添加一个Panel控件,对齐方式设为alBottom,再在此Panel控件上添加一个ProgressBar控件(对齐方式设为alLeft)和一个Panel控件(Name 为Panel2,对齐方式设为alRight,BevelOuter设为bvLowered),这两个控件分别用来显示报表装载进度和其他提示信息。在Form1窗体上添加一个QRPreview控件,对齐方式设为alClient.再新建一个窗体,设其Name为Form2, 在该窗体上添加TQuickRep控件,设其Name为QuickRep1,其PrinterSetting中的Units属性设为mm(以毫米为计量单位),然后建立报表。编程实现1.在Form2上选择QuickRep1,在其事件中选择OnPreview,输入以下代码:Form1-QRPreview1-QRPrinter=Form2-QuickRep1-QRPrinter;2.在Form1的头文件中找到对象TForm1的定义,在其中添加以下的代码:int OldPaperSize;int OldOrientation;int OldTop;int OldBottom;int OldLeft;int OldRight;void RefreshPanel();3.选择Form1的Activate事件,输入以下代码://初始化OldPaperSize=Form2-QuickRep1-Page-PaperSize;OldOrientation=Form2-QuickRep1-Page-Orientation+1;OldLeft=Form2-QuickRep1-Page-LeftMargin*100;OldRight=Form2-QuickRep1-Page-RightMargin*100;OldTop=Form2-QuickRep1-Page-TopMargin*100;OldBottom=Form2-QuickRep1-Page-BottomMargin*100;Form2-QuickRep1-Prepare();RefreshPanel();Form2-QuickRep1-Preview();4.在Form1中添加更新提示代码:void TForm1::RefreshPanel(){ //更新提示信息Panel2-Caption=“第”+IntToStr(Form1-QRPreview1-PageNumber)+“页”+“共” + IntToStr(Form2-QuickRep1-PageNumber)+“页”;}5.从Form1中选择QRPreview1,在其事件中选择OnProgressUpdate,输入以下代码://显示报表装载进度ProgressBar1-Position=Progress;RefreshPanel();6.打印:Form2-QuickRep1-Print();7.打印设置:DEVMODE *pDev;LPPAGESETUPDLG mylp=new PAGESETUPDLG;memset((void *)mylp,0,sizeof(PAGESETUPDLG));mylp-lStructSize=sizeof(PAGESETUPDLG);mylp-hwndOwner=this-Handle;mylp-Flags=PSD_RETURNDEFAULT;PageSetupDlg( mylp );if (mylp-hDevMode!=NULL){pDev=(DEVMODE *)GlobalLock(mylp-hDevMode);pDev-dmPaperSize =OldPaperSize;pDev-dmOrientation =OldOrientation;mylp-rtMargin.left =OldLeft;mylp-rtMargin.right =OldRight;mylp-rtMargin.top =OldTop;mylp-rtMargin.bottom=OldBottom;GlobalUnlock(mylp-hDevMode);mylp-Flags=PSD_MARGINS|PSD_INHUNDREDTHSOFMILLIMETERS;if(PageSetupDlg(mylp)){pDev=(DEVMODE *)GlobalLock(mylp-hDevMode);OldPaperSize =pDev-dmPaperSize;if(OldPaperSize28)OldPaperSize=9;//A4OldOrientation=pDev-dmOrientation;OldLeft =mylp-rtMargin.left;OldRight =mylp-rtMargin.right;OldTop =mylp-rtMargin.top;OldBottom =mylp-rtMargin.bottom;Form2-QuickRep1-Page-Orientation =OldOrientation-1;Form2-QuickRep1-Page-PaperSize=OldPaperSize;Form2-QuickRep1-Page-LeftMargin =OldLeft/100;Form2-QuickRep1-Page-RightMargin =OldRight/100;Form2-QuickRep1-Page-TopMargin =OldTop/100;Form2-QuickRep1-Page-BottomMargin=OldBottom/100;GlobalUnlock(mylp-hDevMode);}GlobalFree(mylp-hDevMode);}delete mylp;QRPreview1-PageNumber=1;Form2-QuickRep1-Prepare();Form2-QuickRep1-Preview();8.向上翻页://上一页if(QRPreview1-PageNumber1)QRPreview1-PageNumber--;RefreshPanel();9.向下翻页://下一页if(QRPreview1-PageNumberForm2-QuickRep1-PageNumber)QRPreview1-PageNumber++;RefreshPanel();10.放大处理://放大if(QRPreview1-Zoom 200)QRPreview1-Zoom+=5;11.缩小处理://缩小if(QRPreview1-Zoom5)QRPreview1-Zoom-=5;小 结该方法的核心是使用了Win32 API函数PageSetupDlg(),利用该函数可以获取页面设置的缺省值,包括纸张大小、打印方向以及上下左右空白边的大小等,也可以弹出页面设置对话框来修改这些值。
2023-06-06 16:42:201

eclipse中怎么为一个project配置builders

Builder为项目的构建器,通过构建器能实现项目的增量构建和完全构建。在插件中添加Builder扩展点,步骤如下。1. 在插件清单文件的Extensions页中添加“org.eclipse.core.resources.builders”扩展点,设置ID属性为“helloworldbuilder”,name属性为“hello world, bulder”。2. 在“org.eclipse.core.resources.builders”节点下添加builder子节点。3. 在builder节点下添加run节点,设置实现类class为“com.free.project. HelloWorldBuilder”。扩展点在plugin.xml文件中的描述如下。<extension id="helloworldbuilder" name="hello world, bulder" point="org.eclipse.core.resources.builders"> <builder> <run class="com.free.project.HelloWorldBuilder"/> </builder> </extension>builder 扩展点的实现类继承于“IncrementalProjectBuilder”类,并实现了两个资源监听器。当项目中资源发生变化的时候调用构建,本例中 只打印出相应的数据,并没有实现构建的动作,当用户需要构建时可以替换相应代码,例如编译文件等。
2023-06-06 16:42:282

c++ builder是什么

就是用C++语言写程序的软件。。。。
2023-06-06 16:42:354

idea中的getter/setter,选择intellij default和builder有什么区别?

我们以一个变量name为例,来说明他们的区别,首先定义变量name:private String name;intellij default是用于常规的属性操作的,这里的话以set为例,它是用于为对象设置属性的,使用intellij default生成的set方法为:@Overridepublic void setName(String name) {this.name = name;}而这里的builder的目的是用于快速构建实例的;也就是通过给定的name,快速构建一个参数是name的实例,这里的代码为:@Overridepublic MyGameFrame setName(String name) {this.name = name;return this;}不过不论是intellij default和builder,模板都是可以修改的。
2023-06-06 16:42:421

如何用c++builder 编写多线程

摘 要:本文简单介绍了Windows环境下进行多线程编程的意义,重点讨论了C++Builder环境下开发多线程应用程序这一问题,并通过实现生产者-消费者问题,帮我们更好地理解同步概念及其实现方法。 关键词:多线程;同步;生产者-消费者;C++Builder 线程之可行性 在很多情况下,可能需要为程序创建线程。这里给出其中一些可能性: (1)如果创建的是一个多文档接口(Multiple Document Interface,MDI)程序,那么为每个窗口分配一个线程就显得十分重要了,例如,对于一个通过多个Modem同时连接到多个主机的MDI通信程序而言,如果每个窗口都有它自己的线程来和一个主机通信,那么整个事情就简化很多。 (2)如果使用的是一台有多个处理器的机器,并希望充分利用所有可能获得的CPU资源,那么就需要将应用程序分解成多个线程。Windows2000中CPU的划分单位为线程。因此,如果程序只包含一个线程,那么,默认环境下该程序只能使用其中一个CPU。但是,如果将此程序划分为多个线程,那么Windows2000就可以在不同的CPU上运行各个线程。 (3)在后台运行的某些任务的同时,要求用户还可以继续使用应用程序进行工作。利用线程很容易实现这点。例如:可以将一些冗长的重算、页面格式化操作、文件的读写等活动都放在单独的线程中,使其在后台运行,而不会对用户造成影响。 同步 撰写多线程程序的一个最具挑战性的问题就是:如何让一个线程和另一个线程合作。这引出了一个非常重要的问题:同步。所谓同步是指进程、线程间相互通信时避免破坏各自数据的能力。Windows环境下的同步问题是由Win32系统的CPU时间片分配方式引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU)时间,但是无法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此的数据就显得格外重要。同步问题是如此重要,也相当有趣,因而吸引了不少学者对他进行研究,由此产成了一系列经典的进程同步问题,其中较有代表性的是"生产者-消费者问题"、"读者-写者问题""哲学家进餐问题"等。在此,本文简要讨论了C++Builder平台下如何利用多线程编程技术实现"生产者-消费者"问题,帮助我们更好得理解同步概念及其实现方法。 生产者-消费者问题 生产者-消费者问题是一个著名的进程同步问题。它描述的是:有一群生产者进程在生产消息,并将此消息提供给消费者进程去消费。为使生产者进程和消费者进程能并发进行,在他们之间设置了一个具有N个缓冲区的缓冲池,生产者进程可以将它所生产的消息放入一个缓冲区中,消费者进程可以从一个缓冲区中取得一个消息消费。尽管所有的生产者进程和消费者进程都是以异步方式进行的,但他们之间必须保持同步,即不允许消费者进程到一个空的缓冲区中去取消息,也不允许生产者进程向一个已装满消息且尚未被取走消息的缓冲区中投放消息。 C++Builder多线程应用程序编程基础 1、使用C++Builder提供的TThread类 VCL类库提供了用于线程编程的TThread类。在TThread类中封装了Windows中关于线程机制的WindowsAPI。对于大多数的应用程序来说,可在应用程序中使用线程对象来表示执行线程。线程对象通过封装使用线程所需的内容,简化了多线程应用程序的编写。注意,线程对象不允许控制线程堆栈的大小或其安全属性。若需要控制这些,必须使用WindowsAPI的Create Thread()或Begin Thread()函数。TThread类有以下一些属性和方法: 1) 属性: ·Priority:优先级属性。可以设置线程的优先级。 ·Return Value:返回值属性。当线程介绍时返回给其他线程一个数值。 ·Suspended:挂起属性。可以判断线程是否被挂起。 ·Terminated:结束属性。用来标志是否应该结束线程。 ·ThreadID:标识号属性。在整个系统中线程的标识号。使用Windows API函数时该属性非常有用。 2) 方法: ·Do Terminate:产生一个On Terminate事件,但是不结束线程的执行。 ·Resume:唤醒一个线程继续执行。 ·Suspend:挂起一个线程,要与Resume过程成对使用。 ·Synchronize:由主VCL线程调用的一个同步过程。 ·Terminate:将Terminate属性设置为True,中止线程的执行。 ·Wait For:等待线程的中止并返回Return Value属性的数值。 2、协调线程 在编写线程执行时运行的代码时,必须考虑到可能同步执行的其他线程的行为。特别注意,避免两个线程试图同时使用相同的全局对象或变量。另外,一个线程中的代码会依赖其他线程执行任务的结果。 1) 避免同时访问 为避免在访问全局对象或变量时与其他线程发生冲突,可能需要暂停其他线程的执行,直到该线程代码完成操作。 (1)锁定对象。一些对象内置了锁定功能,以防止其他线程使用该对象的实例。例如,画布对象(TCanvas及其派生类)有一种Lock()函数可以防止其他线程访问画布,直到调用Unlock()函数。显然,这种方法只对部分类有效。 (2)使用重要区段。若对象没有提供内置的锁定功能,可使用重要区段。重要区段像门一样,每次只允许一个线程进入,要使用重要区段,需创建TCriticalSection的全局实例。TCriticalSection有两个函数:Acquire()(阻止其他线程执行该区域)及Release()(取消对其他线程的阻止)。 (3)使用多重读、独占写的同步器。当使用重要区段来保护全局内存时,每次只有一个线程可以使用该内存。这种保护可能会超出了需要,特别是有一个经常读但很少写的对象或变量时更是如此。多个线程同时读相同内存但没有线程写内存是没有危险的。当有一些经常被读,但是很少写的全局变量时,可用TMultiReadExclusiveWriteSynchronizer对象保护它。这个对象和重要区段一样,但它允许多个线程同时读,只要没有线程写即可。每个需要读内存的线程首先要调用Begin Read()函数(确保当前无其他线程写内存),线程完成对保护内存读操作后,要调用End Read()函数。任何线程需要写保护内存必须调用Begin Write()函数(确保当前无其他线程读或写内存),完成对保护内存写操作后,调用End Write()函数。 (4)使用Synchronize函数:Void __fast call Synchronize (TThreadMethod &Method); 其中参数Method为一个不带参数的过程名。在这个不带参数的过程中是一些访问VCL的代码。我们可以在Execute过程中调用Synchronize过程来避免对VCL的并发访问。程序运行期间的具体过程实际上是由Synchronize过程来通知主线程,然后主线程在适当的时机来执行Synchronize过程的参数列表中的那个不带参数的过程。在多个线程的情况下,主线程将Synchronize过程发过来的通知放到消息队列中,然后逐个地响应这些消息。通过这种机制Synchronize实现了线程之间地同步。 2) 等待其他线程 若线程必须等待另一线程完成某项任务,可让线程临时中断执行。然后,要么等待另一线程完全执行结束,要么等待另一线程通知完成了该任务。 (1)等待线程执行结束 要等待另一线程执行结束,使用它地Wait For()函数。Wait For函数直到那个线程终止才返回,终止的方式要么完成了其Execute()函数,要么由于一个异常。 (2)等待任务完成。有时,只需要等待线程完成一些操作而不是等待线程执行结束。为此,可使用一个事件对象。事件对象(TEvent)应具有全局范围以便他们能够为所有线程可见。当一个线程完成一个被其他线程依赖的操作时,调用TEvent::Set Event()函数。Set Event发出一个信号,以便其他线程可以检查并得知操作完成。要关掉信号,则使用Reset Event()函数。 例如,当必须等待若干线程完成其执行而不是单个线程时。因为不知道哪个线程最后完成,也就不能对某个线程使用Wait For()函数。此时,可通过调用Set Event以在线程结束时累加计数值并在最后一个线程结束时发出信号以指示所有线程结束。 多线程应用程序编程实例 下面是一个实现"生产者-消费者问题"的多线程应用实例。在此例中,我们按上面介绍的方法构造了两个TThread的子类TProducerThread(生产者线程)和TCustomerThread(消费者线程),生产和消费的商品仅仅是一个整数。在协调生产和消费的过程中,重要区段(TCriticalSection)和事件(TEvent)得到了应用。生产者通过TEvent类的对象Begin Consume来通知消费者开始消费,而消费者通过TEent类的对象Begin Produce通知生产者开始生产。程序中共有两个生产者,一个消费者。在两个生产者之间,通过TCriticalSection类的对象同步。其运行界面如图1所示。图1 程序运行效果主要源程序如下所示: 生产者线程:Void __fast call TProducerThread:: Execute (){ //---- Place thread code here ---- Int i = 0; Int j; while(i<100) //每个生产者线程生产100个商品 { Sleep(1000);//延迟,为清楚得显示执行效果 if(Form1->buffer_size > 0)//缓冲池不空,通知消费者消费 { Form1->Begin Consumer->Set Event (); } Form1->Produce Guard->Acquire (); i++; StrResult = IntToStr (i); J = Form1->buffer_size; Form1->Product [j] = i; Form1->buffer_size++;。
2023-06-06 16:42:512

C++ Builder托盘控件

托一个TrayIcon和一个PopupMenu就可以了,两个联上就行了
2023-06-06 16:43:015

builder和architect有什么区别?

你好!builder是建筑工人?architect是建筑师,后者比前者高级点吧。。。仅代表个人观点,不喜勿喷,谢谢。
2023-06-06 16:43:183

build 和built 和building 及builder 的区别

build建造动词,bulit是build的过去时,building是建筑名词,builder是建造者名词
2023-06-06 16:44:391

方便!C++ builder快捷键大全

Clipboard control (default)Ctrl+Ins Edit|CopyShift+Del Edit|CutShift+Ins Edit|PasteCtrl+C Edit|CopyCtrl+V Edit|PasteCtrl+X Edit|CutDebugger (default, classic, Brief, Epsilon, and Visual Studio) Breakpoint viewCtrl+V View SourceCtrl+S Edit SourceCtrl+E Edit BreakpointEnter Edit BreakpointCtrl+D Delete BreakpointDel Delete BreakpointCtrl+A Add BreakpointIns Add BreakpointCtrl+N Enable BreakpointCall stack viewCtrl+V View SourceCtrl+S Edit SourceSpace View Source (Epsilon only)Ctrl+Enter Edit Source (Epsilon only)Message viewCtrl+V View SourceSpace View SourceCtrl+S Edit SourceCtrl+Enter Edit SourceWatch viewCtrl+E Edit WatchEnter Edit WatchCtrl+A Add WatchIns Add WatchCtrl+D Delete WatchDel Delete WatchEditor (default)Shortcut Action or commandF1 Help|Topic SearchCtrl+F1 Help|Topic SearchF3 Search|Search AgainCtrl+E Search|Incremental SearchCtrl+F Search|FindCtrl+I Inserts a tab characterCtrl+j Templates pop-up menuCtrl+N Inserts a new lineCtrl+P Causes next character to be interpreted as an ASCII sequenceCtrl+R Search|ReplaceCtrl+S File|SaveCtrl+T Deletes a wordCtrl+Y Deletes a lineCtrl+Z Edit|UndoCtrl+space bar Code Completion pop-up windowCtrl+Shift+I Indents blockCtrl+Shift+U Outdents blockCtrl+Shift+Y Deletes to the end of a lineCtrl+Shift+Z Edit|RedoCtrl+Shift+space bar Code Parameters pop-up windowAlt+[ Finds the matching delimiter (forward)Alt+] Finds the matching delimiter (backward)End Moves to the end of a lineHome Moves to the start of a lineEnter Inserts a carriage returnIns Turns insert mode on/offDel Deletes the character to the right of the cursorBackspace Deletes the character to the left of the cursorTab Inserts a tabSpace Inserts a blank spaceLeft Arrow Moves the cursor left one column, accounting for the autoindent settingRight Arrow Moves the cursor right one column, accounting for the autoindent settingUp Arrow Moves up one lineDown Arrow Moves down one linePage Up Moves up one pagePage Down Moves down one pageCtrl+Left Arrow Moves one word leftCtrl+Right Arrow Moves one word rightCtrl+Tab Moves to the next code page (or file)Ctrl+Shift+Tab Moves to the previous code page (or file)Ctrl+Backspace Deletes the word to the right of the cursorCtrl+Home Moves to the top of a fileCtrl+End Moves to the end of a fileCtrl+Del Deletes a currently selected blockCtrl+Space Inserts a blank spaceCtrl+PgDn Moves to the bottom of a screenCtrl+PgUp Moves to the top of a screenCtrl+Up Arrow Scrolls up one lineCtrl+Down Arrow Scrolls down one lineCtrl+Enter Opens file at cursorShift+Tab Moves the cursor to the left one tab positionShift+Backspace Deletes the character to the left of the cursorShift+Left Arrow Selects the character to the left of the cursorShift+Right Arrow Selects the character to the right of the cursorShift+Up Arrow Moves the cursor up one line and selects from the left of the starting cursor positionShift+Down Arrow Moves the cursor down one line and selects from the right of the starting cursor positionShift+PgUp Moves the cursor up one screen and selects from the left of the starting cursor positionShift+PgDn Moves the cursor down one line and selects from the right of the starting cursor positionShift+End Selects from the cursor position to the end of the current lineShift+Home Selects from the cursor position to the start of the current lineShift+Space Inserts a blank spaceShift+Enter Inserts a new line with a carriage returnCtrl+Shift+Left Arrow Selects the word to the left of the cursorCtrl+Shift+Right Arrow Selects the word to the right of the cursorCtrl+Shift+Home Selects from the cursor position to the start of the current fileCtrl+Shift+End Selects from the cursor position to the end of the current fileCtrl+Shift+PgDn Selects from the cursor position to the bottom of the screenCtrl+Shift+PgUp Selects from the cursor position to the top of the screenCtrl+Shift+Tab Moves to the previous pageAlt+Backspace Edit|UndoAlt+Shift+Backspace Edit|RedoAlt+Shift+Left Arrow Selects the column to the left of the cursorAlt+Shift+Right Arrow Selects the column to the right of the cursorAlt+Shift+Up Arrow Moves the cursor up one line and selects the column from the left of the starting cursor positionAlt+Shift+Down Arrow Moves the cursor down one line and selects the column from the left of the starting cursor positionAlt+Shift+Page Up Moves the cursor up one screen and selects the column from the left of the starting cursor positionAlt+Shift+Page Down Moves the cursor down one line and selects the column from the right of the starting cursor positionAlt+Shift+End Selects the column from the cursor position to the end of the current lineAlt+Shift+Home Selects the column from the cursor position to the start of the current lineCtrl+Alt+Shift+Left Arrow Selects the column to the left of the cursorCtrl+Alt+Shift+Right Arrow Selects the column to the right of the cursorCtrl+Alt+Shift+Home Selects the column from the cursor position to the start of the current fileCtrl+Alt+Shift+End Selects the column from the cursor position to the end of the current fileCtrl+Alt+Shift+Page Up Selects the column from the cursor position to the bottom of the screenCtrl+Alt+Shift+Page Down Selects the column from the cursor position to the top of the screenBlock commands (default and classic)Shortcut Action or commandCtrl+K+B Marks the beginning of a blockCtrl+K+C Copies a selected blockCtrl+K+H Hides/shows a selected blockCtrl+K+I Indents a block by the amount specified in the Block Indent combo box on the General page of the Editor Options dialog box.Ctrl+K+K Marks the end of a blockCtrl+K+L Marks the current line as a blockCtrl+K+N Changes a block to uppercaseCtrl+K+O Changes a block to lowercaseCtrl+K+P Prints selected blockCtrl+K+R Reads a block from a fileCtrl+K+T Marks a word as a blockCtrl+K+U Outdents a block by the amount specified in the Block Indent combo box on the General page of the Editor Options dialog box.Ctrl+K+V Moves a selected blockCtrl+K+W Writes a selected block to a fileCtrl+K+Y Deletes a selected blockCtrl+O+C Marks a column blockCtrl+O+I Marks an inclusive blockCtrl+O+K Marks a non-inclusive blockCtrl+O+L Marks a line as a blockCtrl+Q+B Moves to the beginning of a blockCtrl+Q+K Moves to the end of a blockBookmark operations (default, classic, and Visual Studio) Shortcut ActionCtrl+K+0 Sets bookmark 0Ctrl+K+1 Sets bookmark 1Ctrl+K+2 Sets bookmark 2Ctrl+K+3 Sets bookmark 3Ctrl+K+4 Sets bookmark 4Ctrl+K+5 Sets bookmark 5Ctrl+K+6 Sets bookmark 6Ctrl+K+7 Sets bookmark 7Ctrl+K+8 Sets bookmark 8Ctrl+K+9 Sets bookmark 9Ctrl+K+Ctrl+0 Sets bookmark 0Ctrl+K+Ctrl+1 Sets bookmark 1Ctrl+K+Ctrl+2 Sets bookmark 2Ctrl+K+Ctrl+3 Sets bookmark 3Ctrl+K+Ctrl+4 Sets bookmark 4Ctrl+K+Ctrl+5 Sets bookmark 5Ctrl+K+Ctrl+6 Sets bookmark 6Ctrl+K+Ctrl+7 Sets bookmark 7Ctrl+K+Ctrl+8 Sets bookmark 8Ctrl+K+Ctrl+9 Sets bookmark 9Ctrl+Q+0 Goes to bookmark 0Ctrl+Q+1 Goes to bookmark 1Ctrl+Q+2 Goes to bookmark 2Ctrl+Q+3 Goes to bookmark 3Ctrl+Q+4 Goes to bookmark 4Ctrl+Q+5 Goes to bookmark 5Ctrl+Q+6 Goes to bookmark 6Ctrl+Q+7 Goes to bookmark 7Ctrl+Q+8 Goes to bookmark 8Ctrl+Q+9 Goes to bookmark 9Ctrl+Q+Ctrl+0 Goes to bookmark 0Ctrl+Q+Ctrl+1 Goes to bookmark 1Ctrl+Q+Ctrl+2 Goes to bookmark 2Ctrl+Q+Ctrl+3 Goes to bookmark 3Ctrl+Q+Ctrl+4 Goes to bookmark 4Ctrl+Q+Ctrl+5 Goes to bookmark 5Ctrl+Q+Ctrl+6 Goes to bookmark 6Ctrl+Q+Ctrl+7 Goes to bookmark 7Ctrl+Q+Ctrl+8 Goes to bookmark 8Ctrl+Q+Ctrl+9 Goes to bookmark 9Cursor movement (default and classic)Shortcut ActionCtrl+Q+B Moves to the beginning of a blockCtrl+Q+C Moves to end of a fileCtrl+Q+D Moves to the end of a lineCtrl+Q+E Moves to the top of the windowCtrl+Q+K Moves to the end of a blockCtrl+Q+P Moves to previous positionCtrl+Q+R Moves to the beginning of a fileCtrl+Q+S Moves to the beginning of a lineCtrl+Q+T Moves to the top of the windowCtrl+Q+U Moves to the bottom of the windowCtrl+Q+X Moves to the bottom of the windowMiscellaneous commands (default and classic) Shortcut Action or commandCtrl+K+D Accesses the menu barCtrl+K+E Changes a word to lowercaseCtrl+K+F Changes a word to uppercaseCtrl+K+S File|Save (default and classic only)Ctrl+Q+A Search|ReplaceCtrl+Q+F Search|FindCtrl+Q+Y Deletes to the end of a lineCtrl+Q+[ Finds the matching delimiter (forward)Ctrl+Q+Ctrl+[ Finds the matching delimiter (forward)Ctrl+Q+] Finds the matching delimiter (backward)Ctrl+Q+Ctrl+] Finds the matching delimiter (backward)Ctrl+O+A Open file at cursorCtrl+O+G Search|Go to line numberCtrl+O+O Inserts compiler options and directivesCtrl+O+U Toggles casesystemShortcut Action or commandF1 Displays context-sensitive HelpF4 Run|Go to CursorF5 Run|Toggle BreakpointCtrl+F6 Open Source/Header fileF7 Run|Trace IntoF8 Run|Step OverF9 Run|RunF11 View|Object InspectorF12 View|Toggle Form/UnitAlt+0 View|Window ListAlt+F2 View|Debug Windows|CPUAlt+F7 Displays previous error in Message viewAlt+F8 Displays next error in Message viewAlt+F10 Displays a context menuAlt+F11 File|Include Unit HdrAlt+F12 Displays the Code editorCtrl+F1 Help|Topic SearchCtrl+F2 Run|Program ResetCtrl+F3 View|Deb
2023-06-06 16:44:461

HBuilder适合做什么?

HBuilder适合Web开发。从Frontpage、Dreamweaver、UE,到SublimeText和JetBrains的WebStorm,Web编程的IDE已经更换了几批。HBuilder是DCloud(数字天堂)推出一款支持HTML5的Web开发IDE。“快,是HBuilder的最大优势,通过完整的语法提示和代码输入法、代码块及很多配套,HBuilder能大幅提升HTML、js、css的开发效率。”问到HBuilder的优势时,DCloudCEO王安表示。
2023-06-06 16:44:531

编程语言的C++ Builder

c++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C++ Builder内置了100多个完全封装了Windows公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件;C++ Builder具有一个专业C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等。它实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。 ⑴继承了C语言的全部优点。⑵完全的可视化。⑶极强的兼容性,支持OWL、VCL和MFC三大类库。⑷编译速度非常快。 ⑴Pascal语言结构严谨,可以很好地培养一个人的编程思想。⑵Delphi是一个真正的面向对象的开发工具,并且是完全的可视化。⑶Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。⑷Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。 Delphi比较适合那些具有一定编程基础并且学过Pascal语言的朋友。
2023-06-06 16:44:591

怎么使用c++builder操作网页

C++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境: 只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C++ Builder内置了
2023-06-06 16:45:131

谁能给个C++Builder的下载网址,谢谢了

1. Borland C++ Builder V6.0 with Update4 大企业集成安装版 [点击这里下载] www.oamo.com/Software/Catalog130/1406.html 2. Borland C++ Builder Compiler V5.5 Borland C++ Builder Compiler 是一个 BC 编译器。它是 www.skycn.com/soft/13127.html 3. Flash ScreenSaver Builder 4.8 Build 060224 功能强大的屏幕保护制作程序!内置强大易用的精灵向导,支持直接导入MP download.pchome.net/system/desktop/ssmaker/6128.html 4. MG Screen Saver Builder 3.9 三个步骤即可完成属于你自己的屏幕保护程序 download.pchome.net/system/desktop/ssmaker/1667.html 5. Calendar Builder 3.4 非常棒的日历制作软件,支持中文字形,可加入文字及喜欢的图片 download.pchome.net/home/calendar/9215.html 6. Internet ScreenSaver Builder 5.15 Build 050412 强大的屏幕保护制作程序!内置强大易用的ISSB制作向导 download.pchome.net/system/desktop/ssmaker/9164.html 7. CourseBuilder for Dreamweaver 3.0 CourseBuilder是加强Dreamweaver的一套工具,让使用者可轻易的建立互动题库式的网页。 www.onlinedown.net/soft/11087.htm 8. Screen Saver Builder 汉化版 3.11 Screen Saver Builder 汉化版 download.pchome.net/system/desktop/ssmaker/4334.html 9. 2Flyer Screensaver Builder 7.4.1 www.onlinedown.net/soft/19506.htm 10. SetupBuilder Professional 中文版 1.50sc(SP6) Build 2002 方便快速制作专业的 Windows 安装程序的工具软件 download.pchome.net/development/install/567.html 11. LMD Tools for C++ Builder 5 V5.01 一套霸王级的控件包,附带控件数超过 150 个 download.pchome.net/development/cbuilder/864.html 12. 搜索引擎工厂(Search Engine Builder) V2.46 标准版 为你的网站自动生成一个站内搜索引擎。很多人访问您的 www.skycn.com/soft/8126.html 13. AHM Triton Tools For Borland C++ Builder 5.0 V2000 AHM 2000 提供的控件超过 150 个 download.pchome.net/development/cbuilder/866.html 14. SetupBuilder Professional V1.50sc(sp6) 简体中文版 SetupBuilder Professional 是一套用于方便快速制作专 www.skycn.com/soft/3932.html 15. All AHM Triton Tools 2002 Borland C++Builder V6.0 早在 Delphi3 流行时,AHM 控件集就已经声名远扬,现在 www.skycn.com/soft/11763.html 16. C++Builder 5 试用版 不论是初学Windows程序设计的学生。或开发关键性任务、客户机/服务器结构应用系统 download.21cn.com/list.php?id=11953 17. 2Flyer Screensaver Builder Pro 7.4.1 www.onlinedown.net/soft/9290.htm 18. 搜索引擎工厂(Search Engine Builder) V2.23 专业版 为你的网站自动生成一个站内搜索引擎。很多人访问您的 www.skycn.com/soft/9300.html 19. Calendar Builder V3.42 非常棒的日历制作软件,支持六种语言,可以在日历的任 www.skycn.com/soft/4907.html 20. Flash ScreenSaver Builder V4.8 Build 060224 Flash ScreenSaver Builder 是一个功能强大的屏幕保护 www.skycn.com/soft/2322.html 21. Search Engine Builder 搜索引擎工厂 专业版 2.16 搜索引擎工厂(Search Engine Builder) 专业版 download.pchome.net/internet/isearch/14504.html 22. Dream Collection for C++ Builder 5 V4.01 Dream Collection 是 Dream Company 公司生产的控件包 download.pchome.net/development/cbuilder/862.html 23. Search Engine Builder 搜索引擎工厂 标准版 2.45 Build 50913 为你的网站自动生成一个站内搜索引擎 download.pchome.net/internet/isearch/14501.html 24. 2Flyer Screensaver Builder Pro V7.4.1 一个非常好的屏保制作工具!自带十几种特效!你所需要做 www.skycn.com/soft/12514.html 25. AppBuilder For ODBC API 简体中文版(含示例) V3.07 国内首创完全基于VC的大型综合开发平台,智能编程机器人 download.pchome.net/development/c/707.html 26. Screen Saver Builder V3.11 汉化版 是制作屏幕保护程序的工具。这个工具可以很容易地制作 www.skycn.com/soft/2333.html 27. LMD Tools for C++ Builder 4 5.01 一套霸王级的控件包,附带控件数超过 150 个 download.pchome.net/development/cbuilder/863.html 28. DSW Screen Saver Builder 5.2 可以指定文件夹选择播放图片,并且可以播放一个声音文件 download.pchome.net/system/desktop/ssmaker/11907.html 29. Super screensaver builder 6.2.006 一个非常不错的屏幕保护程序制作工具 download.pchome.net/system/desktop/ssmaker/17236.html 30. ASP Web Database Interface Builder 6.05 制作拥有资料确认的专业级和安全的ASP网页,此允许你增加、搜寻、分类、编辑和删除你 www.onlinedown.net/soft/21006.htm 31. Document Builder 2004.05 Rational Rose 是一个被业界普遍认可并被广泛使用的设 www.skycn.com/soft/17122.html 32. 搜索引擎工厂(Search Engine Builder) 2.46 为你的网站自动生成一个站内搜索引擎。很多人访问您的网站只是为了得到其中一部分信息 www.onlinedown.net/soft/3690.htm 33. InfoPower for C++ Builder 5 V2000.17 InfoPower 它是为专业数据库开发人员设计的 C++ Build www.skycn.com/soft/4746.html 34. ASP Web Database Interface Builder V6.05 制作拥有资料确认的专业级和安全的ASP网页,此允许你增 www.skycn.com/soft/14214.html 35. Search engine Builder 汉化版 1.65 Search engine Builder 1.65汉化版 download.pchome.net/design/homepage/13074.html 36. Borland C++ Builder Compiler V5.5 Borland C++ Builder Compiler 是一个 BC 编译器。它是用来优化 BC 开发系统的工? download.21cn.com/list.php?id=32937 37. Calendar Builder 3.42 www.onlinedown.net/soft/3467.htm 38. DocBuilder 智能文档编著系统 2.1 自动的文档以及帮助系统产生程序,通过简单的拖拉操作就可以显示出清 download.pchome.net/development/helpbuilder/6733.html 39. Flash ScreenSaver Builder 汉化补丁 4.5 Flash ScreenSaver Builder 4.5 汉化补丁 download.pchome.net/system/desktop/ssmaker/16000.html 40. AppBuilder for MFC ODBC v3.07 国内首创大型综合开发平台 download.pchome.net/development/database/7540.html 41. AppBuilder for ODBC API V3.07 国内首创大型综合开发平台 download.pchome.net/development/database/7539.html 42. Power Screen saver Builder V3.0 一个专业级的屏保制作程序。具有Flash 动画插入功能, www.skycn.com/soft/8350.html 43. Traffic Builder 1.5.50 又一款搜索网站登入的利器。 Traffic Builder给你带来900个站点! download.pchome.net/internet/addweb/1078.html 44. AppBuilder for ODBC API V3.4.06.27 大众版 最新推出的专门为个人或者小型企业用户度身定做的综合开发平台 download.pchome.net/industry/business/7624.html 45. AppBuilder for MFC ODBC V3.4.06.27 大众版 最新推出的专门为个人或者小型企业用户度身定做的综合开发平台 download.pchome.net/industry/business/7623.html 46. Internet ScreenSaver Builder 汉化补丁 4.58 Internet ScreenSaver Builder V4.58 汉化补丁 download.pchome.net/system/desktop/ssmaker/17080.html 47. 搜索引擎工厂(Search Engine Builder) Pro 2.24 www.onlinedown.net/soft/3688.htm 48. Jmouse MPC Builder 预览版 Jmouse MPC Builder 是一款 MuskPack 音频格式编码和解 www.skycn.com/soft/18242.html 49. Screen Saver Builder V3.32 是制作屏幕保护程序的工具。这个工具可以很容易地制作 www.skycn.com/soft/2332.html 50. 搜索引擎工厂(Search Engine Builder) 1.70 汉化版 为你的网站自动生成一个站内搜索引擎。很多人访问您的网站只是为了得到其中一部分信息 www.onlinedown.net/soft/3689.htm 51. AL Screensaver&Slideshow Builder V1.9 Beta 3 一个内置高达120种特效的屏幕保护制作软件,可导入BMP www.skycn.com/soft/2337.html 52. 2Flyer Screensaver Builder Standard V7.4.1 一个非常好的屏保制作工具!自带十几种特效!你所需要做 www.skycn.com/soft/20777.html 53. AppBuilder For ODBC API V3.4 大众版(2001.08.01) AppBuilder 大众版本是川大软件最新推出的专门为个人或 www.skycn.com/soft/2108.html 54. CuteSITE Builder V4.0.0.108 CuteSITE Builder 是一个WYSIWYG的网页制作工具,可以 www.skycn.com/soft/7026.html 55. Flash ScreenSaver Builder 4.8 Build 051018 FlashScreenSaverBuilder是一个功能强大的屏幕保护制作程序!内置强大易用的精灵向导, www.onlinedown.net/soft/7421.htm 56. Perl Builder V2.0c Perl Builder 是一个综合,完善的Perl语言编译器。他独 www.skycn.com/soft/2144.html 57. Super ScreenSaver builder V6.2.006 Super screensaver builder 是一个非常不错的屏幕保护 www.skycn.com/soft/12672.html 58. Advanced Playlist Builder 1.00 AdvancedPlaylistBuilder是一个免费的MP3播放清单制作软件,图时还可以用来管理音乐文 www.onlinedown.net/soft/9607.htm 59. Screen Mate Builder V1.1 整天对着枯燥的计算机桌面是不是觉得很无聊。那就赶快 www.skycn.com/soft/13555.html 60. Resource Builder 2.4.1 www.onlinedown.net/soft/12422.htm http://www.soft8.net/soft8.php?page=3&word=c%2b%2b+builder&site=all&by=name&num=679
2023-06-06 16:45:211

把握C++ builder的除错艺术

这篇文章,我将从最基本的开始谈起。但期望可以涉及更广的层面,而不只仅是为你的程序除错(debug)。你将会看到,我认为除错(debugging)这个字的全部意义,并不只是通过ide的内建机制来运行的。我期望在这篇小小的文章结束时,几乎每个读者都可以学到至少是一件新东西,并把它藏到你的兵器库中。记住,你程序中的错误(bug)越少,你的最终用户对你的程序的感觉就越好;你对错误(bug)的处理越好,用户们发现错误(bug)时就越乐于告诉你以便你改正错误。好了,现在系好安全带,戴上护目镜,让我们开始一段疯狂的路程!书写洁净的代码首先而且或许是最重要的一点是书写洁净、可读的代码是极其重要的。能够在写完一段代码后回顾一下并给它加上注释来说明这段代码用来做什么和为什么这么做,将会省去你当前跟踪代码的无数个痛苦的小时。或许你会多花一点时间来书写,但当你花过n小时来跟踪那些难以捉摸的bug时,你就会同意多花点时间来让程序代码可读是多么值得了。(你本可以很轻易完成除错的)。假如没有这么做过,我建议你停下来,读读另一篇scott的出色文章-代码的风格(大家需要的话,将会尽快翻译)。使用异常及异常处理能力现在进入下一步,这仍然是基于代码的步骤。(除了在极少数的情况下,你不能老是使用系统内建的除错器,所以知道其他可以找出这些麻烦的虫子的办法总是个好主意)。本步骤完全是关于如何做到,更重要的是处理好在你的窗体出现异常时系统扔给你的(产生的)错误。在c++标准得到认可前黑暗的旧日子里,应用程序通常会通过返回值来发出错误信号(这种方法在ole和一些winapi函数中仍在使用)。很明显,你可以很轻易的忽略这些(事实上也是经常的,我的意思是你经常反省一个winapi函数的返回值吗?)。所以他们决定.,okay,我们需要一个新的机制,一个你不能忽略的。但你可以处理,定制(自定义 customize)。异常就此出现了。想要一个非凡的错误类型标志?轻易的很,定义一个新的异常类型(不过是一个类,没别的),抛出来(产生这个异常)。完了。例子:class myexception{public:ansistring imessage;myexception(ansistring message) { imessage=message;}};throw new myexception(“test exception message”);就这么简单!(当然不是很完全,我会很快加上的)。漂亮而又简单,并且非常轻易定制来满足您的需要。okey,你会问到:“我能产生异常了,但如何处理它们?我的意思是,我想在第一时间(位置)从我的代码中排除异常!”这当然很轻易做到,实际上还很轻易定制呢!标准委员会为我们定义了try {/* code */} catch (...) {/* code */ }机制,跟异常机制一样,它完全可以定制来满足您的需要!只需把您的执行代码段放在try模块中就行了,您还需要一个catch( ) 或 __finally 模块来告诉程序(假如)得到一个异常的时候作什么。现在就是你这么做的好处,你定义了一个类class类型并且输入变量来捕捉异常-通过声明catch( )。(在前面的例子中,该当是这样-catch(myexception e) { /*在这里书写捕捉到异常后的处理代码*/})为了让这个系统更有力,你可以建立完整的子类继续树。这样当你捕捉基类时你可以捕捉所有从这个基类继续的异常类型(vcl中一个很好的例子就是所有的异常都是从exception类继续而来的,所以catch(exception e) 将捕捉所有的vcl异常,当然包也括您所产生的。但esocketerror除外,见xiphias在 的howto (若你不喜欢e文的话,我会尽快翻译)。记住这个想法,我会在当前另一个步骤具体说明)。要让它再有力一些的话,标准委员会决定包括如下的声明catch() ,没错括号中就是三个点。此声明答应我们捕捉任何异常,我的意思是所有的异常。还想再有力一些?当然可以,你可以用附加的catch( )声明,跟if..else if的样子差不多。这里要牢牢记住!假如你捕捉到了一个异常类型,那么当前就它不会被再次捕捉到了!所以先看下面的代码try{// 程序的正常运行代码}catch(edbengineerror e){// 处理基于数据库引擎的错误}catch(eexternalerror e){//通常处理基于windows的错误}catch(exception e){// 处理所有其他的vcl错误}你可以看到,这里按照 "是edbengineerror吗? 是-处理,不是?-继续捕捉" "是eexternalerror吗? 是- 处理, 不是?- 继续下一次捕捉" 等等 这样的顺序排列。接着还有更多的内容。假如你期望对某个异常做些什么,又不期望异常就此消失,你可以重新抛出(产生)这个异常。它将继续向后寻找新的catch()过程来处理它。我不能说我经常这么做。但最好该当知道,就象“抛出”一样简单。就是这样,throw将带着已经被你处理过的异常继向后寻找另一个catch来处理它。最后而不是最不重要的 (这部分不包括在标准规范中,倒更象是borland专有的增加版)就是 __finally 声明,使用一个 __finally{ } 模块,你可以指定不管有否异常产生都将运行的代码。这里是清除你通过new方法分配的局部变量及将所有该当设定回正常状态的标志复位(例如将一个等待状态的鼠标指针复位成正常状态)的最方便的地方。呸,太多了!休息一下吧,有空可以看一看c++builder帮助中的exception类, (所有e开头的,你会注重到它们都是从exception类继续来的。这也是定制你自己的异常类的好练习!) 当你回来时,我们将进入下一步旅程。使用记录(logging)机制您不可能总是使用除错器来除虫,有时你没法依靠内建除错器的力量,所以有时你将不得不求助于其他的除错手腕来调试程序。(典型例子如:nt服务、isapi/cgi程序、实时应用程序等等)此时您将不得不求助于我们这样经验丰富的程序员才会谈到的老式的除错/调试技术。例如产生使用某种记录(logging)机制来看看程序的头巾下面究竟发生了什么的念头。幸运的是,有许许多多的现成的机制可以让我们的这项工作变得轻易些。这里我将谈到我所偏爱的三种方法,你也可以将您自己的方法email给我,我会考虑加入这一部分。okay 先说第一种,(调试/除错输出字串)outputdebugstring。幸运的是microsoft已经为我们实现了一个非常广泛的调试/除错子系统。包括实现您自己的调试/除错记录系统的机制。程序在一个调试/除错进程内运行的时候,outputdebugstring将它的参数(一个c string)输出到调试/除错器的输出上下文,若调试/除错器没有运行,outputdebugstring就被忽略。假如没有弹出消息的时候,outputdebugstring在终端上也可以很好的运行,当你分发给客户前别忘了移去它(通过 #ifdef debug#endif"),程序可以运行的更快一点。“wow,又好又轻易!”你或许会说“但当程序不能在调试/除错器内运行时,该怎么办?”请牢记,这只是我的观点,基于一种观念的评价,我个人使用gexperts的dbugint.pas界面来调试/除错。这是个非常优秀的独立的小程序。假如愿意,您可以将它分发给你的客户们。假如没有这么做,象outputdebugstring一样,假如没有安装,它实际上就什么也不做:)(它将注重终端是否已经安装在机器上)。要使用dbugint.pas的话很轻易,将它加入你的工程并加上 #include "dbugintf.hpp"(因为是pascal文件,你必须将它加入你的工程以便c++builder编译器生成hpp头文件。)然后你只需使用senddebug(“要送到记录中的字串”);或者你或许想更灵活些,还有senddebugex-增加一个消息类型参数来调用tmsgdlgtype(具体说明参考vcl在线帮助),sendmethodenter, sendmethodexit, and sendseparator 等等(十分自解释的名字)。只是别忘记加入必须的package包,若你打算将此终端(gdebug.exe)其给你的一些最终用户的话。gexpert可以从 获得并且是收费的。第三种我要指出的是,这或许是最难的选择-实现你自己的记录控制台。可没有你想的那么简单!你或许首先会想到“扔个richedit控件在form上,将它设为只读的,然后开始记录,对吗?” 错!理论上挺好,但实践呢,使用richedit控件来记录将降低程序的运行速度、使内存破碎,丢失、通常会在10分钟内使整个机器慢下来!!(要说明白为什么得花上点时间才行,但我向你可以保证)。所以你所需要的是计划好你的记录机制的需要,并开始计划一个定制控件若你想要个彩色的图标的话。还有一个选择,需要做点工作,但可是非常有效。就是使用一个listbox控制来记录,并将style属性设为lbownerdrawfixed,这样句柄将会自绘。(这也是gexperts和它的gdebug console所做的)。要做许多工作,但哈哈,假如你想做结合使用记录机制与类的异常处理机制现在进入下一步:)(跟你打赌你从未意识到设置一个优秀的调试/除错系统需要做如此多的工作!)你不用总是预料各种偶然的异常会发生什么,而且绝大多数时候当程序经过大量的除虫测试(尽量攻击程序,试图让它崩溃)后,你根本不用担心这些。下面这个技术,我建议任何组件开发者第一次在ide中测试一个新组件/新代码时该当完全遵照。因为在ide中一个异常会带来很多问题,有时甚至重启ide也无济于事(我自己已经这么做了)。其实也很简单。在您代码的每个函数前,或者至少在所有主要的函数前后加上:try{前端代码}catch(exception e){senddebugmessage(“exception caught in classname::functionname of type:” +e.classname()+” with the message:”+e.message);};(并用函数的类名及函数名代替字串中的classname和functionname)。这样你很快很快就知道异常发生在何处,也不用你强行关闭ide啦。okay,是时候回顾一下了。classname()方法是如何帮助我们的?不想每次都只得到一个“exception“串就完了吧?难道是因为将e声明为一个异常?不对。这是vcl比较酷的部分,任何从tobject继续来的类能够主动知道其自身的类型、其基类的类型、等等许多有趣的信息,你可以察看tobject的帮助。所以尽管我们使用的是exception e,e.classname()将会找出我们得到的异常的实际的类名(译者注:c++的多态性)。这些好处的代价就是可执行文件的体积更大了,几乎所有的c++builder/delphi程序员都会发现这一点。(no pain, no gain)没有痛苦,就没有收获.他们说.xiphias增加了tstringlist的addingline方法,savetofile方法是另一种记录(logging)的有效形式。最后该当保证你的应用程序总是写记录文件(logfile),或这每次捕捉到异常时重写记录文件。处理您代码外产生的异常现在的步骤是我们开始学习基于ide的除错器之前的最后一个基于代码的步骤。但或许在有严峻错误发生时,对装饰应用程序来说这是最重要的步骤。举例来说,这是显示一个包括错误具体内容的对话框理想的时机。这时弹出在屏幕上的对话框可以方便最终用户能够向您报告错误。我敢保证您痛恨“oh,有个什么框子上说在什么地址发生了个什么异常错误”这样的报告。其实完全可以很轻易的实现更好的情况,也不会限制你打算如何处理它。第一步是在你的主窗体(例如:工程的主动创建窗体列表中的第一个form)中创建一个象如下这样的函数:void __fastcall applevelexceptionhandler(tobject *sender, exception *e){}然后加入合适的代码来显示错误(e-message),错误类型(记住e.classname(),只要此时才是它的e.classname()),和联系您的具体方法及其他你想加上的任何东西。第二步当然是将它与系统挂钩,这在c++builder里很轻易实现:application-onexception=applevelexceptionhandler;将上一行代码加到form的 oncreate 事件中。不要吝啬!你加了这一行后几乎可以保证不会错过任何异常,而且无论哪里异常处理失败时它都会出现在你的眼前!你的回合现在你已经得到所有你刚才学习的有用的信息了。是时候开始把它们加到你现在的工程里去了,否则就忘掉吧,要不然,就把它变成编程习惯的一部分。这是你的自在!在这个系列的下个部分,我将讨论内建除错器的使用,来看看你的程序运行时都干些什么,如何单步跟踪代码、设置断点、察看变量、和会把新手们吓的人事不醒的所有其他有趣的工具。直到这里,您的bugs或许只是小虫子了吧。Okay,(再小小预备一下)现在开始追踪、搜索经过前次的努力后仍然躲在代码中的bug的时候了,也就是开始跟踪前一篇文章代码里标记过的bug/异常。首先是预备阶段。调试可执行程序前的预备在我们开始调试可执行程序前,我们需要确保一些设置在大多数情况下的正确性。我将会一条接一条的过一遍,并简单解释一下为什么必须那样做。(假如您对有些东西感爱好的话,按下帮助按钮,会有许多更详尽的内容)。现在就开始吧,先打开Project|Options选项。工程选项首先我们在"Compiler"(编译)标签处停下。您只需简单的单击"Full debug"(完全调试模式)按钮,我们所需的绝大多数的其余设置就已经搞定了。将"Code optimization"(代码优化)设为"None"(无)总是件好事,这样做实际上告诉编译器:所有的事情都已做好,只需产生气器码就行了。而不要为了提高一点点运行速度尝试进行其他的智能优化。(当然,一切都完成之后,您可以打开此项。)这样做的好处是大大降低了我们调试的难度。因为程序中的代码与我们书写的一样,没有被编译器优化过。在"debugging"(调试)面板中,将"Debug information"(调试信息)选上(点一下),并且必须设置为"Line number information"(行数信息)。我还建议将"Disable inline expansions"(禁用内联扩展)一项选上。内联扩展对发布的代码来说很好,但调试时最好还是关掉此项,他只会让您更头痛。然后是"Pascal"标签,尤其在您的工程里连接了Pascal单元或使用了基于Pascal的VCL控件时(若您拥有其Pascal源码时,编译器会主动使用此节中的设置重新编译)。这里您必须将"Optimization"优化选项禁用,然后通常我会将"debugging"(调试)部分的所有选项选上(打钩)。接下来是"Linker"(链接)标签,我们需要选上"Create debug information"(生成调试信息)。"Use dynamic RTL"(使用动态RTL)以及"Don"t generate state files"(不要生成状态文件)是造成麻烦的选项。我通常都会使用状态文件(这样答应增量链接,但会在编译目录下产生一个4倍于可执行程序或更大的文件),换个角度来说,这样会增加链接大工程时的速度。而使用dynamic RTL本身就是个争论,尚有很多赞同和反对的讨论。下一个是"Directories/Conditionals"(路径/条件)标签。在这里我们想要设定"Directories/Conditionals"(调试源路径)的值。我们永远都应将此处设定为$(BCB)sourcevcl,但是假如您有任何其他的组件附加的话,通常将它们的路径也加上是个好主意(路径与路径之间用”;”分隔或者您可以用按下按钮弹出的对话框来设定它们)。最后也是最重要的设置是在"Packages"(程序包)标签上。根据所有恰如其分的调试经验您必须禁用"Build with runtime packages"(带运行时程序包编译)。这么做的原因是程序包本身不包括而且不能包括调试信息。这样做,或许不利于您跟踪标准的VCL代码,例如想看清楚VCL函数y中参数x是如何起作用的时候。但是大多数时候,您这么做将会发现调试器将您的绝大多数“症状”归结给VCL,尽管“病因”就在您的源代码中(或在其他的组件中(这已经在我们所有人身上发生了))。一旦您发布您的正式版本时,您可以决定是否使用程序包。(译者注:程序包的本质是一个非凡的DLL,不带运行程序包(静态)编译可以让您的程序脱离Cbuilder独立运行。),但在调试时,请禁用掉。按下OK按钮,我们已经预备好啦。下一个对话框只需打开一次,但最好还是来反省以下我们在这里的设定是否正确。好了,打开”Tools|Debugger Options”吧。对话框最下方的"Integrated debugging"(集成调试器)选项是要害所在。确信已经打上钩。按下OK按钮预备编译可执行程序吧。我建议重新来一次彻底的编译(选择Project|Build All),假如您修改过您的设置的话(尤其是改变”building with packages”方式后)。这将保证我们的所有程序单元按照我们所期望的那样被编译。设置断点并闯入可执行程序象您所见过的其他任何一款调试器一样,C++Builder提供强大的断点设置功能。基本上,断点是指代码中的一个点,程序执行至此停下(与退出不同,这只是执行中的暂停)并将控制权交还给调试器。设置一个断点相当轻易。只需在您想要设置的程序代码行左侧的灰色槽形区域点击,您会看到一个红点出现,这一行也会变红。程序运行到这一点就会暂停,将控制权交还给调试器。您或许会问假如我不想每次都停下来呢?当然可以,而且还很轻易做到,这取决于您暂停程序的标准是什么?(译者注:条件断点)。在刚才那个断点(红点)上右击鼠标并从弹出菜单上选择” Breakpoint Properties”(断点属性)。此处可以设定两种属性"Condition"(条件)和"Pass Count"(通过次数)。Condition(条件)属性太方便了。您可以利用if()语句输入几乎是任意的条件。但请牢记条件中的所有变量,对此断点都应是可见的。条件属性并未被编译器编译到执行程序中,而是在运行时,当程序运行至断点暂停后,反省断点的条件是否满足。条件为真,停下,否则让程序继续运行。另一个属性"Pass Count"(通过次数)也很轻易理解。断点将被通过Pass Count次后停下。结合使用这两个属性,在调试您的代码时,您可以设定非常严格的断点。还有一件要牢记的是,当您在调试器中发生异常时,会以产生异常处的那一行代码上的断点的形式出现。这种情况很轻易制造。一旦您得到一个异常后应做的步骤我会在当前展示如何在堆栈中回溯并跟踪找出异常发生的真正原因(如引起异常产生的那一小片代码)。另一个要牢记的提示是当您运行您的程序时,代码窗口左侧有蓝点的任意一行都可以设成断点。所有非法的断点将会变为红点中带一个黄色的小叉,这一行代码也会变成黄褐色。合法的断点则变为红点中带一个绿色的小钩。运行时,您可以设置/修改任意一点,断点立即生效而无须重新编译。察看储存在变量中的值一旦您的程序在您的断点处停下后,该做什么?有一件事您想做而且必须做的,那就是察看储存在您程序中的各种变量真实的值。这部分内容涉及的方面很多,您一定要坚持,忍受这些枯燥的东西。幸运的是当您看完这些,您一定会对调试器这部分最强大的功能有些新的理解。有许多种方法可以察看变量的值,主要要根据您的目的来决定。我会从察看当前函数的Local Variables(局部变量)开始把他们都讲完。察看局部变量没有太多可以讲的。只需点击”View|Debug Windows|Local Variables”,或按下ctrl-alt-L将会弹出一个窗口,显示了当前函数的局部变量。窗口中的变量将会随您单步向下执行或回溯的函数体的更新而更新。使用Watches(观察)下一步您可以通过设定一个variable watch(变量观察)来察看程序中的变量。就象它的名称所表达的,观察一个变量并将其值显示在变量观察窗口中(点击"View|Debug Windows|Watches"或按下 ctrl-alt-W)。您可以通过两个途径来添加一个观察,第一种是在代码窗口中高亮选择您要观察的变量或表达式(是的!它可以理解并对绝大多数简单表达式求值,比如(i*j)+05 或者 SomeVector[i].Name)并右击鼠标,选择"Debug|Add Watch at Cursor"或按下ctrl-f5,就会加入观察窗口。假如必要,同时会打开观察窗口您还可以通过在观察窗口的空白处双击来添加。这时会弹出添加watch对话框,"Expression"(表达式)域的意思无须多说,但另几个域我想解释一下,它们也同样方便。"Repeat count"(重复值)用于您观察一个已知长度的数组变量(比如一个blah[50]数组)。您要将Expression(表达式)设为数组的名字(本例中是blah)。"Repeat count"设为数组的元素数量(本例中是50)。然后就会显示数组的每个元素(如:blah[0], blah, blah)。"Digits"(小数位数)用来设定显示十进制浮点数的小数位数的。下面的点选集合是用来强制设定变量的显示类型的(将无符号长整数显示为十六进制格式)。还有一点要非凡说明的是,假如您在watch窗口中用鼠标右击一个watch后的弹出菜单上会出现"Break When Changed"的选项,这将在变量上设定一个断点,在此变量发生变化时会暂停程序。使用Inspectors(巡视器)巡视变量是察看变量中的数据的第三种办法。也几乎是观察完整的类的数据的最佳方法。可以有两种方法来巡视一个变量。第一种是在local variable window(局部变量窗口)中,双击一个变量,将会弹出"Debug Inspector"(调试巡视器)窗口,里面显示了这个变量所有的"Data" (variables) (数据(变量))、"Methods" (functions)(方法(函数))和"Properties"(属性)。假如这是个简单数据,将会显示此变量的名称及其中的值。(译者注:假如是数组呢?真不错!)您会注重到,Debug Inspector(调试巡视器)很象property editor(属性编辑器)。当然如此,更加重要的是,事实上您可以在运行时实时改变这些值!!!小心使用啦!改入坏值的后果会让您有说不出来的悲痛。巡视器的这个能力可用来快速测试(假设的)游戏关卡(译者注:似乎FPE,GM),而不用有编译-运行-
2023-06-06 16:45:281

请问builder建筑工人怎么读?

哔悠嘚儿—望采纳。
2023-06-06 16:45:472

c++builder

这段的代码 Form2->new TForm2(Application); //应改成: Form2 = new TForm2(Application); //new 是一个操作命令。 Form2->Position.PoScreenCenter; //应改成:Form2->Position = poScreenCenter; //“Position”是Form2的属性,poScreenCenter是其取值,书写错误。 Application->ShowException(&exception); E2451 Undefind symbol "expecction" //“exception”被你输入成“expecction”,拼写错误。
2023-06-06 16:45:541

power builder是什么软件?作用是?

PowerBuilder是一个图形化的应用程序开发环境。使用PowerBuilder可以很容易地开发和数据库打交道的商业化应用软件。PowerBuilder开发的应用软件由窗口构成,窗口中不仅可以包含按钮、下拉列表框及单选按钮等标准的Windows控件,还可以有PowerBuilder提供的特殊的控件。这些特殊控件可以使应用软件更容易使用,使应用软件的开发效率更高。例如,数据窗口就是PowerBuilder提供的一个集成度很高的控件,使用该控件可以很方便地从数据库中提取数据。 商业化的软件开发要求有很好的移植性。PowerBuilder既可以跨平台开发,也可以发行跨平台软件。例如,在Windows 95下开发的程序,可以不修改源程序而形成UNIX下的执行文件或Macintosh下的执行文件。在开发小组中,不同成员可以使用不同的开发环境,但由于PowerBuilder的支持,在不同的开发环境下看到的共享PowerBuilder对象是相同的,所以仍可以同时开发同一个应用程序。 随着Internet的普及,开发Internet应用的需求激增。PowerBuilder 8.0及时地强化了Web开发功能,并提供了一些配套的开发工具,使PowerBuilder程序员不用再学习其他的开发工具就能开发基于Web的应用。 1.2.1 画笔 PowerBuilder开发环境由一系列的画笔(Painter)组成。画笔就是完成一定功能的工具,比如窗口画笔定义窗口对象,用户对象画笔定义用户对象,数据窗口画笔定义数据窗口对象以及库画笔完成应用库的增加、删除和修改等。开发人员可以通过打开、新建相关对象进入到相关的画笔中,这点和PowerBuilder 6.5版本以前的有所不同。在画笔中通过简单的鼠标操作就能设计、建立和测试相关的PowerBuilder对象。画笔中包含很多画笔工具,用来完成该画笔的功能。这些功能都是和具体的画笔相关的。 如图1-1所示是各个画笔构成的主操作环境中的工具条,相关术语称为PowerBar,它是由很多图形化的小图标构成的,每个小图标代表一种或者一类功能。将鼠标在该小图标上停留片刻后,鼠标旁边会显示图标的名称,窗口底部的信息提示栏(MicroHelp)中显示该图标功能的详细描述。 1.2.2 事件和脚本 PowerBuilder应用程序是事件驱动的。字符环境下的程序一经运行,用户就不能控制程序的执行流程了。其中也有一些有限的提问,但程序的执行流程是确定的。而PowerBuilder应用程序的执行流程是根据运行时事件的发生情况来决定的。用户可以单击按钮,选择菜单,也可以在数据窗口中输入数据,这时都会触发相应的事件。事件什么时候触发取决于事件的定义。PowerBuilder为很多控件(control)预先定义了大量事件,这些事件的触发时机已经定义好了。开发人员需要掌握这些事件的触发时机,才能决定自定义事件的触发时机,才能知道在哪些控件的哪些事件中编写脚本。 每个事件的发生都得满足一定的条件,除了掌握事件的触发时机外,还要清楚事件是在哪个(或哪些)控件上发生的。触发条件通常是用户的动作,当有什么动作时什么事件才发生。有些脚本也可以触发其他事件,例如,在一个按钮的Clicked事件中打开另外一个窗口时会触发另外一个窗口的Open事件。事件是属于特定控件的。例如,按钮可以单击,触发Clicked事件;而窗口上的线控件(line)的单击就没有什么意义,所以线就没有Clicked事件。 脚本(Script)是由PowerScript的命令、函数、语句及SQL语言等组成的命令集合,用来响应事件,做相应的处理工作。例如,可以在窗口的打开事件中编写脚本,在检索数据窗口中显示数据;在编辑框中可以编写脚本来校验用户的输入数据是否符合特定的要求,比如是否是数字等。脚本和事件的关系是,脚本的执行最终依赖于事件,没有不通过事件的触发就可以执行的脚本。 1.2.3 函数 PowerBuilder提供了大约600个内置函数,这些函数是构成脚本的基本元素。函数一般都是针对特定的对象操作的,例如,GetitemString是用来从数据窗口中读取string类型的字段的取值的,它不能用来操作其他的对象;函数FindItem是从列表框、下拉列表框、图形列表框及图形下拉列表框等对象中查找字符串的,不能用来从数据窗口中查找。PowerBuilder是面向对象的,因此具有多态性,很多函数都有多种格式。例如,经常用来显示信息的函数messagebox有4种格式,系统会自动识别使用哪种。 程序员可以自己定义函数,不仅逻辑结构清楚,方便重复调用,而且有利于程序的封装。可以定义多个同名但不同参数的函数。自定义函数和内置函数的使用一样,在函数的作用域中的任意脚本里都可以调用自定义函数。自定义函数还可以调用本身,以编写递归程序。 1.2.4 库文件 PowerBuilder对象,如菜单、窗口、数据窗口和用户对象等都保存在库文件中。库文件的后缀是PBL。使用普通的编辑器无法查看其中的内容,使用PowerBuilder的library画笔可以打开它。在开发环境中,PowerBuilder从库文件中检索所需要的对象。 一个应用中可以有多个库文件,这时应该设置应用的搜索路径。可以根据对象的使用频率或者功能的不同将对象放在不同的库中。例如,将报表的相关对象放在report.pbl库中,将查询相关的对象放在query.pbl中。这些不同库文件的组织策略应根据个人开发方便和系统的执行性能来确定。 1.2.5 创建执行文件 应用程序开发完毕后,可以使用PowerBuilder提供的工具创建执行文件,交付给用户安装盘。PowerBuilder提供打包应用程序的简单方法,方便快捷地创建商业化的安装盘。安装界面是用户接触应用程序的第一步,第一印象的好坏很重要,反映出开发人员对自己的客户重视程度。无论如何,提供给用户一个漂亮的安装界面,这肯定是没错的。
2023-06-06 16:46:011

worker和builder发音一样吗

worker和builder发音不一样worker 美 /u02c8wu025cu02d0rku0259r/ 英 /u02c8wu025cu02d0ku0259r/释义:工人,员工;劳动者builder英音: ["bildu0259] 美音: ["bildu0259]释义:1.建筑者,建筑商2.建设者,建立者3.促进剂
2023-06-06 16:46:083

go语言string之Buffer与Builder

操作字符串离不开字符串的拼接,但是Go中string是只读类型,大量字符串的拼接会造成性能问题。 拼接字符串,无外乎四种方式,采用“+”,“fmt.Sprintf()”,"bytes.Buffer","strings.Builder" 上面我们创建10万字符串拼接的测试,可以发现"bytes.Buffer","strings.Builder"的性能最好,约是“+”的1000倍级别。 这是由于string是不可修改的,所以在使用“+”进行拼接字符串,每次都会产生申请空间,拼接,复制等操作,数据量大的情况下非常消耗资源和性能。而采用Buffer等方式,都是预先计算拼接字符串数组的总长度(如果可以知道长度),申请空间,底层是slice数组,可以以append的形式向后进行追加。最后在转换为字符串。这申请了不断申请空间的操作,也减少了空间的使用和拷贝的次数,自然性能也高不少。 bytes.buffer是一个缓冲byte类型的缓冲器存放着都是byte 是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用,底层就是一个 []byte, 字节切片。 向Buffer中写数据,可以看出Buffer中有个Grow函数用于对切片进行扩容。 从Buffer中读取数据 strings.Builder的方法和bytes.Buffer的方法的命名几乎一致。 但实现并不一致,Builder的Write方法直接将字符拼接slice数组后。 其没有提供read方法,但提供了strings.Reader方式 Reader 结构: Buffer: Builder: 可以看出Buffer和Builder底层都是采用[]byte数组进行装载数据。 先来说说Buffer: 创建好Buffer是一个empty的,off 用于指向读写的尾部。 在写的时候,先判断当前写入字符串长度是否大于Buffer的容量,如果大于就调用grow进行扩容,扩容申请的长度为当前写入字符串的长度。如果当前写入字符串长度小于最小字节长度64,直接创建64长度的[]byte数组。如果申请的长度小于二分之一总容量减去当前字符总长度,说明存在很大一部分被使用但已读,可以将未读的数据滑动到数组头。如果容量不足,扩展2*c + n 。 其String()方法就是将字节数组强转为string Builder是如何实现的。 Builder采用append的方式向字节数组后添加字符串。 从上面可以看出,[]byte的内存大小也是以倍数进行申请的,初始大小为 0,第一次为大于当前申请的最大 2 的指数,不够进行翻倍. 可以看出如果旧容量小于1024进行翻倍,否则扩展四分之一。(2048 byte 后,申请策略的调整)。 其次String()方法与Buffer的string方法也有明显区别。Buffer的string是一种强转,我们知道在强转的时候是需要进行申请空间,并拷贝的。而Builder只是指针的转换。 这里我们解析一下 *(*string)(unsafe.Pointer(&b.buf)) 这个语句的意思。 先来了解下unsafe.Pointer 的用法。 也就是说,unsafe.Pointer 可以转换为任意类型,那么意味着,通过unsafe.Pointer媒介,程序绕过类型系统,进行地址转换而不是拷贝。 即*A => Pointer => *B 就像上面例子一样,将字节数组转为unsafe.Pointer类型,再转为string类型,s和b中内容一样,修改b,s也变了,说明b和s是同一个地址。但是对s重新赋值后,意味着s的地址指向了“WORLD”,它们所使用的内存空间不同了,所以s改变后,b并不会改变。 所以他们的区别就在于 bytes.Buffer 是重新申请了一块空间,存放生成的string变量, 而strings.Builder直接将底层的[]byte转换成了string类型返回了回来,去掉了申请空间的操作。
2023-06-06 16:46:151

windowsbuilder插件怎么用

您好,方法首先要下载“WindowsBuilder”:度娘WindowsBuilder,进入官方下载页面,点击“Download”,进入版本选择页面。关于版本号的说明:选择与Eclipse相对应的WindowsBuilder版本,例如我电脑上安装的Eclipse版本代号是“Mars”,则选择相应版本下载。其中“Release Version”是发行版,“Integration Version”是集成版,两版下的“Update Site”是在线安装连接,“Zipped Update Site”手动安装包,用于本地自己安装。我们一般选择优化了的“Release Version”。接下来介绍两种安装方法:1、在线安装点击对应版本的“Update Site”链接,复制链接后,打开Eclipse,选择“help”—>“Install New Software...”打开安装选项框,在“Work with”输入刚复制的链接,点击Enter键进行搜索,然后下面会出现需要安装的内容,选择后,点击“Next”进行安装。2、手动安装点击对应版本的“Zipped Update Site”,打开下载页面,直接下载解压包到本地磁盘。然后打开Eclipse,仍然选择“help”—>“Install New Software...”打开安装选项框,点击“add”,在弹出的窗口中“Name”输入WindowsBuilder或任意名称,也可以不填写,“Location”中选择刚下载的ZIP文件,点击OK即可。或者直接复制下载包所在的本地磁盘地址,粘贴到“Work with”,点击“Enter”自动加载所需安装内容。两种方法加载完所需的插件后,接下来的安装情况相同,方法1由于需要在线下载各个插件,会慢一些,具体过程如下图所示。安装完成后,会提示重新启动Eclipse,点击“Yes”进行重启,重启后即可进行窗体类应用程序开发。重启Eclipse后,选择“File”—>New—>Project...—>WindowBuilder—>SWT Designer—>SWT/JFace Project新建项目,例如我建得“FirstSS”,然后右击所建项目,选择“New”—>Other...—>WindowBuilder—>Swing Designer或SWT Designer,选择希望建立的窗体类。
2023-06-06 16:51:011

HBuilder为什么是最好的Web开发工具

sublime 插件强大丰富而且好用。hbuilder插件少点且也不够好用,Eclipse的插件也不够好用,例如格式化,或者一些自定义的编码习惯上,有一定的门槛。初学前端,推荐sublime,因为初学的时候,也不会太大的项目,用sublime基本能管理好,一个小项目。sublime轻巧。到了项目文件多的时候,你就会发现文本编辑器和IDE最大的区别。例如hbuilder的跳转(例如alt+点击 class/变量/路径),这些远远比sublime等文本编辑器好用。在错综复杂的项目里面跳转。而且hbuilder有emmet插件,超强的js,html语法提示已经略胜sublime了。所以不要去纠结用什么工具。工具只是提升你的效率。当sublime能够满足你的效率的时候,你就用sublime,当你发现sublime用起来,感觉不够高效率的时候,转向IDE吧,hbuilder是个非常不错的选择。关于这2个工具,其实是完全不同的2个类别。sublime是跨语言的增强型文本编辑器;HBuilder是专注于HTML、js、css的IDE。就是说HBuilder是有HTML、js、css的语法解析引擎的,它认识你写的代码,知道该提示什么、知道转到定义去哪里,你写的每个变量、每个函数都会动态计算类型和返回值,这个是很有难度的事情,全世界js的AST语法树处理最好的3个工具就是HBuilder、VS、webstorm。而sublime是文本编辑器,它并不认识你var的变量是一个div的element还是什么其他东西,它只是混沌的提示你写过的词。如果说纯前端开发,还是HBuilder好用。开发速度、出错概率都好于sublime。如果说开发其他语言,比如py、ruby、或者也算前端范畴但HBuilder还未提供对应语法引擎的比如coffescript、dart这些语言,由于HBuilder并没有内置对这些语言的AST语法引擎,所以开发起来不如其他专业工具方便。除了语法解析引擎,两个产品还有其他区别:1. 启动速度和内存占用是sublime占优。当然你机子不要太差问题也不大。启动虽然慢几秒,但之后一天开发下来节省的可不是几秒,怎么也得有半小时。2. sublime的黑色主题看起来比较酷,虽然HBuilder也有夜间模式,但主推的是绿柔主题,它的主张不是看起来酷,而是环保,盯着这样的屏幕一天下来,对眼睛、对脑疲劳程度都更好。在官网首页绿柔主题介绍里有详细说明,是经过专业医疗机构测试的。3. 如果是基于开发手机App,那肯定是用HBuilder了。开发便利性、语法提示、调试、打包部署都非常方便。4. 两个工具各有一些特色功能,比如sublime的代码地图、列分割线、热退出;而HBuilder也有边改边看、大纲等特色5. HBuilder还内置了最全的语法浏览器兼容库,每个语法在哪个浏览器的哪个版本可用,这个数据是全世界最全的。其实本质也是我们对HTML5的理解深度、专业程度是远胜于sublime其他工具的设计师的。其实工具的作用并不完全重叠,也不算是非此即彼的关系,起码都应该留在你的电脑里。我个人的开发主力工具是HBuilder,但偶发也会打开sublime的。有些人有种观点,叫不用工具手敲代码才叫牛。我觉得他其实就应该干脆直接用记事本,因为sublime也是有模糊提示的列表的,他们应该一点语法提示都不用!初期其实不需要ide,就几个HTML标签,真的就是用记事本写。但后来js起来了,那就开始记不住语法了。发展到现在,我们已经无需记忆语法了,因为HTML5总共有7w个api,没有背的必要。并且语法和工程复杂到一定程度,就需要专业IDE了。就像写java会用eclipse、写.net会用vs、写objectiveC用xcode,没听说这些复杂的高级语言还用sublime这类文本编辑器编程。目前的HTML5,已经复杂到了这个地步了,很多沿袭老的习惯或观点的人应该换下脑子了。另外注意HBuilder可不是入门工具,它的定位是极客工具。我们在这个方面的追求很偏执,设计了非常多提高编程效率的方式。在HBuilder里内置的hello HBuilder里的lesson1,如果熟练掌握HBuilder,几分钟就写完了,如果使用sublime,至少比HBuilder慢十倍!真正的高手或极客,怎么会不在乎这种效率的差距呢?如果他真的不在乎效率,你也不必尊敬他,抓紧时间超越他就好了。参考:Dcloud问答
2023-06-06 16:51:102

Win10 3D builder是什么应用

首先打开开始页面,找到3D Builder软件点开。进入图示界面,可以看到3D Builder 内置了一个3D模型库,里面涵盖了一些日常生活中常见的图形。可以看到软件首页分为三个区域,从左到右分别为加载模型,最近加载的模型,模型库。点击加载模型,我们可以导入自己的3D打印文件或者软件内置模型库的文件,这里我们以打开一个风车为例4左上角的向导控制盘里,隐藏了许多3D打印常用的控制命令,可以说该软件是微软此次发布win10的良心之作。用户可以在该软件内完成3D打印模型的编辑修改等多项命令。5此外改软件还提供了3D打印云服务,用户只需要上传模型及个人信息,即可享受到云平台的3D打印服务,方便而又快捷。
2023-06-06 16:51:301

C++builder 程序解释

你不能断章取义
2023-06-06 16:52:032