📄 050.htm
字号:
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">现在,只剩下</font><font
face="Arial" size="3">SetShape</font><font face="宋体" lang="ZH-CN" size="3">的实现部分了。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑶</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">编写实现方法</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">下面是</font><font face="Arial"
size="3">SetShape</font><font face="宋体" lang="ZH-CN" size="3">的实现:</p>
<p> </font><font face="Arial" size="3"></p>
<p>procedure TSampleShape.SetShape(value: TSampleShapeType);</p>
<p>begin</p>
<p>if FShape<>value then</p>
<p>begin</p>
<p>FShape := value;</p>
<p>Invalidate(True); { </font><font face="宋体" lang="ZH-CN" size="3">强制新形状的重画</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>end;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>2. </font><font face="宋体" lang="ZH-CN" size="3">覆盖</font><font face="Arial"
size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">destructor</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">为了改变缺省属性值和初始化部件拥有的对象,需要覆盖继承的</font><font
face="Arial" size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">destructor</font><font face="宋体" lang="ZH-CN" size="3">方法。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">图形控制的缺省大小是相同的,因此需要改变</font><font
face="Arial" size="3">Width</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">Height</font><font face="宋体" lang="ZH-CN" size="3">属性。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">本例中</font><font face="Arial"
size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制的大小的初始设置为边长</font><font
face="Arial" size="3">65</font><font face="宋体" lang="ZH-CN" size="3">个象素点。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑴</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">在部件声明中增加覆盖</font><font
face="Arial" size="3">constructor</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TSampleShape=class(TGraphicControl)</p>
<p>public</p>
<p>constructor Create(Aowner: TComponent); override;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑵</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">用新的缺省值重新声明属性</font><font
face="Arial" size="3">Height</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">width</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TSampleShape=class(TGrahicControl)</p>
<p>published</p>
<p>property Height default 65;</p>
<p>property Width default 65;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑶</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">在库单元的实现部分编写新的</font><font
face="Arial" size="3">constructor</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>constructor TSampleShape.Create(Aowner: TComponent);</p>
<p>begin</p>
<p>inherited Create(AOwner);</p>
<p>width := 65;</p>
<p>Height := 65;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>3. </font><font face="宋体" lang="ZH-CN" size="3">公布</font><font face="Arial"
size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><font face="Arial"
size="3">Brush</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">在缺省情况下,一个</font><font
face="Arial" size="3">Canvas</font><font face="宋体" lang="ZH-CN" size="3">具有一个细的、黑笔和实心的白刷,为了使用户在使用</font><font
face="Arial" size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制时能改变</font><font
face="Arial" size="3">Canvas</font><font face="宋体" lang="ZH-CN" size="3">的这些性质,必须能在设计时提供这些对象;然后在画时使用这些对象,这样附属的</font><font
face="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">或</font><font
face="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">被称为</font><font
face="Arial" size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">管理</font><font face="Arial"
size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象需要下列三步:</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">●</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">声明对象域</font><font face="Arial"
size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">●</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">声明访问属性</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">●</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">初始化</font><font face="Arial"
size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象</p>
<p> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑴</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">声明</font><font face="Arial" size="3">Owned</font><font
face="宋体" lang="ZH-CN" size="3">对象域</font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">拥有的每一个对象必须有对象域的声明,该域在部件存在时总指向</font><font
face="Arial" size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象。通常,部件在</font><font
face="Arial" size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">中创建它,在</font><font
face="Arial" size="3">destructor</font><font face="宋体" lang="ZH-CN" size="3">中撤消它。</font><font
face="Arial" size="3"></p>
<p>Owned</font><font face="宋体" lang="ZH-CN" size="3">对象的域总是定义为私有的,如果要使用户或其它部件访问该域,通常要提供访问属性。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">下面的代码声明了</font><font
face="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">的对象域:</p>
<p> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TSampleShape=class(TGraphicControl)</p>
<p>private</p>
<p>FPen: TPen;</p>
<p>FBrush: TBrush;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑵</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">声明访问属性</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">可以通过声明与</font><font
face="Arial" size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象相同类型的属性来提供对</font><font
face="Arial" size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象的访问能力。这给使用部件的开发者提供在设计时或运行时访问对象的途径。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">下面给</font><font face="Arial"
size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制提供了访问</font><font
face="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">的方法</p>
<p> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TSampleShape=class(TGraphicControl)</p>
<p>private</p>
<p>procedure SetBrush(Value: TBrush);</p>
<p>procedure SetPen(Value: TPen);</p>
<p>published</p>
<p>property Brush: TBrush read FBrush write SetBrush;</p>
<p>property Pen: TPen read FPen write SetPen;</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">然后在库单元的</font><font
face="Arial" size="3">implementation</font><font face="宋体" lang="ZH-CN" size="3">部分写</font><font
face="Arial" size="3">SetBrush</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">SetPen</font><font face="宋体" lang="ZH-CN" size="3">方法:</p>
<p> </font><font face="Arial" size="3"></p>
<p>procedure TSampleShape.SetBrush(Value: TBrush);</p>
<p>begin</p>
<p>FBrush.Assign(Value);</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>procedure TSampleShape.SetPen(Value: TPen);</p>
<p>begin</p>
<p>FPen.Assign(Value);</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">⑶</font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">初始化</font><font face="Arial"
size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">部件中增加了的新对象,必须在部件</font><font
face="Arial" size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">中建立,这样用户才能在运行时与对象交互。相应地,部件的</font><font
face="Arial" size="3">destructor</font><font face="宋体" lang="ZH-CN" size="3">必须在撤消自身之前撤消</font><font
face="Arial" size="3">Owned</font><font face="宋体" lang="ZH-CN" size="3">对象。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">因为</font><font face="Arial"
size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制中加入了</font><font
face="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">对象,因此,要在</font><font
face="Arial" size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">中初始化它们,在</font><font
face="Arial" size="3">destructor</font><font face="宋体" lang="ZH-CN" size="3">中撤消它们。</font><font
face="Arial" size="3"></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -