Fórum Criar componente que receba foco #262126

15/12/2004

0

É o seguinte:
preciso criar um componente que possa receber o foco do teclado. De acordo com o help do Delphi, o componente deve ser descendente de TCustomControl, porque assim ele vai ter um Handle próprio e tudo mais. Até aí tudo bem.
Criei ele descendente de TCustomControl, ele até aparece na tab order, mas se eu pressiono tab no form, o foco não muda...:roll:
Já tentei responder à mensagem WM_SETFOCUS, CM_FOCUSCHANGED, mas nada funcionou.. :cry:
Alguem sabe como fazer isso?

T+,
Vinicius;


Fórum Vini

Fórum Vini

Responder

Posts

15/12/2004

Massuda

O default é ter TabStop = false. Experimente fazer TabStop = true no construtor do seu componente.


Responder

Gostei + 0

15/12/2004

Fórum Vini

Nunca pensei que fosse tão simples assim :lol:
( Viajei, tentando pegar mensagens e tal :oops: )

Mto obrigado kra! :D :D :D
Fico te devendo essa :wink:

T+,
Vinicius;


Responder

Gostei + 0

16/11/2005

Alex Maia

Caros amigos,

Em meus sistemas a tecla ESC é configurada para fechar as janelas, mas tenho um componente que quando recebe o foco ele cancela esta função. No sistema os forms possuem a propriedade KeyPreview = True e no evento OnKeyDown tenho o seguinte código:

if Key = vk_Escape then Self.Close;


Tenho os fontes do componente e preciso mudá-lo para solucionar este problema. Alguem pode me ajudar?

Desde já agradeço.


Responder

Gostei + 0

17/11/2005

Massuda

Qual é o componente (TEdit, TButton, etc) que está dando problema?


Responder

Gostei + 0

17/11/2005

Alex Maia

É um componente TButton


Responder

Gostei + 0

17/11/2005

Martins

[quote:d955582508=´Alex Maia´]É um componente TButton[/quote:d955582508]

Pq q isso só acontece com [b:d955582508]vk_Escape [/b:d955582508]?

Alguém poderia responder.


Responder

Gostei + 0

17/11/2005

Emerson Nascimento

como estão as propriedades Default e Cancel desse TButton?


Responder

Gostei + 0

17/11/2005

Martins

como estão as propriedades Default e Cancel desse TButton?


Ambas estão false


Responder

Gostei + 0

17/11/2005

Alex Maia

Default = False;
Cancel = False;


Responder

Gostei + 0

17/11/2005

Martins

[quote:bd064c298e=´Alex Maia´]Default = False;
Cancel = False;[/quote:bd064c298e]
Coloque:

Default = true

Deve funcionar agora.


Responder

Gostei + 0

17/11/2005

Michael

Martins, vc quis dizer colocar [b:8c6a0eab53]Cancel [/b:8c6a0eab53]:= true não? [b:8c6a0eab53]Default [/b:8c6a0eab53]é para o Enter. ;-)

[]´s


Responder

Gostei + 0

17/11/2005

Michael

Olá Alex!

Vi o código do seu componente que vc me mandou, e ele se comporta exatamente como um [b:7efaf5a7cc]TButton [/b:7efaf5a7cc]- mas não é derivado dele, e sim de [b:7efaf5a7cc]TCustomControl[/b:7efaf5a7cc]. Então, ele precisa implementar os mesmos métodos que insterceptam mensagens do Windows sobre componentes, como [b:7efaf5a7cc]CM_DIALOGKEY[/b:7efaf5a7cc].

Como [b:7efaf5a7cc]TButton[/b:7efaf5a7cc], ele tem a propriedade [b:7efaf5a7cc]Cancel[/b:7efaf5a7cc], que ao ser setada para true, como os outros colegas disseram acima, chama o evento [b:7efaf5a7cc]OnClick [/b:7efaf5a7cc]do botão qdo Esc é pressionado.

[]´s


Responder

Gostei + 0

17/11/2005

Martins

Martins, vc quis dizer colocar [b:5892e1588e]Cancel [/b:5892e1588e]:= true não? [b:5892e1588e]Default [/b:5892e1588e]é para o Enter. ;-) []´s

Não, não [b:5892e1588e]Michael[/b:5892e1588e], veja o q tem no post do colega.

[quote:5892e1588e=´Alex Maia´]
Caros amigos,

Em meus sistemas a tecla ESC é configurada para fechar as janelas, mas tenho um componente que quando recebe o foco ele cancela esta função. No sistema os forms possuem a propriedade KeyPreview = True e no evento OnKeyDown tenho o seguinte código:

if Key = vk_Escape then Self.Close;


Tenho os fontes do componente e preciso mudá-lo para solucionar este problema. Alguem pode me ajudar?

Desde já agradeço.[/quote:5892e1588e]

Se ele deixar o Cancel = true, o código [b:5892e1588e]if Key = vk_Escape then Self.Close; [/b:5892e1588e], vai continuar não funcionando, se ele mudar o Default para [b:5892e1588e]True[/b:5892e1588e], ele pode rodar q vai funcionar, se é q é mesmo Tbutton.

Valew Michael, passa lá no fórum do ArapuKa, no endereço do asa-sistemas.

Abraço!!!


Responder

Gostei + 0

17/11/2005

Michael

Hum, não entendi pq o Default tem que estar setando para True. Ele só influencia no caso de se pressionar Enter no form, que faz com que o código do OnClick do botão seja chamado. Se deixar false o código do OnKeyDown do form deveria funcionar da mesma forma...

De qualquer forma, este código não é necessário, já que o componente se engarrega de fechar o formulário no caso do Esc, basta colocar o Self.Close no OnClick do botão Cancelar, se houver um.

[]´s


Responder

Gostei + 0

17/11/2005

Martins

Hum, não entendi pq o Default tem que estar setando para True. Ele só influencia no caso de se pressionar Enter no form, que faz com que o código do OnClick do botão seja chamado. Se deixar false o código do OnKeyDown do form deveria funcionar da mesma forma... De qualquer forma, este código não é necessário, já que o componente se engarrega de fechar o formulário no caso do Esc, basta colocar o Self.Close no OnClick do botão Cancelar, se houver um. []´s


Não é para fechar através do OnClick do botão, ela fecha os forms teclando [b:801139f335]ESC[/b:801139f335], é isso q acontece, e da forma q ela quer só funcionou assim.

Ok!

:wink:

T+

Boa Sorte


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar