📄 050.htm
字号:
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">Shape</font><fontface="宋体" lang="ZH-CN" size="3">控制的</font><font face="Arial" size="3">constructor</font><fontface="宋体" lang="ZH-CN" size="3">中创建</font><font face="Arial" size="3">Pen</font><fontface="宋体" lang="ZH-CN" size="3">和</font><font face="Arial" size="3">Brush</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>FPen := TPen.Create;</p><p>FBrush := TBrush.Create;</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><fontface="Arial" size="3">destructor</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>construstor.Create(Aowner: TComponent); override;</p><p>destructor.destroy; 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><fontface="Arial" size="3">destructor</p><p></font><font size="3"> </font><font face="Arial" size="3"></p><p>destructor TSampleShape.destroy;</p><p>begin</p><p>FPen.Free;</p><p>FBrush.Free;</p><p>inherited destroy;</p><p>end;</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><fontface="宋体" 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">对象的最后一步是处理</font><fontface="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><fontface="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">发生改变时对</font><fontface="Arial" size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制的重画问题。</font><fontface="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><fontface="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">对象都有</font><fontface="Arial" size="3">OnChange</font><font face="宋体" lang="ZH-CN" size="3">事件,因此能够在</font><fontface="Arial" size="3">Shape</font><font face="宋体" lang="ZH-CN" size="3">控制中声明</font><fontface="Arial" size="3">OnChange</font><font face="宋体" lang="ZH-CN" size="3">事件指向的事件处理过程。</font><fontface="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><fontface="Arial" size="3">constructor</font><font face="宋体" lang="ZH-CN" size="3">以使</font><fontface="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><fontface="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>published</p><p>procdeure StyleChanged(Sender: TObject);</p><p>end;</p><p></font><font size="3"> </font><font face="Arial" size="3"></p><p>implemintation</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>Fpen := TPen.Create;</p><p>FPen.OnChange := StyleChanged;</p><p>Fbrush := TBrush.Create;</p><p>FBrush.OnChange := StyleChanged;</p><p>end;</p><p></font><font size="3"> </font><font face="Arial" size="3"></p><p>procedure TSampleShape.StyleChanged(Sender: TObject);</p><p>begin</p><p>Invalidate(true);</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><fontface="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">或</font><fontface="Arial" size="3">Brush</font><font face="宋体" lang="ZH-CN" size="3">的改变。</p><p> </font><font face="Arial" size="3"></p><p>4. </font><font face="宋体" lang="ZH-CN" size="3">怎样画部件图形</font><fontface="Arial" size="3"></p><p></font><font face="宋体" lang="ZH-CN" size="3">图形控制基本要素是在屏幕上画图形的方法。抽象类</font><fontface="Arial" size="3">TGraphicControl</font><font face="宋体" lang="ZH-CN" size="3">定义了名为</font><fontface="Arial" size="3">Paint</font><font face="宋体" lang="ZH-CN" size="3">的虚方法,可以覆盖该方法来画所要的图形。</font><fontface="Arial" size="3"></p><p>Shape</font><font face="宋体" lang="ZH-CN" size="3">控制的</font><fontface="Arial" size="3">paint</font><font face="宋体" lang="ZH-CN" size="3">方法需要做:</font><fontface="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><fontface="Arial" size="3">Pen</font><font face="宋体" lang="ZH-CN" size="3">和</font><fontface="Arial" size="3">Brush</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><fontface="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><fontface="Arial" size="3">Width</font><font face="宋体" lang="ZH-CN" size="3">和</font><fontface="Arial" size="3">Height</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">paint</font><font face="宋体" lang="ZH-CN" size="3">方法需要两步:</font><fontface="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><fontface="Arial" size="3">Paint</font><font face="宋体" lang="ZH-CN" size="3">方法的声明</font><fontface="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">implementation</font><fontface="宋体" lang="ZH-CN" size="3">部分写</font><font face="Arial" size="3">Paint</font><fontface="宋体" 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">Paint</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>protected</p><p>procedure Paint; 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><fontface="Arial" size="3">Paint</font><font face="宋体" lang="ZH-CN" size="3">的实现:</p><p> </font><font face="Arial" size="3"></p><p>procedure TSampleShape.Paint;</p><p>begin</p><p>with Canvas do</p><p>begin</p><p>Pen := FPen;</p><p>Brush := FBrush;</p><p>case FShape of</p><p>sstRectangle, sstSquare :</p><p>Rectangle(0, 0, Width, Height);</p><p>sstRoundRect, sstRoundSquare: </p><p>RoundRect(0, 0, Width, Height, Width div 4, Height div 4);</p><p>sstCircle, sstEllipse :</p><p>Ellipse(0, 0, Width, Height);</p><p>end;</p><p>end;</p><p>end;</font><font size="3"> </font><font face="Arial" size="3"></p><p></font><font face="宋体" lang="ZH-CN" size="3">无论任何控制需要更新图形时,</font><fontface="Arial" size="3">Paint</font><font face="宋体" lang="ZH-CN" size="3">就被调用。当控制第一次出现,或者当控制前面的窗口消失时,</font><fontface="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">会通知控制画自己。也可以通过调用</font><fontface="Arial" size="3">Invalidate</font><font face="宋体" lang="ZH-CN" size="3">方法强制重画,就象</font><fontface="Arial" size="3">StyleChanged</font><font face="宋体" lang="ZH-CN" size="3">方法所做的那样。</font></p><hr width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%" ><strong><A HREF="051.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="049.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -