Simular o clique do mouse
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.
do componente MaskEdit criado dentro do primeiro componente panel.
Acacio
Curtidas 0
Respostas
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:...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...
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:
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)
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;
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