天天看點

Delphi 元件開發教程指南(7)繼續模拟動畫顯示控件

   上一次,我講解了如何實作一個模拟顯示動畫效果的控件,但是我沒有給出所有代碼,隻是給了一些關鍵代碼,不曉得,有沒有人将代碼完全補全的,同時也留下了一個問題說,如何通過另一種方式來實作這個動畫的現實效果!不曉得有人實作出來了沒!現在,我就來揭露留下的問題。揭露之前,先回複有人提出的問題,說我說要講元件解除安裝的,咋沒講到!還真是忘記了!因為這個解除安裝很簡單!打開Component菜單下的Install Packages那個菜單會出現一個Delphi的安裝了的所有的包清單,在裡面找到我們之前建立的那個安裝包,然後點選Remove删除,就完事了!具體操作如下:

這個圖中,我删除了我們安裝的控件,然後再看元件清單,安裝的控件就沒有了!這就是解除安裝控件的完整操作了!很簡單吧!

    現在,正式進入主題!在上回,我給出了一種實作方式,同時,我也說還有另外一種實作方式。今天講的就是通過另一種方式來實作這個動畫顯示效果!其實這個方式也就是個大同小異,思路一樣,隻是中間的某些過程不同,上次,我是用了一個ImageList來擷取的每一幀圖檔,那個比較簡單,而這回,我所說的方式,就是給定一整張圖檔,然後将圖檔切片,根據指定的幀數來獲得不同圖檔區域的現實資訊,然後再繪制到界面上呈現給使用者。那麼和前次的比較,唯一的不同,也就是那個每一幀圖檔的那個來源不同,以前是來源于ImageList,而現在我是要來源于一張圖檔!那麼,先來分析一下,首先要來源一張圖檔,是以,肯定需要向外面分發一個屬性,比如我設定為FrameSource,表示幀源

Property FrameSource: TBitmap read FFrameSource write SetFrameSource;

然後再想一想,當這個圖檔改變的時候,界面肯定要變化的,是以我們需要在設定圖檔的時候,通知界面重新整理,這個容易在

FrameSource.OnChange事件中調用一下重新整理Invalidate就好了。然後再思考一下,指定了幀源,那麼如何來區分這個幀源呢(也就是怎麼對這個圖檔進行切片,以獲得每一幀圖檔!)是以,還需要一個屬性FrameCount,用來指定幀數,然後通過這個幀數對每一幀圖的區域進行标記。同時,這個FrameCount改變的時候也是需要更新的!指定了這個之後,我們就能順利的取得每一幀的圖檔了,這個是很容易的,Delphi為我們提供了一個Canvas的畫布屬性,我們可以通過這個畫布來獲得畫布上的某一個區域的顯示資訊,是以我們擷取圖檔就可以使用Canvas.CopyRect來擷取某一塊區域了。之後的操作就和上一次講的一樣,繪制到前台顯示給使用者就好了。這個分析就完全完成了,現在給出完整代碼!

代碼

這次我在代碼中,有幾個新玩意在裡面,一個是我聲明FrameCount屬性的時候寫法為

property FrameCount: Integer read FFrameCount write SetFrameCount default 1;

後面跟了一個default 1,這個default表示為在IDE屬性編輯器中預設會顯示的内容為1,也就是說一開始不會用粗體顯示的,然後還有一個新玩意是

procedure TDxAnimateControl.SetActive(const Value: Boolean);

這個設定中,我用了一個if not (csDesigning in ComponentState) then

<a href="http://www.cnblogs.com/DxSoft/archive/2010/04/26/1721060.html">元件開發教程指南目錄</a>

本文轉自 不得閑 部落格園部落格,原文連結:http://www.cnblogs.com/DxSoft/archive/2010/05/16/1736905.html   ,如需轉載請自行聯系原作者