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

原创 2003年08月20日 21:40:00

(版权声明:本系列文章仅供CSDN使用,另授权CCRUN转载,其他个人与网站未经作者或CSDN同意不得转载、摘抄)

 

8.图形类组件

      59)问:Windows是一个图形系统,C++Builder是怎样处理图形的呢?

   答:C++Builder通过提供图形组件来处理图形,其中比较常用的有图像组件(Image)、几何图形组件(Shape)和画板组件(PaintBox)。前两个组件位于Additional页中,画板组件位于System页中。

BCB中,FormImageBitMapPaintBox等都具有绘图能力,这些组件中都有Canvas属性。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

60)问:图像控件有哪些特殊的属性?

答:图像组件可以显示各种以文件形式存储在磁盘上的图形。它有这样一些特殊的属性。

AutoSize属性,当属性值为True时,图像组件会自动调节尺寸以便适应图像组件的大小。缺省值为True

Stretch属性,当该属性为True时,图像的尺寸自动调整并填满整个图像组件的范围。但ICO文件无法产生这种效果。缺省值为False

Transparent属性,确定是否允许图像中指定的颜色透明,从而使组件下面的物体显示出来。缺省值为False

Center属性,当该属性为True时,图像居中显示;否则,从左上角开始显示。

属性Picture,你可以在设计阶段利用这个属性指定所要显示的图片,也可以在运行期间再显示。前面一种情况下,你可以单击Picture属性的Value列中的省略号按钮,这时会出现一个图片编辑对话框,单击对话框中的Load按钮就可以选择载入要显示的图片了。

 

61)问:如果是在程序运行期间载入图片,应该怎么办?

答:如果是在程序运行期间载入图片,那么可以使用TPicture类的方法LoadFromFile,这个方法可以载入存储在磁盘上的图像文件。例如要载入D盘根目录下的picture.bmp,可以这样调用:

Image1->Picture->LoadFromFile("d://picture.bmp")

这个控件可处理的图片文件的类型有:.BMP文件、.ICO文件、.EMF.WMF等多种图像文件。如果你试图载入一种无法识别的文件类型,将会产生异常错误。

 

62)问:能说一下AutoSizeStretch的区别吗?

答:好的,在窗体上放置两个图像组件,将左边的图像组件的AutoSize属性为True,所以载入任何图片后,组件的尺寸与图片的尺寸完全相同。而且如果你增大或减小图像组件的尺寸,图片的显示仍然不变。将右边的图像组件的AutoSize属性设置为False,将它的Stretch属性设置为True。当你增大或减小图像组件的尺寸,图片将按比例增大或缩小,也就是说图片始终充满整个组件。

 

63)问:TShape控件有什么重要属性?

答:这个组件可以显示一些常见的几何图形,例如矩形、圆、椭圆等。几何图形组件有几个比较重要的属性:BrushPen Shape

Brush属性,用来设置几何图形内部的填充特性,包括填充的图案(Style)和颜色(Color)等。

Pen属性,用来设置几何图形的外框特性,包括画笔的颜色(Color)、线型(Style)和线宽(Width)Mode关系等。

属性Shape,用来指出所显示的几何图形类型。这个属性可以有六种不同的值,分别表示六种不同的几何图形;

1stEllipse表示椭圆。

2stRectangle表示矩形。

3stRoundRect表示圆角矩形。

4stRoundSquare表示圆角正方形。

5stSquare表示正方形。

6stCircle表示圆。

 

在设计阶段,你可以使用鼠标改变图形的尺寸。在运行期间,可以通过HeightWidth属性改变图形的尺寸。

 

64)问:属性Brush前面有一个加号,它是什么意思?

答:它表示这个属性是可以展开的,也就是说,它还包含一些子属性。单击加号,可以发现它的子属性是:ColorStyle

Color属性包含一系列C++Builder预定义的颜色,你可以从中为显示的几何图形选择一种填充颜色。

Style属性确定了几何图形的填充样式,它可以分别取这样8种值:bsBDiagonal, bsClear, bsCross, bsDiagCross, bsDiagonal, bsHorizontal, bsSolidbsVertical

属性Pen也象属性Brush一样有子属性。它的子属性是Color, Mode, StyleWidth。其中最常用的就是StyleWidth,它们分别表示线型和线宽。子属性Style可以取这样一些值来画边框:

psSolid

表示实线。

psDash

表示破折号。

psDot

表示圆点。

psDashDot

表示破折号和圆点。

psDashDotDot

表示破折号、圆点、圆点。

psClear

表示没有线。

psInsideFrame

表示内框实线。

 

65)问:这个画板组件有什么作用?

答:画板组件主要为用户提供一块作图区域,用户可以使用绘图语句在这个作图区域上画出各种不同的图形。

要注意的是,由于画板组件没有边界,所以通常应该把它放在一个有边界的容器类组件上。

画板组件主要使用Canvas属性来进行绘图工作。Canvas(画布)是类TCanvas的对象,类TCanvas包含绘图中使用的各种方法和属性。下面我们首先介绍Canvas对象的各种属性。

画笔(Pen  Canvas对象中有一个画笔成员,它确定绘制几何图形时使用的画笔类型。刚才我们介绍了画笔的线型和线宽。

画笔的Color属性是绘图时使用的前景色。

画笔的属性Mode用来确定画笔与屏幕上原有点的混合方式。可结合当前的颜色、屏幕的颜色或它们的反转值,对线段的颜色重新定义。但不改变Color属性。

它可以取这样一些值:

pmBlack:表示用黑色绘图;

pmWhite:表示用白色绘图;

pmNot:画笔绘制的点的颜色与原有的颜色相反;

pmCopy:画笔用Color属性中定义的颜色绘图。

PmNotCopy:画笔用Color属性中定义的颜色的反转色绘图;

PmMergePenNot:画笔用Color属性中定义的颜色与屏幕颜色的反转色结合后绘图;

PmMaskNotPen:画笔用屏幕颜色与Color属性中定义的颜色结合后绘图;

PmMergeNotPen:画笔用屏幕颜色与Color属性中定义的颜色的反转值结合后绘图。

Brush属性,刷子属性在前面已经详细介绍过,它可以确定图形的填充模式和填充颜色。

属性ClipRect,用来确定绘图区域的范围。任何超出这个范围的图形不会显示。

 

66)问:Canvas对象上,我们可以用怎样的方法来完成作图工作?

答:Canvas对象有一些基本做图方法:

1.首先是MoveTo方法,MoveTo将笔的当前位置设置到点(xy)处,笔的当前位置将保存到PenPos属性中,要注意的是,改变笔的当前位置用MoveTo方法,而不要修改PenPos属性。函数形式为MoveTo(x,y)

2LineTo方法,用来完成从当前位置画一条直线至点(xy),并把笔的位置移动到这一点。函数形式为LineTo(x,y)

在画线时一般首先使用方法MoveTo移动线的起始点,然后再使用方法LineTo画直线。

3.方法Rectangle用来在画布上用当前画刷绘制矩形,其中x1y1是矩形的左上角坐标,x2y2是矩形的右下角坐标。因为正方形实际上就是一种特殊的矩形,所以你可以使用这个方法画出正方形。函数形式为Rectangle(x1,y1,x2,y2)

4.方法Ellipset用来在画布上给定的矩形边界上画一个椭圆,其中x1y1是边界矩形的左上角坐标,x2y2是边界矩形的右下角坐标。所谓边界矩形就是圆或椭圆的外接矩形。函数形式为Ellipse(x1,y1,x2,y2)

5.方法RoundRect用来绘制圆角矩形:其中x1y1x2y2分别是圆角矩形虚拟的左上角和右下角。x3y3是圆角的长短半径。函数形式为RoundRect(x1,y1,x2,y2)

6.方法Polygon可以画出多边形。函数形式为Polygon(Tpoint p,int Point_Size)

参数P是类Tpoint的一个数组,每一个Tpoint对象包含一个点的XY坐标。Points_Size用来指示数组的大小。这个是实心多边形,Polyline是画多边形的,二者用法基本相同。

 

67)问:在显示区域输出文本信息,我们是不是还象DOS下用printf函数来实现?

答:printf是一个控制台函数,不能在窗口程序中使用,一般我们TextOut输出文本,其声明:void _fastcall TextOut(int X,int Y,const AnsiString Text);其中xy是输出字符串起始点的坐标,text是要输出的文本。当然你要用Lable也是可以的J

 (待续)

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

 8.图形类组件  59)问:Windows是一个图形系统,C++Builder是怎样处理图形的呢? 答:C++Builder通过提供图形组件来处理图形,其中比较常用的有图像组件(Image)、几何图...
  • chinahuyong
  • chinahuyong
  • 2009年04月03日 12:52
  • 862

C++ Builder初学问与答

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

C++ Builder初学问与答1

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

C++ Builder 初学问与答 (十一)

11.工具条组件  87)问:工具条是Windows编程经常要用的, C++Builder能不能实现这个功能呢? 答:当然可以,工具条是由许多具有图形的按钮组成的,这些按钮被分隔符分隔成许多组,每个组...
  • chinahuyong
  • chinahuyong
  • 2009年04月03日 12:53
  • 825

C++ Builder初学问与答(十三)

 第二部分:快速提高  好久以来有不少朋友问我,《C++  Builder问与答》为什么不继续写了?我也一直在思考还应该写下去不?CBX的推出,加之宝兰宣布不在出新的CB版本,让我们这些一直喜爱CB的...
  • chinahuyong
  • chinahuyong
  • 2009年04月03日 12:54
  • 662

C++ Builder初学问与答11

11.工具条组件 87) 问:工具条是Windows编程经常要用的, C++Builder能不能实现这个功能呢? 答:当然可以,工具条是由许多具有图形的按钮组成的,这些按钮被分隔符分隔成许多组,每个组...
  • cyp0207
  • cyp0207
  • 2007年11月28日 11:52
  • 358

C++ Builder 初学问与答(十五)

(7)在C++Builder集成开发环境中,还有Component菜单。在组件菜单下的菜单命令是有关建立、安装、重建组件的菜单项。其中: “New Component”菜单项打开组件向导建立新组件。...
  • chinahuyong
  • chinahuyong
  • 2009年04月03日 12:55
  • 813

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

 6.图形列表组件TreeView  45)问:有时侯,我希望实现类似资源管理器对文件夹管理的显示方式,和对文件的管理显示方式,在C++Builder中应该怎么办? 答:在C++Builder中可以直...
  • chinahuyong
  • chinahuyong
  • 2009年04月03日 12:51
  • 647

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

38)问:事件OnChange和OnScorll都可以描述滚动条的滚动事件,他们有什么区别吗?答:事件OnChange和OnScorll是有区别的。只要属性Position的值发生改变,那么无论这个值...
  • ch_builder
  • ch_builder
  • 2003年07月17日 07:51
  • 1524

C++ Builder初学问与答4

4.列表类组件 31) 问:当我需要使用多个选项的时候,使用单选按钮或复选框来进行选择不是很恰当,因为在窗体上放置大量的按钮既不利于布局的美观,又会消耗大量的系统资源,C++Builder有什么解决办...
  • cyp0207
  • cyp0207
  • 2007年11月28日 11:47
  • 309
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Builder 初学问与答(八)
举报原因:
原因补充:

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