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