Criar componente que receba foco
É 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;
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
Curtidas 0
Respostas
Massuda
15/12/2004
O default é ter TabStop = false. Experimente fazer TabStop = true no construtor do seu componente.
GOSTEI 0
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;
( Viajei, tentando pegar mensagens e tal :oops: )
Mto obrigado kra! :D :D :D
Fico te devendo essa :wink:
T+,
Vinicius;
GOSTEI 0
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.
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
15/12/2004
Qual é o componente (TEdit, TButton, etc) que está dando problema?
GOSTEI 0
Alex Maia
15/12/2004
É um componente TButton
GOSTEI 0
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.
Pq q isso só acontece com [b:d955582508]vk_Escape [/b:d955582508]?
Alguém poderia responder.
GOSTEI 0
Emerson Nascimento
15/12/2004
como estão as propriedades Default e Cancel desse TButton?
GOSTEI 0
Martins
15/12/2004
como estão as propriedades Default e Cancel desse TButton?
Ambas estão false
GOSTEI 0
Alex Maia
15/12/2004
Default = False;
Cancel = False;
Cancel = False;
GOSTEI 0
Martins
15/12/2004
[quote:bd064c298e=´Alex Maia´]Default = False;
Cancel = False;[/quote:bd064c298e]
Coloque:
Default = true
Deve funcionar agora.
Cancel = False;[/quote:bd064c298e]
Coloque:
Default = true
Deve funcionar agora.
GOSTEI 0
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
[]´s
GOSTEI 0
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
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
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
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
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
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
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
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?
Vc testou colocando a opção default do botão para true?
Qual a versão do seu Delphi?
GOSTEI 0
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
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?
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
15/12/2004
É um conjunto de componentes de uma paleta chamada XiControls.
GOSTEI 0
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?
Boa Sorte!!!
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
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
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
15/12/2004
Alguém pode me ajudar a solucionar este problema?
GOSTEI 0
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
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
Desde já agradeço.
alex@tvtapajos.com.br
GOSTEI 0
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
Desde já agradeço.
alex@tvtapajos.com.br
GOSTEI 0