quarta-feira, 13 de junho de 2012

Projeto Controlador post 3


... Olá galera, hoje criaremos mais uma propriedade para nosso componente, criaremos a propriedade [Ativo], que indicará o estado do componente.


  • Abra o arquivo CompControlador.pas.
  • Em [private], adicione a variável F_Ativo do tipo Booleana
  • Adicione os métodos [GetAtivo, SetAtivo]
  • Em [published], adicione a propriedade [Ativo], [defaut] >> false, nosso componente, terá a propriedade [Ativo], como valor inicial defaut falso.
  •  Implemente os métodos [GetAtivo, SetAtivo]
 
  • No método [Create], adicione [Ativo:= False]
  • Salve tudo e compile
  • Abra um novo projeto ou form, coloque o componente, e  verifique a existência da nova propriedade

...é isso ai galera, até a próxima onde criaremos nosso primeiro efeito visual, a grid...
 
 


Embarcadero promove concurso de 
desenvolvimento de aplicações móveis e premia melhores aplicativos para iOS...



terça-feira, 12 de junho de 2012

Projeto Controlador post 2


...Olá galera, vamos definir novas propriedades e eventos para nosso componente, abra o arquivo CompControlador.pas







  • Definiremos um controle para nosso componente então criaremos uma propriedade chamada [Controle];
 Em [uses], acrescente Controls

  • Declare uma variável em [private] do tipo TWinControl;
  • Declare dois metodos;

Em [published
], defina;


  • Implemente GetControle; 
  

  • Implemente SetControle;
 
  • Compile seu componente, irá aparecer uma tela;





  • Clica em [OK].
  • Agora se formos usar nosso componente, veremos que o mesmo tem uma propriedade chamada Controle



 ...No proximo post iremos definir uma propriedade chamada [Ativo], que definirá o estado de nosso componente, ainda temos muito trabalho pela frente, até a proxima...







segunda-feira, 11 de junho de 2012

Projeto Controlador post 1


- Criaremos o esqueleto do componente;

  • Crie uma pasta no seu computador com o nome  Controlador


  • No Delphi [File - New - Package]
  • [File - Save All], salve com o nome  Controlador, na pasta que você criou.

  • Dentro da pasta serão criados 4 arquivos e uma pasta chamada _History

  • Voltando ao Delphi, vá em [File - New - Other... - Delphi Files - Component]


  • Clica no botão [OK].
  • Agora selecionaremos a classe que iremos herdar para nosso componente, como o mesmo não será visual então herdaremos de TComponent, e clica em [Next].
  • Na próxima tela preencha Class Name [TControlador]
                             Palette Page [Controlador],
clica em [Finish]


No Delphi você já pode ver o esqueleto do componente

  • Vá em  [File - Save All] e salve a unit como CompControlador.pas
  • Agora escreveremos o método Create e Destroy do mesmo



  • No Project Manager Selecione o projeto, e com botão direito do mouse clica em [Compile]
  • Faça a mesma ação mas agora selecione [Install].

  • Salve tudo, crie um projeto qualquer ou um form, vá em seu [Tool Palette], e observe o seu novo componente


  • Você já poderá adicionar a seu projeto ou form

  • Arquivos da pasta.


(... é isso ai galera, o primeiro post é esse, no próximo post, iremos adicionar as novas propriedades e eventos, até a próxima...)

domingo, 10 de junho de 2012

Olá Delphianos, vou postar um artigo de criação de um componente que chamarei de Controlador, e o dividirei em varias partes...

O que o componente fará;
  1. Movimentar outros controles em rum-time.
  2. Salvar Layouts em arquivo (*.xml), compatível para qualquer ClientDataSet.
  3. Criar para o usuário uma interface de ajuda (Incluindo uma grid para desenho).
  4. Carregar e executar layout. 
Validar campos, etc...

No próximo post começaremos com a criação do mesmo, e nos posts seguintes iniciaremos a inclusão das propriedades e eventos..., até a próxima...


sexta-feira, 1 de junho de 2012

quinta-feira, 31 de maio de 2012

Olá pessoal, estou voltando a escrever no blogger...
- Venho agora mostrar como criar um componente;



  • Ações
- Criar componente cronometro regressivo, salvando as informações no registro do windows. 




- Imagem do componente;



- Imagem do registro do windows;




- Vou postar o fonte e explico passo-a-passo:


unit u_Cronometro;


interface


uses
  Windows, SysUtils, Classes, Controls, StdCtrls, Mask, ExtCtrls,     DateUtils, Dialogs,
  Forms, Registry;


type
  TCronometro = class(TWinControl)
  private
    { Private declarations }
    // Adicionando um componente Label. 
    _LabelTimer: TLabel;
    // Adicionando um componente MaskEdit. 
    _EditTimer: TMaskEdit;
    // Adicionando um componente Button. 
    _ButTimer: TButton;
    // Adicionando um componente Time.
    _Timer, _TimerS: TTimer;
    // Variável publica do tipo integer.
    vp_segundos : Integer;
    // Funções para retorna a quantidade de segundo, em um valor de tempo informado pelo usuário.
    function GetSegundos: Integer;
    function CalculaSegundo: Integer;
    // Procedure para configurar o evento click do botão.
    procedure _ButTimerClick(Sender: TObject);
    // Procedure para configurar o evento OnTime do componente Timer.
    procedure _TimerExecute(Sender: TObject);    
    // Procedure para configurar o evento OnTime do componente TimerS.
    procedure _TimerSExecute(Sender: TObject);
    // Função auxiliar para converter o tempo.
    function SecToTime(Sec: Integer): string;
  protected
    { Protected declarations }
    // Sobrecarregando o método SetBounds da classe ancestral. 
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  public
    { Public declarations }
    // Sobrecarregando o método Construtor da classe ancestral.
    constructor Create(AOwner: TComponent); override;
    // Sobrecarregando o método Destrutor da classe ancestral.
    destructor Destroy; override;
  published
    { Published declarations }
    // No próximo artigo incluiremos novas propriedades e eventos
  end;


procedure Register;


implementation


procedure Register;
begin
  // Metodo para registrar o componente
  RegisterComponents('Meu Componente', [TCronometro]);
end;


{ TCronometro }


function TCronometro.CalculaSegundo: Integer;
var
  vl_i,vl_f: TDateTime;
begin
  Result:= 0;
  vl_i:= StrToDateTime(FormatDateTime('dd/mm/yyyy', now)+ ' 00:00:00');
  vl_f:= StrToDateTime(FormatDateTime('dd/mm/yyyy', now)+ ' '+_EditTimer.Text+'');
  Result := SecondsBetween(vl_i,vl_f);
end;


constructor TCronometro.Create(AOwner: TComponent);
var
  vl_reg: TRegistry; // TRegistry utilizada para acessar o registro do windows >> Uses Registry
begin
  // Chama o construtor da Classe ancestral.
  inherited Create(AOwner);;
  _Timer:=  TTimer.create(self);   
  with _Timer do
  begin
    Enabled:= False;
    Interval:= 1000;
    OnTimer:= _TimerExecute;
  end;


  _TimerS:=  TTimer.create(self);
  with _TimerS do
  begin
    Enabled:= False;
    Interval:= 5000;
    OnTimer:= _TimerSExecute;
  end;


  _EditTimer:=  TMaskEdit.create(self);
  with _EditTimer do
  begin
    Parent:= Self;
    ParentFont:= False;
    EditMask := '99:99:99;1;_';
    SetBounds(0,0,80,21);
  end;


  _ButTimer:=   TButton.create(self);
  with _ButTimer do
  begin
    Parent:= Self;
    ParentFont:= False;
    Caption:= 'Iniciar...';
    OnClick:= _ButTimerClick;
    SetBounds(82,0,60,21);
  end;


  vp_segundos:= GetSegundos;


  if vp_segundos > 0 then
  _ButTimer.Click;


  _LabelTimer:= TLabel.create(self);
  with _LabelTimer do
  begin
    Parent:= Self;
    Caption:= '00:00:00';
    SetBounds(0,25,40,40);
  end;


end;


destructor TCronometro.Destroy;
var
  vl_chave: TRegistry;
begin
  // Metodo destrutor, antes de destruir salva o valor de tempo restante.
  vl_chave:= TRegistry.Create;
  try
    vl_chave.RootKey := HKEY_CURRENT_USER;
    vl_chave.OpenKey('Cronometro',True);
    // Salva a quantidade de segundos restantes.
    vl_chave.WriteInteger('Segundos',vp_segundos);
    // Salva o valor do tempo inicial.
    vl_chave.WriteString('Temp_ini',_EditTimer.Text);
    vl_chave.CloseKey();
  finally
    vl_chave.Free;
  end;


  // Libera os objetos da memoria.
  FreeAndNil(_LabelTimer);
  FreeAndNil(_EditTimer);
  FreeAndNil(_ButTimer);
  FreeAndNil(_TimerS);
  FreeAndNil(_Timer);
  // Chama do Destrutor da classe ancestral.
  inherited Destroy;
end;


function TCronometro.GetSegundos: Integer;
var
  vl_chave: TRegistry;
  vl_i,vl_f : TDateTime;
  vl_segundos: Integer;
begin
  Result:= 0;


  vl_chave:= TRegistry.Create;
  with vl_chave do
    begin
      RootKey := HKEY_CURRENT_USER;
      // Verifica se a chave existe, se não existir a mesma é criada.
      if not KeyExists('Cronometro') then
        begin
          OpenKey('Cronometro', true);
          WriteInteger('Segundos',0);
          WriteString('Temp_ini', '00:00:00');
          Result:= 0;
          _EditTimer.Text:= '00:00:00';
          CloseKey();
        end
          else
        begin
          // Se existir pego os valores constantes na mesma.
          OpenKey('Cronometro', true);
          Result:=  vl_chave.ReadInteger('Segundos');
          _EditTimer.Text:= vl_chave.ReadString('Temp_ini');
          CloseKey();
        end;
      Free;
    end;
end;


function TCronometro.SecToTime(Sec: Integer): string;
var
   vl_H, vl_M, vl_S: string;
   vl_ZH, vl_ZM, vl_ZS: Integer;
begin
   vl_ZH := Sec div 3600;
   vl_ZM := Sec div 60 - vl_ZH * 60;
   vl_ZS := Sec - (vl_ZH * 3600 + vl_ZM * 60) ;
   vl_H := IntToStr(vl_ZH) ;
   vl_M := IntToStr(vl_ZM) ;
   vl_S := IntToStr(vl_ZS) ;
   Result := vl_H + ':' + vl_M + ':' + vl_S;
end;


procedure TCronometro.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  // Largura do componente.
  AWidth:= _EditTimer.Width + _ButTimer.Width + 2;
  // Altura do componente.
  AHeight:= _EditTimer.Height + _LabelTimer.Height + 2;
  // Chama o método da classe ancestral.
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);
end;


// Método click do botão.
procedure TCronometro._ButTimerClick(Sender: TObject);
begin
  if vp_segundos <= 0 then
    begin
      vp_segundos:= CalculaSegundo;
    end;
  // Ativa os componentes TTime(s).
  _TimerS.Enabled:= True;
  _Timer.Enabled:= True;
  // Desativa o componente MaskEdit e o Button
  _EditTimer.Enabled:= False;
  _ButTimer.Enabled:= False;
end;


// Metodo OnTimer de (_Timer)
procedure TCronometro._TimerExecute(Sender: TObject);
var
  vl_chave: TRegistry;
begin
  vp_segundos:= vp_segundos - 1;
  _LabelTimer.Caption:= SecToTime(vp_segundos);
  if vp_segundos = 0 then
    begin
      try
        vl_chave:= TRegistry.Create;
        vl_chave.RootKey := HKEY_CURRENT_USER;
        vl_chave.OpenKey('Cronometro',True);
        vl_chave.WriteInteger('Segundos',vp_segundos);
        vl_chave.WriteString('Temp_ini','');
        vl_chave.CloseKey();
      finally
        vl_chave.Free;
      end;
      _Timer.Enabled:= False;
      MessageDlg('Fim de expediente...', mtInformation,[mbOK], 0);
      Application.Terminate;
    end;
end;


// Metodo OnTimer de (_TimerS)
procedure TCronometro._TimerSExecute(Sender: TObject);
var
  vl_chave: TRegistry;
begin
  vl_chave:= TRegistry.Create;
  try
    vl_chave.RootKey := HKEY_CURRENT_USER;
    vl_chave.OpenKey('Cronometro',True);
    vl_chave.WriteInteger('Segundos',vp_segundos);
    vl_chave.WriteString('Temp_ini',_EditTimer.Text);
    vl_chave.CloseKey();
  finally
    vl_chave.Free;
  end;
end;


end.