quarta-feira, 26 de setembro de 2012

Class Helpers Delphi

Em palavras simples, Class Helper é uma construção que estende uma classe através da introdução de novos métodos na classe helper. Class Helper permite que você estender a classe existente sem modificar-lo ou herdar da mesma.


unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TMinhaData = class helper for TMonthCalendar
  public
    function DataH(data: TDateTime): string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    MonthCalendar1: TMonthCalendar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


{ TMinhaData }

function TMinhaData.DataH(data: TDateTime): string;
begin
  Result:= FormatDateTime('dd/mm/yyyy', data);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(MonthCalendar1.DataH(now));
end;

end.

sexta-feira, 21 de setembro de 2012

quinta-feira, 20 de setembro de 2012

versão 2.0 CRFB

... Galera já criei a versão 2.0 do componente CRFB, vejam;


na versão 3 vou incluir eventos, e novas propriedades, até a próxima...

quarta-feira, 19 de setembro de 2012

Consultar cadastro Receita Federal

...Galera estava brincando com Delphi e comecei a desenvolver um componente para consulta de cadastros de contribuintes na Receita Federal do Brasil, vejam:

https://www.box.com/s/7v4c7frdmvq6kay2s25p

terça-feira, 11 de setembro de 2012

Apresentação componentes delphi

Made in delphi, galera segue link de uma apresentação sobre componentes que criei:

https://docs.google.com/presentation/pub?id=1T9XVeDCZ5I6CHuXucGxvbhF2bTJe4VMl7GkQA4QLtDU&start=true&loop=true&delayms=3000

quarta-feira, 11 de julho de 2012

Nova versão (CongelaW)

... Olá galera nesse post irei disponibilizar uma nova versão do componente CongelaW, onde inclui uma propriedade chamada [Intensidade], onde o usuário poderá indicar a intensidade da tela, essa versão faz chamada somente Show Modal.





... e uma nova chamada para o formulário...






... qualquer duvida postem.


Link para download: https://www.box.com/s/6a7d6a319fcf3d6e86a9

terça-feira, 10 de julho de 2012

ShowModal efeito web (Delphi)


... Oi galera quem nunca viu um modal estilo web?






...criei um componente que faz esse efeito, até agora testei com Show Modal, ainda não tive tempo para aperfeiçoa-lo para chamada show, mas sei que funciona, qualquer duvida comentem.




Link para download: https://www.box.com/s/f2a30d13478e784db2e6


Atenciosamente: Jucelio Moura. 

segunda-feira, 2 de julho de 2012

Verificar status de um cadastro...

...Ola galera vou disponibilizar um pequeno componente que criei para verificação do status de um cadastro...











link para download: https://www.box.com/s/a43ec7d570fa7bba303b



quinta-feira, 21 de junho de 2012

Identificar componente ao passar o mouse por cima do mesmo


> Crie um tipo [Record]


  TRectControles = record
    uRect: TRect;
    uControle: TControl;
  end;


> Em [private], crie um array dinâmico do tipo [TRectControles], um método, para pegar a posição inicial dos controles [AtualizaPosicaoControles], e um método para retornar informações sobre o controle [ConsultaControle]  


  private
    { Private declarations }
    vp_Rect: array of TRectControles;
    procedure AtualizaPosicaoControles;
    function  ConsultaControle: string;

 [implementation]


// AtualizaPosicaoControles
procedure TForm1.AtualizaPosicaoControles;
var
  vl_i, vl_TamVetor: Integer;
begin
  for vl_i := 0 to Self.ComponentCount - 1 do
    begin
      if Components[vl_i].InheritsFrom(TControl) and (Components[vl_i].ClassType <> TForm) then
        begin
          vl_TamVetor:= Length(vp_Rect);
          SetLength(vp_Rect, vl_TamVetor + 1);
          with vp_Rect[High(vp_Rect)] do
            begin
              uRect:= TControl(Components[vl_i]).BoundsRect;
              uControle:= TControl(Components[vl_i]);
            end;
        end;
    end;
end;


// ConsultaControle
function TForm1.ConsultaControle: string;
  function PosMouseForm: TPoint;
  var
   vl_ponto: Tpoint;
  begin
    vl_ponto:= Self.ClientOrigin;
    with vl_ponto do
      begin
        x:= Mouse.CursorPos.x - x;
        y:= Mouse.CursorPos.y - y;
        if (x < 0) or (x > Self.Width) or (y < 0) or (y > Self.Height) then
         begin
           y:= -1;
           x:= -1;
         end;
      end;
    Result:= vl_ponto;
  end;
Var
 vl_mp : TPoint;
 vl_i: Integer;
 vl_ClassRef: TClass;
begin
  vl_mp:= PosMouseForm;
  for vl_i := 0 to Length(vp_Rect) - 1 do
    begin
     If PtInRect(vp_Rect[vl_i].uRect, vl_mp) Then
      Begin
        if vp_Rect[vl_i].uControle <> nil then
          begin
            vl_ClassRef := vp_Rect[vl_i].uControle.ClassType;
            with vp_Rect[vl_i].uControle do
              begin
                while vl_ClassRef <> nil do
                  begin
                    Result:= Result + vl_ClassRef.ClassName + #13;
                    vl_ClassRef := vl_ClassRef.ClassParent;
                  end;
                ShowHint:= True;
                Hint:= Result;
              end;
            Exit;
          end;
      End;
    end;
end;


> No evento [onCreate] do Form;
procedure TForm1.FormCreate(Sender: TObject);
begin
  AtualizaPosicaoControles;
end;


> Coloque um componente TTime no Form com intervalo = 1 e Enable = True, no evento [onTimer];
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ConsultaControle;
  AtualizaPosicaoControles;
end;




  

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.