Como ´limpar a variável key´ após utilizar o FormKeyDown?
Saudações gente,
eu de novo, como faço para esvaziar o conteúdo da key após utilizar o FormKeyDown?
Acontece que eu tenho usado esta propriedade para chamar uma tela de pesquisa para o edit que está com o foco. Até aí tudo bem, o problema é que quando eu passo o foco para o outro edit a tela de consulta deste aparece sem precisar chamar (acredito que a key continua com o F2 guardado). Tem como eu esvaziar assim que chamar a tela?
Ah! aproveitando, uma coisa que me intrigou...tem como usar um Align = Center no texto do Edit? desculpem a ignorância...mas eu não encontrei algo assim nele...acredito que ele não tem essa propriedade
eu de novo, como faço para esvaziar o conteúdo da key após utilizar o FormKeyDown?
Acontece que eu tenho usado esta propriedade para chamar uma tela de pesquisa para o edit que está com o foco. Até aí tudo bem, o problema é que quando eu passo o foco para o outro edit a tela de consulta deste aparece sem precisar chamar (acredito que a key continua com o F2 guardado). Tem como eu esvaziar assim que chamar a tela?
Ah! aproveitando, uma coisa que me intrigou...tem como usar um Align = Center no texto do Edit? desculpem a ignorância...mas eu não encontrei algo assim nele...acredito que ele não tem essa propriedade
Zooropa
Curtidas 0
Respostas
Aldus
01/11/2006
No final do evento coloque: key:=0
Quanto ao alinhamento, o edit do delphi não tem alinhamento mesmo.
att
Mario
Quanto ao alinhamento, o edit do delphi não tem alinhamento mesmo.
att
Mario
GOSTEI 0
Zooropa
01/11/2006
Olá Aldus,
cara, testei o que vc me passou mas não funciona. Fora o OnKeydown do form eu tenho no mesmo evento de cada edit e em todos eles eu limpei a key. Porém basta eu dar um setfocus em qualquer um deles que a tela já aparece....o que me falta fazer?
De qualquer forma obrigado...
cara, testei o que vc me passou mas não funciona. Fora o OnKeydown do form eu tenho no mesmo evento de cada edit e em todos eles eu limpei a key. Porém basta eu dar um setfocus em qualquer um deles que a tela já aparece....o que me falta fazer?
De qualquer forma obrigado...
GOSTEI 0
Rhalves
01/11/2006
Cara, tentar utilizar assim:
Begin
Key := #0;
ChamaForm;
End;
Begin
Key := #0;
ChamaForm;
End;
GOSTEI 0
Zooropa
01/11/2006
Olá Alves,
cara, tentei o que vc disse mas não deu certo. Dá tipos incompatíveis...e eu continuo com o mesmo problema....cada edit tem uma tela de busca que é chamada através do F2. Se eu digitar o F2 no primeiro edit e ir para o foco do próximo, este já chama a tela automaticamente, como se o F2 fosse pressionado, não consigo resolver isso. O trecho é este:
Se alguém puder me ajudar...
cara, tentei o que vc disse mas não deu certo. Dá tipos incompatíveis...e eu continuo com o mesmo problema....cada edit tem uma tela de busca que é chamada através do F2. Se eu digitar o F2 no primeiro edit e ir para o foco do próximo, este já chama a tela automaticamente, como se o F2 fosse pressionado, não consigo resolver isso. O trecho é este:
case key of VK_F2: if Edit1.Focused then Chama a Pesquisa;
Se alguém puder me ajudar...
GOSTEI 0
Renato.pavan
01/11/2006
Olá Alves,
cara, tentei o que vc disse mas não deu certo. Dá tipos incompatíveis...e eu continuo com o mesmo problema....cada edit tem uma tela de busca que é chamada através do F2. Se eu digitar o F2 no primeiro edit e ir para o foco do próximo, este já chama a tela automaticamente, como se o F2 fosse pressionado, não consigo resolver isso. O trecho é este:
Se alguém puder me ajudar...
case key of VK_F2: if Edit1.Focused then Chama a Pesquisa;
Colega fiz um teste aqui da seguinte forma:
No FormKeyDown coloquei o codigo abaixo:
begin if Key = VK_F2 then if Edit1.Focused then ShowMessage(´Pressionado F2 no Edit1´) else if Edit2.Focused then ShowMessage(´Pressionado F2 no Edit2´) else if Edit3.Focused then ShowMessage(´Pressionado F2 no Edit3´) else ShowMessage(´Pressionado F2 no Edit4´); end;
Desta forma executa o showmessage de acordo com o edit que estiver com foco, fiz isso pq vc relata que pressiona F2 no primeiro edit e vai pro proximo e sem pressionar o F2 ja abre a tela de pesquisa, nesse teste que fiz apenas qdo pressiono F2 exibe a mensagem relativa ao edit que estiver com foco.
Esepro ter ajudado de alguma forma.
[]´s
Renato
GOSTEI 0
Zooropa
01/11/2006
Olá Renato,
o meu problema não está na execução do KeyDown com F2 e sim na passagem para outro componente após esta utilização porque o F2 continua pressionado fazendo com que o evento KeyDown do próximo componente seja acionado. No primeiro edit eu faço tudo tranquilo, ao concluir com ele e passar o foco para o próximo edit, este já chama a tela de pesquisa sem eu tc no F2, sacou?
Eu tenho que zerar a key a cada finalização do evento keydown e isso eu não consigo.
Muito obrigado.
o meu problema não está na execução do KeyDown com F2 e sim na passagem para outro componente após esta utilização porque o F2 continua pressionado fazendo com que o evento KeyDown do próximo componente seja acionado. No primeiro edit eu faço tudo tranquilo, ao concluir com ele e passar o foco para o próximo edit, este já chama a tela de pesquisa sem eu tc no F2, sacou?
Eu tenho que zerar a key a cada finalização do evento keydown e isso eu não consigo.
Muito obrigado.
GOSTEI 0
Campsoft
01/11/2006
Você ja tentou colocar o comando exit no final do if key=vk_f2 ?
if key=vk_f2 then begin
...
exit;
end;
verifique se nao existe nada no evento onkeyup do segundo campo.
se eu entendi a logica
f2 sobre campo1, executa evento (onkeydown), pula pro proximo campo.
(eu imagino que o evento onkeyup do segundo campo deve estar sendo o culpado)
if key=vk_f2 then begin
...
exit;
end;
verifique se nao existe nada no evento onkeyup do segundo campo.
se eu entendi a logica
f2 sobre campo1, executa evento (onkeydown), pula pro proximo campo.
(eu imagino que o evento onkeyup do segundo campo deve estar sendo o culpado)
GOSTEI 0
Marco Salles
01/11/2006
Com voce faz duas coisas ao mesmo tempo ????
Se voce digitar F2 no promeiro edit ele ira excecutar o codigo respctivo ao evento OnKeyDown desse edit..
Tambem não entendo porque voce testa o foco (usando If)
[b:53a4838c00] if Edit1.Focused then [/b:53a4838c00]
Pois o evento OnkewDonw so é disparado no edit que tem o foco
Quado se digitar F2 nun edit qualquer
Não entendo[b:53a4838c00] porque que muda para o proximo edit [/b:53a4838c00], a não ser que dentro do codigo voce esteja dando uma instrução para mudar de controle ??
Se eu digitar o F2 no primeiro edit e ir para o foco do próximo,
Se voce digitar F2 no promeiro edit ele ira excecutar o codigo respctivo ao evento OnKeyDown desse edit..
Tambem não entendo porque voce testa o foco (usando If)
[b:53a4838c00] if Edit1.Focused then [/b:53a4838c00]
Pois o evento OnkewDonw so é disparado no edit que tem o foco
Quado se digitar F2 nun edit qualquer
case key of VK_F2: //Vai fazer o que estiver aqui nesse edit qualquer
Não entendo[b:53a4838c00] porque que muda para o proximo edit [/b:53a4838c00], a não ser que dentro do codigo voce esteja dando uma instrução para mudar de controle ??
GOSTEI 0
Zooropa
01/11/2006
Olá Marco,
eu sei que o evento é para o objeto focado porém não estava funcionando por isso tive que colocar esta ´marreta´ de perguntar se o objeto estava focado. Quanto à passar para o próximo eu realmente coloquei o comando para ir para o próximo edit porque é necessário que isso ocorra na hora da digitação. Só que assim que o próximo edit é focado, a tela de pesquisa deste campo é chamada sem que pra isso tecle o F2...como resolvo isso? (detalhe: no primeiro edit, tudo funciona tranquilo. É a partir do primeiro evento keydown que acontece isso a cada edit focado).
Agradeço a todos por toda ajuda.
eu sei que o evento é para o objeto focado porém não estava funcionando por isso tive que colocar esta ´marreta´ de perguntar se o objeto estava focado. Quanto à passar para o próximo eu realmente coloquei o comando para ir para o próximo edit porque é necessário que isso ocorra na hora da digitação. Só que assim que o próximo edit é focado, a tela de pesquisa deste campo é chamada sem que pra isso tecle o F2...como resolvo isso? (detalhe: no primeiro edit, tudo funciona tranquilo. É a partir do primeiro evento keydown que acontece isso a cada edit focado).
Agradeço a todos por toda ajuda.
GOSTEI 0
Micheus
01/11/2006
Ah! aproveitando, uma coisa que me intrigou...tem como usar um Align = Center no texto do Edit? desculpem a ignorância...mas eu não encontrei algo assim nele...acredito que ele não tem essa propriedade
Se vc não quizer instalar um novo componente para isto, poderia definir uma nova classe e criá-la dinamicamente no OnCreate do seu form. Ex.:inteface type TEditCentered = class(TEdit) private procedure CreateParams(var Params: TCreateParams); override; end; TForm1 = class(TForm) ... private Edit2: TEditCentered; end; ... implementation procedure TEditCentered.CreateParams(var Params: TCreateParams); begin inherited; Params.Style := Params.Style or ES_CENTER; end; procedure TForm1.FormCreate(Sender: TObject); begin Edit2 := TNewEdit.Create(Self); Edit2.Parent := Self; Edit2.Top := 240; Edit2.Left := 8; ... end;
GOSTEI 0
Marco Salles
01/11/2006
Olá Marco,
eu sei que o evento é para o objeto focado porém não estava funcionando por isso tive que colocar esta ´marreta´ de perguntar se o objeto estava focado.
[b:ba8ca70060]Mas tem que funcionar [/b:ba8ca70060], sem ter que usar truques..
Quanto à passar para o próximo eu realmente coloquei o comando para ir para o próximo edit porque é necessário que isso ocorra na hora da digitação.
Mas voce deve fazer isto depois de mostrado o formulário respctivo ao edit
Apertou F2 Então
Chama o Formulario [b:ba8ca70060]Showmodal[/b:ba8ca70060]
Vai para o Proximo Edit
e qual o comando que voce esta usando para passar para o proximo edit ???
Talves seria interresante colocar o fragemnto de codigo completo que faça esta mudança e apresentação do form para que possamos tentar simular este efeito meio que curioso
Acredito que todos os edits possuem mesmo codigo , pelo menos boa parte de codigos iguias , no que refere a apresentação do formulário e mudança do foco para o próximo edit
GOSTEI 0
Zooropa
01/11/2006
Saudações Marco,
conforme solicitado estou colocando o código logo abaixo:
Este código para o F2 possuem mais 3 edits, cada um com sua respectiva tela de pesquisa. Segue abaixo também o código do botão que chama uma das telas (o código é parecido para todos os botões, só muda a tela):
Repare que no bloco if eu tenho duas variáveis globais (wcodigo e wnome) que carregam o resultado da minha pesquisa e joga nos edits ligados ao botão. Após isso o foco passa para o próximo edit (eu estava usando o setfocus mas depois ordenei os edits pelo Tab Order) e aí é que acontece o meu caso, a próxima tela de pesquisa abre sem eu teclar o F2.
Agradeço a ajuda de todos.
conforme solicitado estou colocando o código logo abaixo:
procedure TFr_GradePlano.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_ESCAPE: BtSair.OnClick(nil); end; if Key = VK_RETURN then Perform(Wm_NextDlgCtl,0,0); if key = VK_F2 then begin if dbCodConta.Focused then begin btLista.OnClick(self); key := 0; end; if dbCodUnNeg.Focused then begin btListaUnNeg.OnClick(self); key := 0; end;
Este código para o F2 possuem mais 3 edits, cada um com sua respectiva tela de pesquisa. Segue abaixo também o código do botão que chama uma das telas (o código é parecido para todos os botões, só muda a tela):
procedure TFr_GradePlano.btListaClick(Sender: TObject); begin Application.createform(TFr_PesPlanoGer, Fr_PesPlanoGer); Fr_PesPlanoGer.Showmodal; if wcodigo <> ´´ then begin dbCodConta.Text := wcodigo; dbDescConta.text := wnome; wcodigo := ´´; wnome := ´´; Pesq := 1; LoadGradePlano; end; end;
Repare que no bloco if eu tenho duas variáveis globais (wcodigo e wnome) que carregam o resultado da minha pesquisa e joga nos edits ligados ao botão. Após isso o foco passa para o próximo edit (eu estava usando o setfocus mas depois ordenei os edits pelo Tab Order) e aí é que acontece o meu caso, a próxima tela de pesquisa abre sem eu teclar o F2.
Agradeço a ajuda de todos.
GOSTEI 0
Siam
01/11/2006
...e aí é que acontece o meu caso, a próxima tela de pesquisa abre sem eu teclar o F2.
Pode ser que o evento KeyDown esteja executando mais de uma vez quando F2 é pressionado.Tente trocar onKeyDown por onKeyUp.
GOSTEI 0
Zooropa
01/11/2006
Olá Siam,
já fiz a modificação, também não funcionou. Pessoal, será que alguém pode fazer um teste usando o código igual ao meu e verificar o erro?
Já testei de tudo e já estou quase desistindo de usar esta opção no aplicativo.
Mesmo assim agradeço a ajuda de todos. Valeu mesmo!
já fiz a modificação, também não funcionou. Pessoal, será que alguém pode fazer um teste usando o código igual ao meu e verificar o erro?
Já testei de tudo e já estou quase desistindo de usar esta opção no aplicativo.
Mesmo assim agradeço a ajuda de todos. Valeu mesmo!
GOSTEI 0
Mrangel
01/11/2006
Tente Colocar só no onkeydown dos edits
if key = VK_F2 then
begin
btLista.OnClick(self);
end;
Marcelo Rangel
if key = VK_F2 then
begin
btLista.OnClick(self);
end;
Marcelo Rangel
GOSTEI 0
Marco Salles
01/11/2006
Pessoal, será que alguém pode fazer um teste usando o código igual ao meu e verificar o erro?
mas ta dificil ´zooropa´ entender o codigo...
[b:6af64eb811]no OnKeyDowm de um edit voce testa se o F2 foi pressionado[/b:6af64eb811].. Mas no mesmo conjunto de instruçoes voce testa se o foco esta em um dbedit ???
procedure TFr_GradePlano.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
bla..bla..bla..
//testa se o F2 foi presionado...
if key = VK_F2 then //caso tenha sido presiionado faça:
begin
//testa se o foco esta com o DbCodConta ??????
if dbCodConta.Focused then //Ora esta instrução sera falsa
//-->>>não sera executado
então fico sem entender a que pressupoe o codigo :cry: :cry:
GOSTEI 0
Zooropa
01/11/2006
Pessoal,
no evento OnKeyDown do form (usado inicialmente) eu verifico tudo. A tecla F2 foi pressionada? se sim, blz. Qual edit está focado? O edit fulano? blz, chama a tela de pesquisa fulano e depois de carregar passa para o cicrano. Só isso. Só que ao chegar no cicrano (sendo utilizando um Setfocus, tabOrder...o que for) o cicrano já chama a tela de pesquisa dele sem que eu aperte o F2. Independente do evento que eu use (KeyUp, KeyPress ou KeyDown), utilizando ou não um setfocus, basta passar para o próximo edit que a tela de pesquisa já se abre e eu só quero que abra ao pressionar o F2. Resumindo, se eu tiver dez edits um após o outro eu só preciso pressionar o F2 uma vez (no primeiro) que ele abre todas as telas de pesquisa uma após a outra e eu não quero isso.
Obrigado por toda a ajuda! Esse lance tá moendo...
no evento OnKeyDown do form (usado inicialmente) eu verifico tudo. A tecla F2 foi pressionada? se sim, blz. Qual edit está focado? O edit fulano? blz, chama a tela de pesquisa fulano e depois de carregar passa para o cicrano. Só isso. Só que ao chegar no cicrano (sendo utilizando um Setfocus, tabOrder...o que for) o cicrano já chama a tela de pesquisa dele sem que eu aperte o F2. Independente do evento que eu use (KeyUp, KeyPress ou KeyDown), utilizando ou não um setfocus, basta passar para o próximo edit que a tela de pesquisa já se abre e eu só quero que abra ao pressionar o F2. Resumindo, se eu tiver dez edits um após o outro eu só preciso pressionar o F2 uma vez (no primeiro) que ele abre todas as telas de pesquisa uma após a outra e eu não quero isso.
Obrigado por toda a ajuda! Esse lance tá moendo...
GOSTEI 0
Cabreu.jr
01/11/2006
Amigo, poste o seu código e o que voce quer fazer exatamente
GOSTEI 0
Emerson Nascimento
01/11/2006
foi postado o seguinte:
creio que estejam faltando [b:815cebebd4]elses[/b:815cebebd4] entre os [b:815cebebd4]ifs[/b:815cebebd4].
eles aparecem no exemplo abaixo e, além disso, passei a usar mais efetivamente o [b:815cebebd4]case[/b:815cebebd4]:
Saudações Marco,
conforme solicitado estou colocando o código logo abaixo:
(...) Agradeço a ajuda de todos.
procedure TFr_GradePlano.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_ESCAPE: BtSair.OnClick(nil); end; if Key = VK_RETURN then Perform(Wm_NextDlgCtl,0,0); if key = VK_F2 then begin if dbCodConta.Focused then begin btLista.OnClick(self); key := 0; end; if dbCodUnNeg.Focused then begin btListaUnNeg.OnClick(self); key := 0; end;
creio que estejam faltando [b:815cebebd4]elses[/b:815cebebd4] entre os [b:815cebebd4]ifs[/b:815cebebd4].
eles aparecem no exemplo abaixo e, além disso, passei a usar mais efetivamente o [b:815cebebd4]case[/b:815cebebd4]:
procedure TFr_GradePlano.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_ESCAPE: BtSair.OnClick(nil); VK_RETURN: Perform(Wm_NextDlgCtl,0,0); VK_F2: if dbCodConta.Focused then btLista.OnClick(self) else if dbCodUnNeg.Focused then btListaUnNeg.OnClick(self); end;
GOSTEI 0