有3D效果的进度条
// The Unofficial Newsletter of Delphi Users - Issue #12 - February 23rd, 1996
unit Percnt3d;
(*
TPercnt3D by Lars Posthuma; December 26, 1995.
Copyright 1995, Lars Posthuma.
All rights reserved.
This source code may be freely distributed and used. The author
accepts no responsibility for its use or misuse.
No warranties whatsoever are offered for this unit.
If you make any changes to this source code please inform me at:
LPosthuma@COL.IB.COM.
*)
interface
uses
WinTypes, WinProcs, Classes, Graphics, Controls, ExtCtrls, Forms, SysUtils, Dialogs;
type
TPercnt3DOrientation = (BarHorizontal,BarVertical);
TPercnt3D = class(TCustomPanel)
private
{ Private declarations }
fProgress : Integer;
fMinValue : Integer;
fMaxValue : Integer;
fShowText : Boolean;
fOrientation : TPercnt3DOrientation;
fHeight : Integer;
fWidth : Integer;
fValueChange : TNotifyEvent;
procedure SetBounds(Left,Top,fWidth,fHeight: integer); override;
procedure SetHeight(value: Integer); virtual;
procedure SetWidth(value: Integer); virtual;
procedure SetMaxValue(value: Integer); virtual;
procedure SetMinValue(value: Integer); virtual;
procedure SetProgress(value: Integer); virtual;
procedure SetOrientation(value: TPercnt3DOrientation);
procedure SetShowText(value: Boolean);
function GetPercentDone: Longint;
protected
{ Protected declarations }
procedure Paint; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddProgress(Value: Integer);
property PercentDone: Longint read GetPercentDone;
procedure SetMinMaxValue(Minvalue,MaxValue: Integer);
published
{ Published declarations }
property Align;
property Cursor;
property Color default clBtnFace;
property Enabled;
property Font;
property Height default ;
property Width default ;
property MaxValue: Integer
read fMaxValue write SetMaxValue
default ;
property MinValue: Integer
read fMinValue write SetMinValue
default ;
property Progress: Integer
read fProgress write SetProgress
default ;
property ShowText: Boolean
read fShowText write SetShowText
default True;
property Orientation: TPercnt3DOrientation {}
read fOrientation write SetOrientation
default BarHorizontal;
property OnValueChange: TNotifyEvent {Userdefined Method}
read fValueChange write fValueChange;
property Visible;
property Hint;
property ParentColor;
property ParentFont;
property ParentShowHint;
property ShowHint;
property Tag;
property OnClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;
procedure Register;
implementation
constructor TPercnt3D.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Color := clBtnFace; {Set initial (default) values}
Height := ;
Width := ;
fOrientation := BarHorizontal;
Font.Color := clBlue;
Caption := ' ';
fMinValue := ;
fMaxValue := ;
fProgress := ;
fShowText := True;
end;
destructor TPercnt3D.Destroy;
begin
inherited Destroy
end;
procedure TPercnt3D.SetHeight(value: integer);
begin
if value <> fHeight then begin
fHeight:= value;
SetBounds(Left,Top,Width,fHeight);
Invalidate;
end
end;
procedure TPercnt3D.SetWidth(value: integer);
begin
if value <> fWidth then begin
fWidth:= value;
SetBounds(Left,Top,fWidth,Height);
Invalidate;
end
end;
procedure TPercnt3D.SetBounds(Left,Top,fWidth,fHeight : integer);
Procedure SwapWH(Var Width, Height: Integer);
Var
TmpInt: Integer;
begin
TmpInt:= Width;
Width := Height;
Height:= TmpInt;
end;
Procedure SetMinDims(Var XValue,YValue: Integer; XValueMin,YValueMin: Integer);
begin
if XValue < XValueMin
then XValue:= XValueMin;
if YValue < YValueMin
then YValue:= YValueMin;
end;
begin
case fOrientation of
BarHorizontal: begin
if fHeight > fWidth
then SwapWH(fWidth,fHeight);
SetMinDims(fWidth,fHeight,,);
end;
BarVertical : begin
if fWidth > fHeight
then SwapWH(fWidth,fHeight);
SetMinDims(fWidth,fHeight,,);
end;
end;
inherited SetBounds(Left,Top,fWidth,fHeight);
end;
procedure TPercnt3D.SetOrientation(value : TPercnt3DOrientation);
Var
x: Integer;
begin
if value <> fOrientation then begin
fOrientation:= value;
SetBounds(Left,Top,Height,Width); {Swap Width/Height}
Invalidate;
end
end;
procedure TPercnt3D.SetMaxValue(value: integer);
begin
if value <> fMaxValue then begin
fMaxValue:= value;
Invalidate;
end
end;
procedure TPercnt3D.SetMinValue(value: integer);
begin
if value <> fMinValue then begin
fMinValue:= value;
Invalidate;
end
end;
procedure TPercnt3D.SetMinMaxValue(MinValue, MaxValue: integer);
begin
fMinValue:= MinValue;
fMaxValue:= MaxValue;
fProgress:= ;
Repaint; { Always Repaint }
end;
{ This function solves for x in the equation "x is y% of z". }
function SolveForX(Y, Z: Longint): Integer;
begin
SolveForX:= Trunc( Z * (Y * 0.01) );
end;
{ This function solves for y in the equation "x is y% of z". }
function SolveForY(X, Z: Longint): Integer;
begin
if Z =
then SolveForY:=
else SolveForY:= Trunc( (X * ) / Z );
end;
function TPercnt3D.GetPercentDone: Longint;
begin
GetPercentDone:= SolveForY(fProgress - fMinValue, fMaxValue - fMinValue);
end;
procedure TPercnt3D.Paint;
var
TheImage: TBitmap;
FillSize: Longint;
W,H,X,Y : Integer;
TheText : string;
begin
with Canvas do begin
TheImage:= TBitmap.Create;
try
TheImage.Height:= Height;
TheImage.Width := Width;
with TheImage.Canvas do begin
Brush.Color:= Color;
with ClientRect do begin
{ Paint the background }
{ Select Black Pen to outline Window }
Pen.Style:= psSolid;
Pen.Width:= ;
Pen.Color:= clBlack;
{ Bounding rectangle in black }
Rectangle(Left,Top,Right,Bottom);
{ Draw the inner bevel }
Pen.Color:= clGray;
Rectangle(Left + , Top + , Right - , Bottom - );
Pen.Color:= clWhite;
MoveTo(Left + , Bottom - );
LineTo(Right - , Bottom - );
LineTo(Right - , Top + );
{ Draw the 3D Percent stuff }
{ Outline the Percent Bar in black }
Pen.Color:= clBlack;
if Orientation = BarHorizontal
then w:= Right - Left { + 1; }
else w:= Bottom - Top;
FillSize:= SolveForX(PercentDone, W);
if FillSize > then begin
case orientation of
BarHorizontal: begin
Rectangle(Left,Top,FillSize,Bottom);
{ Draw the 3D Percent stuff }
{ UpperRight, LowerRight, LowerLeft }
Pen.Color:= clGray;
Pen.Width:= ;
MoveTo(FillSize - , Top + );
LineTo(FillSize - , Bottom - );
LineTo(Left + , Bottom - );
{ LowerLeft, UpperLeft, UpperRight }
Pen.Color:= clWhite;
Pen.Width:= ;
MoveTo(Left + , Bottom - );
LineTo(Left + , Top + );
LineTo(FillSize - , Top + );
end;
BarVertical: begin
FillSize:= Height - FillSize;
Rectangle(Left,FillSize,Right,Bottom);
{ Draw the 3D Percent stuff }
{ LowerLeft, UpperLeft, UpperRight }
Pen.Color:= clGray;
Pen.Width:= ;
MoveTo(Left + , FillSize + );
LineTo(Right - , FillSize + );
LineTo(Right - , Bottom - );
{ UpperRight, LowerRight, LowerLeft }
Pen.Color:= clWhite;
Pen.Width:= ;
MoveTo(Left + ,FillSize + );
LineTo(Left + ,Bottom - );
LineTo(Right - ,Bottom - );
end;
end;
end;
if ShowText = True then begin
Brush.Style:= bsClear;
Font := Self.Font;
Font.Color := Self.Font.Color;
TheText:= Format('%d%%', [PercentDone]);
X:= (Right - Left + - TextWidth(TheText)) div ;
Y:= (Bottom - Top + - TextHeight(TheText)) div ;
TextRect(ClientRect, X, Y, TheText);
end;
end;
end;
Canvas.CopyMode:= cmSrcCopy;
Canvas.Draw(,,TheImage);
finally
TheImage.Destroy;
end;
end;
end;
procedure TPercnt3D.SetProgress(value: Integer);
begin
if (fProgress <> value) and (value >= fMinValue) and (value <= fMaxValue) then begin
fProgress:= value;
Invalidate;
end;
end;
procedure TPercnt3D.AddProgress(value: Integer);
begin
Progress:= fProgress + value;
Refresh;
end;
procedure TPercnt3D.SetShowText(value: Boolean);
begin
if value <> fShowText then begin
fShowText:= value;
Refresh;
end;
end;
procedure Register;
begin
RegisterComponents('DDG', [TPercnt3D]);
end;
end.
有3D效果的进度条的更多相关文章
- 纯CSS炫酷3D旋转立方体进度条特效
在网站制作中,提高用户体验度是一项非常重要的任务.一个创意设计不但能吸引用户的眼球,还能大大的提高用户的体验.在这篇文章中,我们将大胆的将前面所学的3D立方体和进度条结合起来,制作一款纯CSS3的3D ...
- [WPF]有滑动效果的进度条
先给各位看看效果,可能不太完美,不过效果还是可行的. 我觉得,可能直接放个GIF图片上去会更好. 我这个不是用图片,而是用DrawingBrush画出来的.接着重做ProgressBar控件的模板,把 ...
- CSS3 中的按钮效果与进度条
效果如图
- ReactJS尝鲜:实现tab页切换和菜单栏切换和手风琴切换效果,进度条效果
前沿 对于React, 去年就有耳闻, 挺不想学的, 前端那么多东西, 学了一个框架又有新框架要学
- Android 三种方式实现自定义圆形页面加载中效果的进度条
转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...
- Android ProgressBar 进度条荧光效果
http://blog.csdn.net/ywtcy/article/details/7878289 这段时间做项目,产品需求,进度条要做一个荧光效果,类似于Android4.0 浏览器中进度条那种样 ...
- 使用原生JS+CSS或HTML5实现简单的进度条和滑动条效果(精问)
使用原生JS+CSS或HTML5实现简单的进度条和滑动条效果(精问) 一.总结 一句话总结:进度条动画效果用animation,自动效果用setIntelval 二.使用原生JS+CSS或HTML5实 ...
- BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)
上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前 ...
- android圆形进度条ProgressBar颜色设置
花样android Progressbar http://www.eoeandroid.com/thread-1081-1-1.html http://www.cnblogs.com/xirihanl ...
随机推荐
- 微信小程序篇(微信小程序的支付)
微信小程序的支付和微信公众号的支付是类似的,对比起来还比公众号支付简单了一些,我们只需要调用微信的统一下单接口获取prepay_id之后我们在调用微信的支付即可. 今天我们来封装一般node的支付接口 ...
- 驳《编码规范是技术上的遮羞布》自由发挥==摆脱编码规范?X
引子: 看了一坨文字<编码规范是技术上的遮羞布>,很是上火,见人见智,本是无可厚非,却深感误人子弟者众.原文观点做一个简单的提炼: 1.扔掉编码规范吧,让程序员自由发挥,你会得到更多的好处 ...
- springMVC学习(9)-全局异常处理
一.异常处理思路: 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的da ...
- js在html文件中的解析顺序
我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页面中head部分放置<scri ...
- OSPF两种组播地址的区别和联系
1.点到点网络: 是连接单独的一对路由器的网络,点到点网络上的有效邻居总是可以形成邻接关系的,在这种网络上,OSPF包的目标地址使用的是224.0.0.52.广播型网络, 比如以太网,Token Ri ...
- OTL技术应用
什么是OTL:OTL 是 Oracle, Odbc and DB2-CLI TemplateLibrary 的缩写,是一个操控关系数据库的C++模板库,它目前几乎支持所有的当前各种主流数据库,如下表所 ...
- DRL前沿之:Benchmarking Deep Reinforcement Learning for Continuous Control
1 前言 Deep Reinforcement Learning可以说是当前深度学习领域最前沿的研究方向,研究的目标即让机器人具备决策及运动控制能力.话说人类创造的机器灵活性还远远低于某些低等生物,比 ...
- Tornado之链接数据库
5 数据库 知识点 torndb安装 连接初始化 执行语句 execute execute_rowcount 查询语句 get query 5.1 数据库 与Django框架相比,Tornado没有自 ...
- 18.scrapy中selector的用法
Selector是一个独立的模块. Selector主要是与scrapy结合使用的. 开启Scrapy shell: 1.打开命令行cmd 2.scrapy shell http://doc.scra ...
- linux 基本。。
一. 将磁盘分区挂载为只读 这一步很重要,并且在误删除文件后应尽快将磁盘挂载为只读.越早进行,恢复的成功机率就越大. 1. 查看被删除文件位于哪个分区 [root@localhost ~]# mo ...