delphi SimpleGraph控件的部分注释

2023-05-16

TSimpleGraph是一个delphi下的可视化图形开源控件,有很强编辑态和运行态编辑功能,是学习开发DELPHI控件的一个很好的例子,控件本身有很强的扩展性,完全可以自定义绘制各种图形.

控件的地址为http://www.delphiarea.com/products/delphi-components/simplegraph/

完全读懂这个控件,还是要读源码,吃透

以下为零几年时首次解读控件的注释,当时还是一个DELPHI新手,所以注释的语意难免不是很准确,后面理解了也懒得改了,见凉.现在公开给需要的朋友

  TSimpleGraph = class;      //控件类
  TGraphObject = class;      //图形基类
  TGraphLink = class;        //链接类
  TGraphNode = class;        //结点类

TSimpleGraph 
事件
    property OnObjectInitInstance  //对象初始化事件
    property OnObjectInsert: //对象插入事件
    property OnObjectRemove:           //对象移除事件
    property OnObjectChange:         //对象改变事件
    property OnObjectSelect:  //对象选择事件
    property OnObjectClick:  //对象点击事件
    property OnObjectDblClick://对象双击事件
    property OnObjectContextPopup:  //右键菜单事件
    property OnObjectBeforeDraw:   //对像绘制之前事件
    property OnObjectAfterDraw: //对像绘制之后事件
    property OnObjectBeginDrag:   //对象拖拉之事件
    property OnObjectEndDrag: //对象拖拉之后事件
    property OnObjectMouseEnter://鼠标在进入对象之前事件
    property OnObjectMouseLeave:  //鼠标在进入对象之后事件
    property OnObjectRead:   //读自定义数据事件
    property OnObjectWrite:  //写自定义数据事件
    property OnObjectHook:  //对象吸附之后事件
    property OnObjectUnhook: //对象断开吸附事件
    property OnCanHookLink: //吸附事件
    property OnCanLinkObjects:   //连接事件
    property OnCanMoveResizeNode: //移动结点件事
    property OnCanRemoveObject:   //移除对象事件
    property OnNodeMoveResize:  //结点重设大小事件
    property OnGraphChange:  //图形改变事件
    property OnCommandModeChange: //命令模式改变事件
    property OnBeforeDraw:  //绘制之前事件
    property OnAfterDraw:  //绘制之后事件
    property OnInfoTip:   //提示事件
    property OnZoomChange:  //缩放事件

TGraphObject
  TGraphObject = class(TPersistent)
  private
    fID: DWORD;                                  //对象ID
    fOwner: TSimpleGraph;                        //所有者
    fBrush: TBrush;                              //画刷
    fPen: TPen;                                  //画笔
    fText: String;                               //文本标题
    fHint: String;                               //提示文本
    fFont: TFont;                                //字体
    fParentFont: Boolean;                        //是否使用父控件字体
    fOptions: TGraphObjectOptions;               //可以操作的集合  --goLinkable, goSelectable, goShowCaption
    fVisible: Boolean;                           //是否可以显示
    fSelected: Boolean;                          //是否可以选择
    fStates: TGraphObjectStates;                 //控件的状态    osCreating, osDestroying, osLoading, osReading, osWriting,osUpdating, osDragging, osDragDisabled, osConverting
    fDependentList: TGraphObjectList;            //相关对象
    fLinkInputList: TGraphObjectList;            //连入对象
    fLinkOutputList: TGraphObjectList;           //连出对象
    fTextToShow: String;                         //显示的文本
    fTag: Integer;                               //标识号
    fData: Pointer;                              //暂时没有用上
    fHasCustomData: Boolean;                     //是否有自定义数据
    fVisualRect: TRect;                          //图形占有实际的矩形区大小
    fVisualRectFlags: TGraphChangeFlags;         //图形可占有区的显示标记,即可以显示那些
    UpdateCount: Integer;                        //更新数
    PendingChanges: TGraphChangeFlags;           //挂起的改变
    DragDisableCount: Integer;                   //禁止拖拉数 --没搞明白
    function IsFontStored: Boolean;                          //是否存储字体
    procedure StyleChanged(Sender: TObject);                 //改变样式
  protected
    constructor CreateFromStream //从流中创建对象
    function GetOwner: TPersistent;                         //取所有者
    procedure DefineProperties(Filer: TFiler); 
    procedure Initialize; virtual;                                                  //初始化
    procedure Loaded; virtual;                                                    //载入,
    procedure ReplaceID                        //替换ID
    procedure ReplaceObject        //替换对象
    {------------------------------难点,控件之间更新------------------------------------------------ }
    procedure NotifyDependents      //观察者模式:通知-该对象的每一个依赖通知改变更新
    procedure LookupDependencies;                                   //查找相关
    procedure UpdateDependencies;                                 //更新相关
    procedure UpdateDependencyTo//更新相关  ->>UpdateDependencies  子类实现
    function UpdateTextPlacement       //更新文本位置
    procedure Changed //对象改变方法
    procedure BoundsChanged(dX, dY, dCX, dCY: Integer); virtual;
    procedure DependentChanged        //空-子类实现
    procedure LinkInputChanged      //加入或减少DependentList列表
    procedure LinkOutputChanged   //加入或减少DependentList列表
    {------------------------------------------------------------------------------ }
    procedure ParentFontChanged; virtual;    //父控件写体更新
    function IsUpdateLocked: Boolean; virtual;
    function NeighborhoodRadius: Integer; virtual;  //半径大小
    function FixHookAnchor: TPoint; virtual; abstract;   //固定关联
    function RelativeHookAnchor//修改点加入索引
    procedure DrawControlPoint //一个控制点
    procedure DrawControlPoints //画控制点
    procedure DrawHighlight     //画高亮
    procedure DrawText//画文本
    procedure DrawBody //画身体
    procedure Draw//画函数
    procedure DrawState     //画状态
    function IsVisibleOn   //查询大小
    procedure QueryVisualRect
    function QueryHitTest//查询点击位
    function QueryCursor
    function QueryMobility//根据点击点返回要移动的移动边
    function OffsetHitTest//根据点击点和偏移参数重设大小并返回是否成功
    procedure SnapHitTestOffse //偏移到网格上
    function BeginFollowDrag(HT: DWORD):    //开始拖拉
    function EndFollowDrag:             //结束拖拉
    procedure DisableDrag;                          //禁用拖拉
    procedure EnableDrag;                       //启用拖拉
    procedure MoveBy;     //移到
    procedure MouseDown  // 鼠标按下
    procedure MouseMove                    //鼠标移动
    procedure MouseUp   //鼠标弹起
    function KeyPress               //按键处理
    procedure SetBoundsRect                         //设置边框大小
    function GetBoundsRect: TRect;                                         //获取边框大小
    function GetSelectedVisualRect:                     //获取选择区大小
  protected
    property TextToShow:      //要显示的文本
    property DependentList:                          //相关的对象列表
    property LinkInputList:                          //连入的对象列表
    property LinkOutputList:  //连出的对象列表
    property VisualRectFlags:  //图形可占有区的显示标记,即可以显示那些
  public
    constructor Create//创建对象
    destructor Destroy; //销毁对象
    procedure AfterConstruction;  //创建对象之后
    procedure BeforeDestruction;    //销毁之前
    procedure Assign  //从另一对象复制
    procedure AssignTo //复制到另一对象
    procedure LoadFromStream  //从流中载入对象
    procedure SaveToStream  //保存到流中
    procedure BeginUpdate;                       //开始更新
    procedure EndUpdate;                       //结束更新
    procedure Invalidate;                         //刷新
    procedure BringToFront;                          //至前
    procedure SendToBack;                        //至后
    class function IsLink: Boolean;                 //是否为线路
    class function IsNode: Boolean;              //是否为结点
    function IsLocked: Boolean;                     //是否锁定
    function Delete: Boolean;                   //删除
    function CanDelete: Boolean;                  //是否可以删除
    function HitTest                         //测试-鼠标点击的位置
    function ContainsPoint         //对象中是否包含了XY坐标是否有对象
    function ContainsRect             //Rectc是否与对象重叠
    function BeginDrag  //开始画
    function DragTo; // DragTo—DragBy
    function DragBy //拖拉到
    function EndDrag                 //是否结束拖拉
    property States: //对象的状态
    property Dragging: //是否在拖拉中
    property Showing: //是否在显示中
    property Owner: //所有都
    property ZOrder: //层  Z
    property Selected:  //是否选中
    property BoundsRect: //对象的边大小
    property VisualRect:  //图形占有实际的矩形区大小
    property SelectedVisualRect: //选择区域
    property Dependents[Index: Integer]: //依赖对象
    property DependentCount://依赖数
    property LinkInputs[Index: Integer]: //连接输入对象
    property LinkInputCount:  //连接对象输入数
    property LinkOutputs[Index: Integer]: //连接输出对象
    property LinkOutputCount: //连接对象输出数
    property Data: //暂时没有用上
    property ID:  //对象ID号
  published
    property Text://文本内容
    property Hint: //提示文本
    property Brush://画刷
    property Pen: //画笔
    property Font: //字体
    property ParentFont: //j是否使用父控件字体
    property Options: //图形对象的操作 默认是可链接,可选择,可显示标题
    property Visible: //是否可以显示
    property Tag: //标识号
    property HasCustomData: //是否可有自定义数据
  end;

TGraphLink
    procedure Assign //复制对象
    function ContainsRect //Rectc是否与对象重叠
    function CanMove//是否能移动
    function AddPoint//添加点
    procedure InsertPoint//加入点索引对应的点
    procedure RemovePoint//移除索引对应的点
    function AddBreakPoint //加入折点,还是调用InsertPoint
    function HookedObjectOf //吸附索引对应的对象
    function HookedIndexOf //吸附索引
    function HookedPointCount: //连接点 0,1,2
    function CanHook//是或能吸附连接
    function Hook//吸附
    function Unhook   //断开
    function CanLink// 是否能连接
    function Link//吸附
    function Rotate//旋转
    function Scale //缩放
    procedure Reverse; //反转
    class function IsLink: //是否是链接
    property Source: //源对象
    property Target: //目标对象
    property Points[Index: Integer]: //线的点数组中的一项
    property PointCount: //点数量
    property Polyline:  //线的点数组
  published
    property BeginStyle: //起始点样式
    property BeginSize: //起始点大小,修改点,修改默认参数
    property EndStyle: //结束点样式,修改点,修改默认参数
    property EndSize: //结束点大小,修改点,修改默认参数
    property LinkOptions: 
    property TextPosition:  //文本的位置
    property TextSpacing: //与线的空白距离

公共函数:

function WrapText//文本分行
function MinimizeText//最小文本
function IsBetween//值大小是否是两者之间
function TransformRgn //区域变换  //TXForm; {坐标转换的矩阵结构} 可参考http://www.cnblogs.com/del/articles/1212534.html
function NormalizeAngle //度格式化在—-2pi与2pi之间
function EqualPoint  //两个点坐标是否相等
procedure TransformPoints//转换两个图形区域
procedure RotatePoints//把坐标Points以OrgPt,旋转Angle    Org起始地址
procedure ScalePoints//按Factor比例,以RefPt中心,重计算缩放Points的坐标
procedure ShiftPoints//以 RefPt为中心,按参数 dX, dY,远离它
procedure OffsetPoints//以dx,dy偏移Points
function CenterOfPoints//计算出中心点
function BoundsRectOfPoints//由多点形成的矩形
function NearestPoint//返回多点Points坐标集合中距离RefPt最近的点

function MakeSquare//将一个点通过缩扩Radius倍形成一个矩形
function MakeRect //由两个坐标建立一个矩形
function CenterOfRect//返回矩形中的中心点坐标
procedure UnionRect//由两个矩形合成大矩形返回给DstRect
procedure IntersectRect//返回相交的矩形
function OverlappedRect //两个矩表是否重叠,

function LineLength //两点之间的距离
function LineSlopeAngle//计算线的角度-以弧度表示
function DistanceToLine//点和线的距离
function NearestPointOnLine//计算LinePt1, LinePt2之间线上离RefPt最近的点 采用二分法,无限逼近最近点
function NextPointOfLine//计算距离RefPt点坐标以LineAngle为角度(弧度表示)距离为DistanceFromThisPt的点坐标{从点Line1Pt以Line1Angle角度与点Line2Pt以Line2Angle角度,算出相交的点}
function IntersectLines
function IntersectLineRect//返回线与矩形的交叉点
function IntersectLineEllipse// 返回线与圆的交叉点
function IntersectLineRoundRect //返回线与圆角矩形的交叉点
function IntersectLinePolygon //返回多边形上的交插点集合
function IntersectLinePolyline// 返回线与多边线的交叉点

 

 

simplegraph QQ群号 17267174

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

delphi SimpleGraph控件的部分注释 的相关文章

  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • 错误:使用 Microsoft WebService.dll 通过 Delphi7 规范化 XML

    我正在使用 Delphi7 修改旧项目以添加使用证书和签名 经过一番搜索后我发现XML 规范化函数 https learn microsoft com en us previous versions dd815358 v vs 85 但我无
  • 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

    我编写了一个应用程序 该应用程序具有覆盖类型的窗口 可以通过热键显示和隐藏该窗口 而另一个应用程序具有焦点 所述另一个应用程序是一个以管理员权限运行的 DirectX 游戏 我已经尝试了 3 种可能的解决方案 以便在其他应用程序中按下我的热
  • 我可以在“Delphi 2007 for Win32”中使用.NET DLL吗?

    是否可以在 Delphi 2007 for Win32 中使用 NET DLL 我尝试以与 ActiveX 组件相同的方式导入 DLL 但它似乎不起作用 组件菜单 gt 导入组件 gt 导入 NET 程序集 是否可能 如果可以 步骤是什么
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • 如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

    Delphi 最新版本使用各种系统 dll 的静态链接 例如 WinApi Windows 单元中的 version dll 这会导致在单元初始化之前加载 version dll 这会打开一个安全漏洞 可以通过将受感染的 version d
  • 如何在滚动框上创建缓慢的滚动效果?

    我喜欢在滚动框中平移图像后创建平滑的减慢滚动效果 就像平移地图一样谷歌地图 http maps google com 我不确定它是什么类型 但行为完全相同 当快速移动地图时 当您释放鼠标时它不会立即停止 而是开始减慢速度 有什么想法 组件
  • 运行delphi客户端自动化程序后excel.exe保持加载状态的原因是什么?

    我编写了一个 Delphi 程序 该程序从单个 XLS 文件的多个不同电子表格中提取数据并将其合并到文本文件中以供以后处理 这是德尔福7console程序 最相关的代码片段的摘录将向您表明 显然 我的程序表现得相当好 或者至少达到了它需要的
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 带位图的简单组合框

    如何将位图放入组合框中并将样式设置为简单 例如 Google Chrome 的右侧有星号 Firefox 的右侧有箭头 我尝试了这段代码 procedure TForm2 ComboBox1DrawItem Control TWinCont
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • 在 Delphi 中编程延迟的最佳方法是什么?

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str

随机推荐

  • java之方法的重写

    方法的重写 xff1a 1 在子类中可以根据需要对从基类中继承来的方法进行重写 2 重写的方法和被重写的方法必须具有相同方法名称 参数列表和返回类型 3 重写方法不能使用比被重写的方法更严格的访问权限 程序code class Person
  • Android中传递对象的三种方法

    Android中 xff0c Activity和Fragment之间传递对象 xff0c 可以通过将对象序列化并存入Bundle或者Intent中进行传递 xff0c 也可以将对象转化为JSON字符串 xff0c 进行传递 序列化对象可以使
  • Android中BroadCastReceiver使用(整理)

    BroadcastReceiver 在Android中 xff0c Broadcast是一种广泛运用的在应用程序之间传输信息的机制 而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件 下面将详
  • Android的联通性---USB主机模式(三)

    获取跟设备通信的权限 在跟USB设备进行通信之前 xff0c 你的应用程序必须要获取用户的许可 注意 xff1a 如果你的应用程序使用Intent过滤器来发现接入的USB设备 xff0c 而且用户允许你的应用程序处理该Intent xff0
  • android USB

    google 在推出API 3 0后 就增加啦USB通讯这块 同时为API 2 3提供啦一个USB通讯吧 xff0c 这样也让2 3有啦USB通讯功能 不过只支持USBAccessory模式 USB通讯分为两种模式 xff1a xff08
  • 入门 Kotlin 和 Java 混合开发

    一 前沿 如果你学习过其他的编程语言 xff0c 你就会发现 Java 的语法很是哆嗦 xff0c 可是我们为什么没有放弃 Java 这门编程语言呢 xff1f 因为 JVM 是一个非常好的平台 xff0c 而且 Java 程序员目前在中国
  • kotlin 和java 混编

    如果你之前使用 Java 语言而没有 Kotlin 开发经验 xff0c 不用担心 xff0c Intellij IDEA 会帮你一键转换 xff0c 将 Java 代码转换成 Kotlin 代码 但是反过来就不行了 在 Mac 上 xff
  • Kotlin 基础语法

    Kotlin 文件以 kt 为后缀 包声明 代码文件的开头一般为包的声明 xff1a package com runoob main import java util fun test class Runoob kotlin源文件不需要相匹
  • ‘break‘ not in the ‘loop‘ or ‘switch‘ context

    使用phpexcel导出表格 xff0c 切换到php7 0报错 错误地址 xff1a FILE ThinkPHP Library Vendor phpexcel PHPExcel Calculation Functions php LIN
  • Android数据存储之SQLite

    概览 l 概述 l CRUD方法详解 l 注意事项 概述 对于大量数据的处理 xff0c 如果不想将数据存于服务器端 xff0c Android API提供了对关系数据库SQLite的支持 xff0c 在android SDK中tool目录
  • SQLlite在安卓中的基本详解和简单使用

    一 基础介绍 1 SQLite 是一个进程内的库 是一种轻量级的 自给自足的 无服务器的 无需配置的 事务性的SQL数据库引擎 和他其他的数据库一样 xff0c SQLite引擎不是一个独立的进程 xff0c 可以按应用程序需求进行静态或动
  • android开发中的数据库SQLite的使用

    其实学习android很久了 xff0c 关于数据存储 xff0c 之前学习的时候也一同学习过 xff0c 编程这些东西很久没用都忘得差不多了 xff0c 最近做个项目要用到 xff0c 所以又学习了一遍 android中关于数据的存储有好
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • SQLiteOpenHelper使用详解

    SQLiteOpenHelper 的子类 xff0c 至少需要实现三个方法 xff1a 1 构造函数 调用父类 SQLiteOpenHelper 的构造函数 这个方法需要四个参数 xff1a 上下文环境 xff08 例如 xff0c 一个
  • SQLiteOpenHelper的简单使用

    由于想学习GreenDao框架 xff0c 但是看了一下有的蒙圈 xff0c 所以先熟悉一下android原生的SQLiteOpenHelper的使用工具 xff1a SQLite Expert Personal SQLite Expert
  • android SQLiteOpenHelper 使用

    1 实体 package mydemo mycom demo2 entity public class UserInfo private int id private String username private String passw
  • SQLiteOpenHelper的简单使用

    由于想学习GreenDao框架 xff0c 但是看了一下有的蒙圈 xff0c 所以先熟悉一下android原生的SQLiteOpenHelper的使用 工具 xff1a SQLite Expert Personal SQLite Exper
  • 安卓案例:利用SQLiteOpenHelper操作数据库及表

    安卓案例 xff1a 利用SQLiteOpenHelper操作数据库及表 一 运行效果 二 涉及知识点 1 利用SQLiteOpenHelper类创建与升级数据库 这个类是一个抽象类 xff0c 我们必须继承该类创建一个子类 xff0c 实
  • delphi SimpleGraph控件的部分注释

    TSimpleGraph是一个delphi下的可视化图形开源控件 xff0c 有很强编辑态和运行态编辑功能 是学习开发DELPHI控件的一个很好的例子 控件本身有很强的扩展性 完全可以自定义绘制各种图形 控件的地址为http www del