Controles Customizados – Parte II

Desenvolvendo User Controls

UserControls são de fácil desenvolvimento, podemos aproveitar os controles existentes do .NET Framework, nesse artigo irei sincronizar um ProgressBar com um controle Label, ou seja, todo o processo feito manualmente quando queremos sincronizar estes dois controles o User Control mostrado nesse artigo fará automático, mostrará no Label quantos porcento está representado no controle ProgressBar, o desenvolvimento de User Controls nos da uma grande facilidade para customização de nossas aplicações, nesse exemplo criarei um User Control que será usado dentro de uma única aplicação.

Veja também a primeira parte desse artigo em //www.devmedia.com.br/articles/visualizacomponente2.asp?comp=1891 que fala sobre a introdução aos Controles Customizados.

Criando o User Control

Crie uma Windows Forms Application – Delphi .Net, salve-a, agora vamos criar um User Control que será usado no nosso projeto, em File|New|Other Delphi for .Net Projects selecione User Control for Windows Forms, salve-o com o nome de uCDProgressBar e altere o nome do User Control para CDProgressBar.

UserControl é muito semelhante ao Forms do .NET no qual podemos arrastar os controles, nesse caso arrastaremos um ProgressBar e um Label, veja a Tabela 1 e Tabela 2 que mostra as propriedades alteradas dos controles respectivamente.

Propriedade

Valor

Name

pbProgresso

Anchor

Top, Left, Right

Tabela 1. Propriedades alteradas do controle ProgressBar.

Propriedade

Valor

Name

lbProgresso

Text

0% Concluído.

TextAlign

MiddleCenter

Anchor

Top, Left, Right

Tabela 2. Propriedades alteradas do controle Label.

Depois de feito às alterações nos controles do User Control ele deve ficar parecido com o da Figura 1.

 

 

Figura 1. User Control CDProgressBar em modo de desenvolvimento

Agora vamos fazer as implementações dos atributos públicos e dos métodos que o CDProgressBar dispõe, acompanhe a Figura 2 que demonstra o modelo da classe CDProgressBar e a Tabela 3 com a descrição de cada atributo e método.

 

 

Figura 2. Modelo da Classe CDProgressBar pertencendo ao User Control.

 

Atributo

Tipo

Descrição

Visibilidade

Value

integer

Valor corrente do ProgressBar.

Publica(public)

Maximun

integer

Valor máximo(limite) do ProgressBar.

Publica(public)

Minimum

integer

Valor mínimo do ProgressBar.

Publica(public)

Value

integer

Valor corrente do ProgressBar.

Publica(public)

Step

integer

Salto do ProgressBar.

Publica(public)

 

Método

Descrição

Visibilidade

UpLabel

Método que atualiza o Label quando muda o valor da propriedade Value.

Privada (private)

Tabela 3. Descrição dos Atributos e Métodos da classe CDProgressBar.

Implementando o  User Control

Lembre-se que os atributos(Value, Maximun, Minimum e Step) do User Control CDProgressBar está ligada com o controle ProgressBar então quando é atualizado estes atributos automaticamente é atualizado os mesmo atributos do ProgressBar e sucessivamente o Label que mostra a porcentagem concluída desse progresso, veja na Listagem 1 a implementação dos atributos e método do CDProgressBar.

 

Listagem 1. Implementação dos Atributos e Método do User Control CDProgressBar

unit uCDProgressBar;

 

interface

 

uses

  System.Drawing, System.Collections, System.ComponentModel,

  System.Windows.Forms, System.Data;

 

type

  CDProgressBar = class(System.Windows.Forms.UserControl)

  {$REGION 'Designer Managed Code'}

  strict private

    Components: System.ComponentModel.Container;

    pbProgresso: System.Windows.Forms.ProgressBar;

    lbProgresso: System.Windows.Forms.Label;

    procedure InitializeComponent;

  {$ENDREGION}

  strict protected

    procedure Dispose(Disposing: Boolean); override;

  private

    FValue : integer;

    FMaximun : integer;

    FMinimun : integer;

    FStep : Integer;

    procedure UpLabel;

  public

    constructor Create;

    function GetStep: integer;

    procedure SetStep(const Value: integer);

    function GetMaximun: integer;

    function GetMinimun: integer;

    procedure SetMaximun(const Value: integer);

    procedure SetMinimun(const Value: integer);

    function GetValue: integer;

    procedure SetValue(const Value: integer);

    property Value : integer read GetValue write SetValue;

    property Maximun : integer read GetMaximun write SetMaximun;

    property Minimun : integer read GetMinimun write SetMinimun;

    property Step : integer read GetStep write SetStep;

  end;

 

  [assembly: RuntimeRequiredAttribute(TypeOf(CDProgressBar))]

 

implementation

 

uses

  System.Globalization;

 

{$AUTOBOX ON}

 

{$REGION 'Windows Form Designer generated code'}

...

{$ENDREGION}

 

constructor CDProgressBar.Create;

begin

  inherited Create;

  InitializeComponent;

end;

 

procedure CDProgressBar.SetMaximun(const Value: integer);

begin

  FMaximun := Value;

  pbProgresso.Maximum := Value;

end;

 

procedure CDProgressBar.SetMinimun(const Value: integer);

begin

  FMinimun := Value;

  pbProgresso.Minimum := Value;

end;

 

procedure CDProgressBar.SetStep(const Value: integer);

begin

  FStep := Value;

 pbProgresso.Step := Value;

end;

 

procedure CDProgressBar.SetValue(const Value: integer);

begin

  FValue := Value;

  pbProgresso.Value := Value;

end;

 

procedure CDProgressBar.UpLabel;

begin

  lbProgresso.Text := Math.Round(Convert.ToDecimal((pbProgresso.Value * 100) / pbProgresso.Maximum)).ToString;

  lbProgresso.Text := lbProgresso.Text + '% Concluído';

end;

 

procedure CDProgressBar.Dispose(Disposing: Boolean);

begin

  if Disposing then

  begin

    if Components <> nil then

      Components.Dispose();

  end;

  inherited Dispose(Disposing);

end;

 

function CDProgressBar.GetMaximun: integer;

begin

  Result := FMaximun;

end;

 

function CDProgressBar.GetMinimun: integer;

begin

  Result := FMinimun;

end;

 

function CDProgressBar.GetStep: integer;

begin

  Result := FStep;

end;

 

function CDProgressBar.GetValue: integer;

begin

  Result := FValue;

  UpLabel;

end;

end.

 

Agora com a implementação dos atributos e métodos concluímos o User Control CDProgressBar, volte ao formulário do nosso Projeto Windows Forms, na Tool Bar localize o controle CDProgressBar o nosso User Control e arraste para o Formulário, coloque um componente Timer que será responsável por atualizar o nosso CDProgressBar, acompanhe a Listagem 2 que mostra a implementação para alimentar o CDProgressBar e o resultado final está na Figura 3.

 

 

Figura 3. User Control CDProgressBar em execução.

 

Listagem 2. Implementação para alimentar o CDProgressBar

procedure TWinForm1.Timer1_Tick(sender: System.Object; e: System.EventArgs);

begin

  //Quando o valor do ProgressBar atingir o Máximo para o Timer

  if CDProgressBar1.Value = CDProgressBar1.Maximun then

    Timer1.Enabled := False

  else

    CDProgressBar1.Value := CDProgressBar1.Value +1;

end;

 

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs);

begin

  Timer1.Enabled := false;

  CDProgressBar1.Value := 0;

  CDProgressBar1.Maximun := 20;

  CDProgressBar1.Step := 1;

  Timer1.Enabled := true;

end;

Conclusão

Nesse artigo implementei somente as propriedades que alteraram a característica do ProgressBar também podemos implementar atributos que alteram as características do Label como por exemplo a fonte, a customização fica por sua conta. Mais um artigo da serie Controles customizados, no próximo artigo mostrarei como construir controles com herança.