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

ComponentState专门用来表示属性的状态!csdesigning就表示是设计器状态,我这里表示的是在设计器状态的时候就不打开时钟了,不然会在设计的时候也看到界面的动画效果了!好了,到目前为止,这个简单的动画模拟显示效果的控件就基本完成了!当然,还是有很多情况没考虑到的,比如说图片帧源的方向问题,取图是横向还是纵向,都没做考虑,这个扩充就留给大家自己来完成吧!所有代码下载

 

组件开发教程指南目录


本文转自 不得闲 博客园博客,原文链接:http://www.cnblogs.com/DxSoft/archive/2010/05/16/1736905.html   ,如需转载请自行联系原作者


相关文章
|
3月前
|
C# UED 开发者
WPF打印功能实现秘籍:从页面到纸张,带你玩转WPF打印技术大揭秘!
【8月更文挑战第31天】在WPF应用开发中,打印功能至关重要,不仅能提升用户体验,还增强了应用的实用性。本文介绍WPF打印的基础概念与实现方法,涵盖页面元素打印、打印机设置及打印预览。通过具体案例,展示了如何利用`PrintDialog`和`PrintDocument`控件添加打印支持,并使用`PrinterSettings`类进行配置,最后通过`PrintPreviewWindow`实现打印预览功能。
316 0
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
313 0
|
人工智能 搜索推荐 C#
Photoshop和WPF双剑配合,打造炫酷个性的进度条控件
结合Photoshop和WPF,共同创建一个矢量的个性化进度条。
550 0
Photoshop和WPF双剑配合,打造炫酷个性的进度条控件
|
开发工具 C语言
Qt编写自定义控件40-导航进度条
一、前言 导航进度条控件,其实就是支付宝、京东、淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单流程样式/淘宝订单流程样式/支付宝订单流程样式,可以动态切换样式,控件自适应任何分辨率,可以自由调整自身大小以适应分辨率的改变,总步骤以及当前步骤都是自动计算占用区域比例,直接提供接口设置步骤对应的文字信息等,接口非常友好。
1333 0
|
C#
WPF一步步实现完全无边框自定义Window(附源码)
原文:WPF一步步实现完全无边框自定义Window(附源码)    在我们设计一个软件的时候,有很多时候我们需要按照美工的设计来重新设计整个版面,这当然包括主窗体,因为WPF为我们提供了强大的模板的特性,这就为我们自定义各种空间提供了可能性,这篇博客主要用来介绍如何自定义自己的Window,在介绍整个写作思路之前,我们来看看最终的效果。
1303 0