?? 050.htm
字號:
<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><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">Pen</font><font
face="宋體" 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><font
face="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><font
face="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><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">對象的最后一步是處理</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">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">OnChange</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">OnChange</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">constructor</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>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><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>4. </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">TGraphicControl</font><font face="宋體" lang="ZH-CN" size="3">定義了名為</font><font
face="Arial" size="3">Paint</font><font face="宋體" lang="ZH-CN" size="3">的虛方法,可以覆蓋該方法來畫所要的圖形。</font><font
face="Arial" size="3"></p>
<p>Shape</font><font face="宋體" lang="ZH-CN" size="3">控制的</font><font
face="Arial" size="3">paint</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">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">
</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">Width</font><font face="宋體" lang="ZH-CN" size="3">和</font><font
face="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><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">Paint</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">implementation</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></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><font
face="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><font
face="Arial" size="3">Paint</font><font face="宋體" lang="ZH-CN" size="3">就被調用。當控制第一次出現,或者當控制前面的窗口消失時,</font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">會通知控制畫自己。也可以通過調用</font><font
face="Arial" size="3">Invalidate</font><font face="宋體" lang="ZH-CN" size="3">方法強制重畫,就象</font><font
face="Arial" size="3">StyleChanged</font><font face="宋體" lang="ZH-CN" size="3">方法所做的那樣。</font></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" background="bg.gif"><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>
<A HREF="../../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -