ProgressBar 实现自定义显示进度值
来源:互联网 发布:安居客经纪人端口 编辑:程序博客网 时间:2024/04/27 05:05
Q: http://community.csdn.net/Expert/TopicView.asp?id=3116178
VCL类库中的TProgressBar是对Common Control的封装。所以如果想要一个自定义进度值显示的ProgressBar的话,虽然可以自己从TCustomControl继承一个完全自行实现,SubClass子类化ProgressBar的WindowProc也不失为一个可取的方法。
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
FOldWndProc = ProgressBar1->WindowProc;
ProgressBar1->WindowProc = ProgressBarWndProc;
ProgressBar1->Smooth = true;
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
ProgressBar1->WindowProc = FOldWndProc;
FOldWndProc = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ProgressBarWndProc(TMessage& Message)
{
TProgressBar* ProgressBar = ProgressBar1;
TCanvas* Canvas;
Graphics::TBitmap* B;
switch(Message.Msg)
{
case WM_PAINT:
{
Canvas = new TCanvas;
try
{
Canvas->Handle = GetDC(ProgressBar->Handle);
try
{
// erase background
TRect R = ProgressBar->ClientRect;
Canvas->Brush->Color = this->Color;
Canvas->FillRect(R);
FOldWndProc(Message);
// draw text
B = new Graphics::TBitmap;
try
{
B->Width = R.Right - R.Left;
B->Height = R.Bottom - R.Top;
B->Canvas->Brush->Color = clBlack;
B->Canvas->FillRect(R);
B->Canvas->Font->Style = TFontStyles()<
B->Canvas->Font->Color = clWhite;
AnsiString Str;
Str.sprintf("%dk/%dk", ProgressBar->Position , ProgressBar->Max);
DrawText(B->Canvas->Handle, Str.c_str(), -1, &R, DT_NOCLIP | DT_CENTER);
BitBlt(Canvas->Handle, 0, 0, B->Width, B->Height, B->Canvas->Handle, 0, 0, SRCINVERT);
}
__finally
{
delete B;
}
}
__finally
{
ReleaseDC(ProgressBar->Handle, Canvas->Handle);
}
}
__finally
{
delete Canvas;
}
}
break;
default:
FOldWndProc(Message);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ProgressBar1->Position = 0;
while(ProgressBar1->Position<100)
{
++ ProgressBar1->Position ;
Sleep(50);
Application->ProcessMessages();
}
}
- ProgressBar 实现自定义显示进度值
- 【android】解决自定义样式progressbar的进度显示问题
- ProgressBar使用自定义drawable时,进度显示不全的问题
- Android使用ProgressBar、自定义Notification显示文件下载进度
- android中实现PopupWindow跟随ProgressBar进度显示
- android progressBar 自定义 进度颜色
- 自定义ProgressBar的进度色彩
- 在ProgressBar显示文本进度
- ProgressBar---进度圈的显示
- 自定义View实现图片上传进度显示
- 自定义ProgressBar(背景,前景,进度图片)
- Android 自定义ProgressBar--进度自己设置图片
- 自定义ProgressBar---跟随进度的 Popwindow
- 自定义ProgressBar带进度数字效果
- 自定义View之带进度百分比ProgressBar
- android 自定义ProgressBar 文字跟随进度效果
- FLEX进度条ProgressBar不显示进度
- C# winform progressbar +label显示进度
- 开山第一篇
- Object-Relational Features of Oracle
- 没有人可以改变我的命运,除了我自己
- 用PHP函数解决SQL injection 作者:lm92 来源:CSDN
- 怎么去做
- ProgressBar 实现自定义显示进度值
- 二次开发MAP2000是遇到的问题
- 和我一起学习Linux编程(三)------------------工具篇
- 为什么我拒绝流行!
- 实例说明java中覆盖静态方法和非静态方法的不同
- 如果你在寻找投资人……
- Project Dairy -2
- 在这做个记号,这个blog系统做的并不好,但是比较快
- Happy birthday!