ProgressBar 实现自定义显示进度值

原创 2004年06月23日 22:45:00

Q: http://community.csdn.net/Expert/TopicView.asp?id=3116178

VCL类库中的TProgressBar是对Common Control的封装。所以如果想要一个自定义进度值显示的ProgressBar的话,虽然可以自己从TCustomControl继承一个完全自行实现,SubClass子类化ProgressBar的WindowProc也不失为一个可取的方法。

#include <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#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()<<?xml:namespace prefix = fsBold;

             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();

  }

}

 

;

【android】解决自定义样式progressbar的进度显示问题

1. 在一个Layout中添加的自定义的ProgressBar: [xml] view plaincopyprint? ProgressBar    ...
  • u011494050
  • u011494050
  • 2014年12月12日 16:03
  • 2136

Android使用ProgressBar、自定义Notification显示文件下载进度

好久没写安卓了,今天忙着做这个效果出来,本来打算去网上copy一段赶工,结果发现翻来覆去就那几篇文章,还是自己写一篇吧。         先写自定义布局bestinfo_download_notifi...
  • qq_29227939
  • qq_29227939
  • 2016年09月01日 21:53
  • 1268

ProgressBar进度条的实现

自定义进度条 Android中progressbar的使用
  • chenwewei
  • chenwewei
  • 2016年07月31日 21:48
  • 1376

自定义View之带进度百分比ProgressBar

先上一张我自定义所实现的效果图
  • zrf1335348191
  • zrf1335348191
  • 2016年06月03日 17:42
  • 10490

WPF ProgressBar显示进度(三)

然后我们采用MVVM来实现进度打的显示
  • sunny906
  • sunny906
  • 2014年06月25日 11:43
  • 2366

Android NumberProgressBar:动态移动显示百分比进度的进度条

 Android NumberProgressBar:动态移动显示百分比进度的进度条 NumberProgressBar是github上一个开源项目,其项目主页是:https://gith...
  • zhangphil
  • zhangphil
  • 2016年06月27日 10:56
  • 3808

自定义进度条PictureProgressBar——从开发到开源发布全过程

出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:https://bintray.com/yanzhikaijky...
  • totond
  • totond
  • 2017年05月17日 11:10
  • 5336

Android ProgressBar高级自定义水平/圆形进度条

ProgressBar继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,其中AbsSeekBar的子类有SeekBar和RatingBar,可见这二...
  • a704755096
  • a704755096
  • 2016年02月26日 10:59
  • 2052

使用ProgressBar实现进度条

一、ProgressBar的关键属性 android:max = “100” ——最大显示进度 android:progress = “50” ——第一显示进度 android:secondar...
  • kyoulijian
  • kyoulijian
  • 2016年01月11日 14:20
  • 1152

WPF ProgressBar显示进度(一)

ProgressBar显示进度的做法一般采用线程来实现
  • sunny906
  • sunny906
  • 2014年06月25日 11:11
  • 4939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ProgressBar 实现自定义显示进度值
举报原因:
原因补充:

(最多只允许输入30个字)