您的位置:首页 > 其它

闲谈Graphics单元

2005-03-08 11:49 155 查看
本文中如果有错误的地方,您可以通过[/i]ttch007@sina.com[/i]联系笔者,[/i] [/i]同时希望能与大家共同讨论[/i]
[/i]
VCL中的图象显示核心单元Graphics,其中主要把图象对象分为2大类TGriphics TGriphicsObject,两者从字面意义讲一个是图象体,一个是图象工具。打个比喻一个是绘图体,一个是绘图工具体。接下来我们具体了解以下这个单元是怎么封装的这个单元。
TFont,TPen,TBrush[/b]这[/b]3[/b]个对象组成了[/b]TCanvas[/b][/b][/b]你可以看到图1,TFont,TPen,TBrush 3个类都来之TGriphicsObject,而TGriphicsObject是个有存储能力的持久类。了解TCanvas的基础是了解这3个对象,他们提供了TCanvas基本的功能和数据,TCanvas是靠这3个对象的数据开始运做的。在TFont,TPen,TBrush都做了什么来提供给TCanvas的数据的?
带这个疑问我们看看TFont,TBrush,TPen
我们首先看看TGraphicsObject提供了给这3个类 TGraphicsObject = class(TPersistent) private FOnChange: TNotifyEvent; FResource: PResource; FOwnerLock: PRTLCriticalSection; protected procedure Changed; dynamic; procedure Lock; procedure Unlock; public function HandleAllocated: Boolean; property OnChange: TNotifyEvent read FOnChange write FOnChange; property OwnerCriticalSection: PRTLCriticalSection read FOwnerLock write FOwnerLock; end;从上面我们可以看到 TGraphics提供了标准的改变事件函数指针,Resource指针,临界区锁定功能,那么Resource指针指向的结构都有什么?
PResource = ^TResource; TResource = record Next: PResource; RefCount: Integer; Handle: THandle; HashCode: Word; case Integer of 0: (Data: TResData); 1: (Font: TFontData); 2: (Pen: TPenData); 3: (Brush: TBrushData); end;上面就是他的结构体他是一个HASH表,数据结构的东西就不讲,我们跳过,你可以看到其中还有4个结构体,那里就有我们这个单元要谈的3个类的属性存储结构,按号入位,大家都找到了吧。我们跳过3个结构体,直接讲解下面的机制。我们知道了TGraphics提供了给这3个类最基本的功能,那么我们接下来要知道这3个类是如何被建立和设定属性的方式。TResourceManager是一个建立实际数据空间的类,他主要为这3个类提供真正的数据空间。(他和WINDOWS没有关系)这样讲也许有人不会他理解,我画了一个图,大家可以在压缩包中找到相应的图片(ThreeClass.png)里面有详细的介绍.
先到这 先是简单的介绍一下机制,以后再谈其中的具体操作细节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: