它们都是继承自 TShape 类, 共同拥有如下属性:


Fill            : TBrush;      //填充
Stroke          : TBrush;      //边线(画笔)
StrokeThickness : Single;      //厚度(边线宽度)
StrokeCap      : TStrokeCap;  //线帽样式, TStrokeCap (枚举)类型
StrokeDash      : TStrokeDash; //虚线样式, TStrokeDash(枚举)类型
StrokeJoin      : TStrokeJoin; //拐点结合样式, TStrokeJoin(枚举)类型
ShapeRect      : TRectF;      //可填充范围的矩形(相对于当前图形)

TLine 用不着 Fill, 但增加了 LineType 属性(TLineType 枚举类型);


procedure TForm1.Button1Click(Sender: TObject);
begin
  Line1.LineType := TLineType.ltDiagonal; //斜线
  Line2.LineType := TLineType.ltTop;      //横线
  Line3.LineType := TLineType.ltLeft;    //竖线
end;

TElipse 和 TCircle 没有新属性, 应该也用不着 StrokeCap、StrokeJoin.


procedure TForm1.Button1Click(Sender: TObject);
begin
  Ellipse1.StrokeDash := TStrokeDash.sdDot; //虚线样式
  Circle1.Fill.Kind := TBrushKind.bkNone;  //取消填充
end;

TArc 和 TPie 增加了 StartAngle、EndAngle 属性.



TRectangle 增加了控制圆角的 XRadius、YRadius 属性、控制边线的 Sides 属性、控制四个角的 Corners、CornerType 属性;

TRoundRect 只加了 Corners 属性; 看来要做更随意的圆角矩形得用 TRectangle 而不是 TRoundRect.


procedure TForm1.Button1Click(Sender: TObject);
begin
  Rectangle1.Position.X := ;
  Rectangle1.Position.Y := ;
  Rectangle1.Width := ;
  Rectangle1.Height := ;
  Rectangle1.StrokeThickness := ;
  Rectangle1.Fill.Color := $80FF0000;
  Rectangle1.Stroke.Color := $800000FF;   Rectangle1.XRadius := ;
  Rectangle1.YRadius := ;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
  Rectangle2.Position.X := ;
  Rectangle2.Position.Y := ;
  Rectangle2.Width := ;
  Rectangle2.Height := ;
  Rectangle2.StrokeThickness := ;
  Rectangle2.Fill.Color := claRed;
  Rectangle2.Stroke.Color := claBlack;   Rectangle2.CornerType := TCornerType.ctBevel;
  Rectangle2.Corners := [TCorner.crBottomLeft, TCorner.crBottomRight];
  Rectangle2.Sides := [TSide.sdBottom, TSide.sdRight];   //关于 Corners 和 Sides 还有两个非常方便的常量: AllCorners、AllSides
end;

TCalloutRectangle 很有意思, 矩形外带一个三角, 应该是用于图形化的注释.

给它增加的 CalloutWidth、CalloutLength、CalloutPosition、CalloutOffset 四个属性都是用于控制三角的.


procedure TForm1.Button1Click(Sender: TObject);
begin
  CalloutRectangle1.Width := ;
  CalloutRectangle1.Height := ;
  CalloutRectangle1.CalloutPosition := TCalloutPosition.cpBottom;
  CalloutRectangle1.CalloutWidth := CalloutRectangle1.Width / ;
  CalloutRectangle1.CalloutLength := CalloutRectangle1.Height / ;
  CalloutRectangle1.CalloutOffset := -CalloutRectangle1.Width / ;
end;

这其中需要进一步学习的是 Fill、Stroke 属性, 它们都是 TBrush 类型, 会涉及到 TBitmap、TBitmapObject、TCanvas 等等.

Delphi XE2 之 FireMonkey 入门(6) - TLine、TEllipse、TCircle、TPie、TArc、TRectangle、TRoundRect、TCalloutRectangle的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  2. Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem

    Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...

  3. Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid

    Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...

  4. Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit

    Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...

  5. Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox

    Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...

  6. Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo

    Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如:   Memo1.UseSma ...

  7. Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox

    Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...

  8. Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu

    Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...

  9. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); ov ...

随机推荐

  1. vue表单校验(三)

    vue表单校验(三) 每当看到heyui的这个表单校验,我就一直想将element的校验也做类似的功能,终于有了方式,虽然不是很完美,但是可以使用,能满足要求了 实现方式 基于element-ui实现 ...

  2. 剑指offer 删除链表的节点

    给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. struct ListNode { int val; ListNode *next; }; void DeleteNode ...

  3. spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的。

    Spring jar包的描述:针对3.2.2以上版本 org.springframework spring-aop ——Spring的面向切面编程,提供AOP(面向切面编程)实现 org.spring ...

  4. C++ md5类,封装好

    在网上看到很多md5类,不过封好的很少,我就在网上看到一篇把他写的封装 头文件 #ifndef _MD5_H #define _MD5_H #pragma warning(disable:4786)/ ...

  5. Java设计模式之——代理设计模式

    1.什么是代理设计模式 所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 这里举一个栗子:就拿我们平时租房子来举例子,好比租客和房主之间的关系,我们租房子往往不 ...

  6. 基于Kintex Ultrasacle的万兆网络光纤 PCIe加速卡416 光纤PCIe卡

    基于Kintex Ultrasacle的万兆网络光纤 PCIe加速卡 一.产品概述 本卡为企业级别板卡,可用于数据中心,安全领域数据采集处理.标准PCI Express全高板,适用于普通服务器.工作站 ...

  7. Linux架构之Nginx 七层负载均衡

    第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...

  8. java 通过反射获取数组

    1.创建数组.设置数组元素.访问数组 一维数组: 多维数组: public Class<?> getComponentType() 返回表示数组组件类型的 Class.如果此类不表示数组类 ...

  9. git详细使用教程

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  10. Linux为程序员添加了行为准则

    假如你是开发人员,如果您密切关注Linux开发,您就会知道Linux内核讨论会非常热烈.最近,LinusTorvalds承认Linux内核邮件列表(LKML)和其他Linux开发空间对许多人都是敌对的 ...