Criar componente que receba foco

Delphi

15/12/2004

É 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

Curtidas 0

Respostas

Massuda

Massuda

15/12/2004

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


GOSTEI 0
Fórum Vini

Fórum Vini

15/12/2004

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;


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

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.


GOSTEI 0
Massuda

Massuda

15/12/2004

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


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

É um componente TButton


GOSTEI 0
Martins

Martins

15/12/2004

[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.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/12/2004

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


GOSTEI 0
Martins

Martins

15/12/2004

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


Ambas estão false


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Default = False;
Cancel = False;


GOSTEI 0
Martins

Martins

15/12/2004

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

Default = true

Deve funcionar agora.


GOSTEI 0
Michael

Michael

15/12/2004

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

[]´s


GOSTEI 0
Michael

Michael

15/12/2004

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


GOSTEI 0
Martins

Martins

15/12/2004

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!!!


GOSTEI 0
Michael

Michael

15/12/2004

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


GOSTEI 0
Martins

Martins

15/12/2004

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


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Caros amigos, assim como o ESC as teclas F1, F2, F3, F4, etc; tambem são usadas como teclas de atalho, e com este botão as suas funcionalidades em meus sistema se perderam, pq quando o foco está no botão elas não funcionam, mas se o foco vai pra um componente nativo de delphi tudo funciona... é como se a propriedade KeyPreview do form estivesse como False.


GOSTEI 0
Martins

Martins

15/12/2004

[quote:59628e02e2=´Alex Maia´]Caros amigos, assim como o ESC as teclas F1, F2, F3, F4, etc; tambem são usadas como teclas de atalho, e com este botão as suas funcionalidades em meus sistema se perderam, pq quando o foco está no botão elas não funcionam, mas se o foco vai pra um componente nativo de delphi tudo funciona... é como se a propriedade KeyPreview do form estivesse como False.[/quote:59628e02e2]


Vc testou colocando a opção default do botão para true?

Qual a versão do seu Delphi?


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Se eu colocar Delfault com True em todos os botões do meu sistema seria como se eu estivesse fazendo ´gambiarra´ para que o componente se comporte como eu quero. Mas eu pretendo que ele se comporte normalmente como o componente Button do delphi. Eu uso o delphi 7 amigo. Obrigado.


GOSTEI 0
Martins

Martins

15/12/2004

[quote:01dbb49835=´Alex Maia´]Se eu colocar Delfault com True em todos os botões do meu sistema seria como se eu estivesse fazendo ´gambiarra´ para que o componente se comporte como eu quero. Mas eu pretendo que ele se comporte normalmente como o componente Button do delphi. Eu uso o delphi 7 amigo. Obrigado.[/quote:01dbb49835]


Tudo bem, então vamos procurar uma outra solução para esse caso, qual o nome do componente q vc usa mesmo?


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

É um conjunto de componentes de uma paleta chamada XiControls.


GOSTEI 0
Martins

Martins

15/12/2004

[quote:6fd9de362c=´Alex Maia´]É um conjunto de componentes de uma paleta chamada XiControls.[/quote:6fd9de362c]
Nunca ouvi falar, vc poderia passar o link aqui no fórum?

Olha só, acho q vc deveria seguir a dica do Michael, lembra?

Olá Alex! Vi o código do seu componente que vc me mandou, e ele se comporta exatamente como um TButton - mas não é derivado dele, e sim de TCustomControl. Então, ele precisa implementar os mesmos métodos que insterceptam mensagens do Windows sobre componentes, como CM_DIALOGKEY. Como TButton, ele tem a propriedade Cancel, que ao ser setada para true, como os outros colegas disseram acima, chama o evento OnClick do botão qdo Esc é pressionado. []´s


Boa Sorte!!!


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Eu não tenho o link, mas posso te mandar os fontes. Eu não queria usar aquela dica... prefiro que o componente funcione como o Button do delphi, pois a tela irá fechar independentemente de existir ou não um botão fechar na tela. Mande-me um e-mail que te respondo com os fontes alex@tvtapajos.com.br


GOSTEI 0
Massuda

Massuda

15/12/2004

[quote:f73ab00d7c=´Alex Maia´]É um conjunto de componentes de uma paleta chamada XiControls.

Nunca ouvi falar, vc poderia passar o link aqui no fórum?[/quote:f73ab00d7c]Via Google...

http://www.deadlogic.co.nr/


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Alguém pode me ajudar a solucionar este problema?


GOSTEI 0
Martins

Martins

15/12/2004

[quote:4dc983e40d=´Martins´][quote:4dc983e40d=´Alex Maia´]É um conjunto de componentes de uma paleta chamada XiControls.

Nunca ouvi falar, vc poderia passar o link aqui no fórum?[/quote:4dc983e40d]Via Google...

http://www.deadlogic.co.nr/[/quote:4dc983e40d]

Valew Massuda, vou olhar o link, brigadão!!!! :D

:wink:


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Alguem pode me ajudar? Se quiser eu mando os fontes do componente pra dá uma analisada...

Desde já agradeço.

alex@tvtapajos.com.br


GOSTEI 0
Alex Maia

Alex Maia

15/12/2004

Alguem pode me ajudar??? Se quiser eu mando os fontes do componente!!!

Desde já agradeço.

alex@tvtapajos.com.br


GOSTEI 0
POSTAR