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.