C++ Builder 初学问与答(二)

原创 2003年06月30日 14:32:00

2.文本输入组件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

11)问:如果要实现文本输入,在C++Builder中应该怎么办?

答:C++Builder常用文本输入组件来实现,常用的文本输入组件有EditMaskEdit MemoRichEdit。他们的主要不同在于EditMaskEdit用于输入单行文本,而MemoRichEdit可以输入多行文本。此外Label组件也可用来进行文本显示。

EditMaskEdit是一个窗口控件,它可以获得输入焦点。当用户需要输入单行文本时,就应该使用编辑框。它通常与标签组件一起使用。

.

 

12)问:编辑框(Edit)常用的属性有哪几个?

答:编辑框常用的几个属性如下:

Text属性是一个String类型的数据,它决定了在编辑框中出现的文本字符串。在编程中,我们经常要通过text属性获取编辑框中的文本字符串

MaxLength是一个Integer类型的数据,它指定编辑框所能容纳的最大字符数。缺省情况下为0,表示长度不限。

 编辑框还可以用做口令输入。具体方法是,把PasswordChar属性设置为除#0之外的任何字符。这时,无论你在编辑框中输入什么字符,都只显示PasswordChar包含的字符。我们经常把PasswordChar设置为星号*,当用户输入口令时只显示星号。如输入#0表示编辑框正常显示。PasswordChar是一个字符类型的数据。

如果要限制用户对编辑框写的权利。可以使用属性ReadOnly,当ReadOnly的值为True时只读。

 

13)问:标签控件(Label)起什么作用?

答:标签的常用属性有CaptionFocusControl

Caption属性是字符串类型,用来指定标签的标题,也就是标签的显示内容。

FocusControl属性是窗口控件类,用来指定一个与标签相连的窗口控件。从而允许这个控件使用快捷键来获得输入焦点。

标签是一个典型的非窗口控件,它不能获得输入焦点,所以经常被用来给一些没有Caption属性的组件做标签。标签还能同时给这些组件提供快捷键的功能,允许用户通过快捷键获得输入焦点。

 

14)问:那在Label中如何使用CaptionFocusControl呢?

答:下面举个例子说吧(这个例子在第19问中会用到):

首先在输入标题时需要指定一个快捷键,这可以用在一个字母前面加上一个连字符&来实现。单击caption属性输入栏,输入&N姓名,这里字母N就被指定为快捷键,要注意的是中文是不能被指定为快捷键的,只有26个英文字母才可以。

然后,把标签的FocusControl属性与编辑框Edit1相连,选择FocusControl属性,从属性值字段列举的窗体上所有的窗口控件中选取Edit1。这样当用户按下Alt+N时,输入焦点就会转移到编辑框Edit1

 

15)问:我遇到一些程序,当在编辑中输入完文本后,按一下回车键,程序就开始执行了,C++Builder应该怎样实现?

答:当然可以。当我们按下回车键时,产生了OnKeyPress事件。所以如果要在程序中处理这种事件,这就要编写OnKeyPress事件处理程序。

还有三种事件是编辑框常用的事件:OnChange事件、OnEnter事件和OnExit事。每当编辑框中的文本发生改变时都会触发OnChange事件。当编辑框获得输入焦点时会触发OnEnter事件,而失去焦点时会产生OnExit事件。

 

16)问:简单说一下Memo组件的重要属性?

答: MemoEdit的属性有很多相似的,下面只来说一下Memo组件的重要属性。

Lines属性是一个TStrings类的一个对象,它是由多个字符串组成的,每一个字符串就是Lines中的一个元素。Memo组件的每一行文本都是Lines中的一个字符串。

       在设计阶段,如果要给Memo组件增加一些显示内容,可以在对象编辑器中选择属性Lines,单击Value列上的省略号按钮,这时会打开一个字符串编辑窗口。

       在这个编辑器中输入文本。编辑器中显示的所有内容都会出现在Memo组件中。

Memo组件属性中:

Alignment

用来确定Memo组件中显示文本的对齐方式。

WordWrap

确定文本到达右边界时是否自动换行

WantReturn

确定用户是否可以在文本中插入回车符。

WantTabs

确定用户是否可以在文本中插入Tab字符。

属性ScrollBar是一个常见的属性,它确定着滚动组件滚动条的行为。ScrollBar有四种可能的取值:

SsNone

表示没有滚动条;

ssHorizonal

表示只有水平滚动条;

ssVertical

表示只有垂直条;

SsBoth

表示既有水平滚动条也有垂直滚动条。

当显示的内容比较多时,应该选择ssBoth,这样才能够使用户看到所有的内容。

 

 

17)问:要在程序运行期间修改Memo组件的显示内容,应该怎么办?

答:这就需要使用TStrings类的某些属性和方法。例如要给Memo组件增加一句话“我来了”,那么可以使用方法Add来完成。

Lines->Add(“我来了”);

要寻找Memo中的某一行,可以使用Lines->Strings[n]的形式,不过要注意Lines的字符串是从0开始的,所以在与Memo中的实际行号对应时,行号需要减一。

 

18)问:如果我要实现文本的剪切、复制和粘贴,应该怎么办?

答:Memo组件提供了三个用来完成剪切、复制和粘贴的方法。CutToClipboard用来把Memo组件中被选中的文本剪切到剪切板。

CopyToClipboard用来把Memo组件中被选中的文本复制到剪切板。

PasteFromClipboard用来把剪切板的内容粘贴到Memo组件中光标所在的位置。

 

19)问:前面讲了几个控件,能把他们综合起来编制一个程序吗?

答:好的,就利用刚才已经放好的组件来编写一个用户姓名录入和显示的程序。

这个程序将实现当在编辑框中输入文本并按下Enter键后,文本就被增加到Memo组件中。因此需要给编辑框组件增加事件处理过程。

当用户按下Enter键时产生了OnKeyPress事件,所以应该编写这个事件的处理过程。

选中组件Edit1

在对象观察器上选择Events标签页,

双击Edit1的事件OnKeyPressC++Builder将自动生成这个事件处理程序的代码模板。在里面编写如下代码:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

AnsiString Temp("用户姓名:");

if((Key==0xD) && !Edit1->Text.IsEmpty())

      Memo1->Lines->Add(Temp+Edit1->Text);

}

或者写成如下的格式更好理解,它们是一样的。

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

       AnsiString Temp="用户姓名:";

       if((Key==VK_RETURN) && Edit1->Text!="")

      Memo1->Lines->Add(Temp+Edit1->Text);

 

}

当用户输入文本并且按下回车键后,第三条语句将Temp和用户输入的字符串合并后加到Memo控件文本的末尾。

现在,点击速度条上Run的按钮,运行这个程序,在编辑框中输入一个用户姓名,然后按回车键。用户的姓名就被自动加到了文本框的末尾。

用鼠标在Memo控件中点击一下,将焦点移动到它里面,然后按下Alt+N加速键,可以看出,标签控件将焦点移动到了编辑框中。

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-6-272013320.png

 

20)问BCB中有一个和写字板差不多的组件RichEdit,学习她主要注意那几个属性的呢?

    答:只要能够把设置缺省字符格式DefAttributes、设置选中字符格式SelAttributes与设置段落Paragraph三个属性掌握好就差不多了,因为她的其它属性与Memo差不多。

    缺省字符格式DefAttributes、设置选中字符格式SelAttributesTtextAttributes对象,它是用来控制字符格式的,它的ColorHeightNameSizeStylePitch等性性和字体Tfont对象差不多,当然还有一些象CharSetConsistentAttributesProtected等一些不太常用的属性。

    设置段落ParagraphTparaAttributes对象,用来设置段落的对齐Alignment、首行缩进FirstIndent、左缩进LeftIndent、右缩进RightIndent、编号方式Numbering、制表位Tab等属性。

    段落的对齐Alignment的取值是taLeftJustify左对齐、taCenter居中和taRightJustify右对齐。

    编号方式Numbering,用来设置编号方式,取nsNone表示没有编号,取nsBulet表示采用悬挂缩进方式编号。

    制表位Tab用来设置某个制表位所在的位置。其声明为:_property int Tab[Byte Index]。第一个制表位为Tab[0],依次类推。

 

注:本文的所有例程都在BCB6、WINXP下编译通过。

(待续)

C++ Builder初学问与答

一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另...
  • wozengcong
  • wozengcong
  • 2014年01月04日 16:44
  • 1500

设计模式之Builder模式 (C++实现)

刚开始我一直感觉建造者模式不太好懂,也许是我笨了点缘故,勤能补拙嘛,所以只能多看多想了 大话设计模式里面那个对于建造者模式我讲解,个人感觉不太好理解,我是看了很多遍也没体会到那样设计的精髓,后来在另...
  • i_like_cpp
  • i_like_cpp
  • 2013年05月30日 10:26
  • 2842

给C++初学者的50个忠告

1.把C++当成一门新的语言学习(和C没啥关系!真的。);     2.看《Thinking In C++》,不要看《C++变成死相》;    3.看《The C++ Programming La...
  • shenshen211
  • shenshen211
  • 2016年03月17日 09:42
  • 455

c++builder使用Windows系统提供的IP控件

本文是ccrun(老妖)根据偶然间看到的一篇文章略作修改而成。参考资料: 标题:在Delphi中使用IP控件 作者:西安交通大学9649# 刘明华 在些对原作者的无私奉献表示感谢!如欲转载请保留...
  • lz465350
  • lz465350
  • 2014年11月12日 10:45
  • 627

C++ Builder VCL库函数简介

一.BORLAND C++ BUILDER VCL的内存管理函数   1. AllocMem   在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下:   void ...
  • lixingshi
  • lixingshi
  • 2014年11月18日 10:12
  • 897

使用 C++ Builder 创建应用程序

3.1 创建应用程序 C++Builder的主要用途于设计创建Windows应用程序。有三种基本的Windows应用程序: · WindowsGUI应用程序。 · 控制面板应用程序。 · 服务应用程序...
  • u010984552
  • u010984552
  • 2016年08月19日 20:18
  • 2057

C++builder(Xe5)下加载VC动态库的两种方法

这里分为两种方式:动态加载的
  • JohnnyHu90
  • JohnnyHu90
  • 2014年10月17日 13:08
  • 3582

在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议)

在7月4日看完sockcomp.pas后,我决定用socket api来写一个客户端和服务器并且同时支持TCP,UDP协议,于是我就去做,现将代码贴出来(已调试通过) Socket api Clie...
  • enjoy0104
  • enjoy0104
  • 2015年04月21日 01:05
  • 1089

C++ builder 添加资源文件

最近在研究BCB中资源文件的嵌入,找到一些资料,整理了一下,写下来供参考。    资源文件是一个以.rc结尾的文本文件,RC是资源脚本(Resource   Script)的意思,它的格式很简单,每...
  • Anton8801
  • Anton8801
  • 2016年05月20日 14:03
  • 927

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作 一、概述   在我们利用C++Builder进行报表设计和打印处理时,我们往往是用C++Builder自己所提供的QRep...
  • qq1132770390
  • qq1132770390
  • 2016年08月27日 09:39
  • 674
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Builder 初学问与答(二)
举报原因:
原因补充:

(最多只允许输入30个字)