Simular o clique do mouse

Delphi

11/08/2003

Estou criando um componente do tipo panel e dentro dele estou colocando outros componente, um MaskEdit por exemplo. Eu queria saber se alguém sabe alguma forma de acessar a propriedade Editmask
do componente MaskEdit criado dentro do primeiro componente panel.


Acacio

Acacio

Curtidas 0

Respostas

Ildefonso

Ildefonso

11/08/2003

Olá, Acácio.

Para simular um clique do mouse, você deve posicionar o mouse com a função/método [b:86d3c57cbc]SetCursorPos(<coluna>, <linha>)[/b:86d3c57cbc].
Depois disso, chama-se as funções que simulam baixar e levantar o botão: [b:86d3c57cbc]Mouse_event(MOUSEEVENTF_LEFTDOWN), 0, 0, 0, 0)[/b:86d3c57cbc] e então [b:86d3c57cbc]Mouse_event(MOUSEEVENTF_LEFTUP), 0, 0, 0, 0)[/b:86d3c57cbc]. Não sei o que são os vários zeros... Uso essa dica a partir do excelente livro de Bruno Sonnino: 365 dicas de Delphi. Acho que está função é uma interface do Delphi com uma chamada de API do Windows... complicado.

Mas no seu caso, Acácio, acredito que o que você quer não é ´clicar´ e sim acessar a uma propriedade do componente que está dentro de outro. Se você colocou seu sub-componente em um TPanel, ambos viram um só e você deve criar uma interface para o componente final que acesse cada propriedade necessária.

Por exemplo, a propriedade EditMask do componente TMaskEdit que você quer acessar é declarada assim:
property EditMask: TEditMask;
...verifique isso no próprio help do Delphi.
No seu componente você deveria fazer uma declaração que criasse a propriedade e a vinculasse a dois métodos que acessassem o sub componente. Supondo que seu componente chamasse TAcacioPanel...
TAcacioPanel = class(TPanel)
  private
    FMaskEdit: TMaskEdit; //variável (campo, field) que mantém o MaskEdit
    ...
    procedure SetEditMask(Mask: TEditMask);
    function  GetEditMask : TEditMask;
    ...
  published
    property EditMask: TEditMask read GetEditMask write SetEditMask;
    ...
end;

Este fragmento de código cria uma propriedade que aparecerá no próprio [b:86d3c57cbc]Object Inspector[/b:86d3c57cbc] do Delphi. Procure ali, em ordem alfabética.
Agora, vamos aos métodos que lêem e escrevem a propriedade do sub-componente, diretamente:
procedure TAcacioPanel.SetEditMask(Mask: TEditMask);
begin
  FMaskEdit.EditMask := Mask;
end;

function TAcacioPanel.GetEditMask : TEditMask;
begin
  Result := FMaskEdit.EditMask;
end;

O Delphi disponibiliza sua estrutura OO para que possamos reaproveitar códigos até escondidos... Neste exemplo, o componente embutido (sub-componente TMaskEdit) é mantido em uma variável. Assim, podemos manipular as propriedades desta variável que estaremos manipulando o componente. Melhor: aproveitamos até sua capacidade de gerenciar e editar a propriedade original (note o botão com reticências junto ao editor da propriedade).

Acho que você está só no começo. Paciência até dominar o modo de pensar OO (orientação a objetos), depois a coisa fica mais fácil.
Não testei o código. Fiz tudo apenas de cabeça. Mas acredito que rodará sem problemas.

Outra coisa que você pode fazer é criar seu componente em um TFrame. Ele funciona como um formulário comum e o deixará acessar cada componente em separado. É um modo mais fácil se você não pretende investir tempo na construção de toda a interface de seu novo componente.
Como o TFrame é gravado tal como um TForm, você poderá usá-lo em quantos outros lugares forem necessários e controlar cada detalhe de suas propriedades embutidas, selecionando diretamente cada um dos sub-componentes.

Bom trabalho. 8)


GOSTEI 0
POSTAR