Fórum Como ´limpar a variável key´ após utilizar o FormKeyDown? #332533
01/11/2006
0
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
Curtir tópico
+ 0Posts
01/11/2006
Aldus
Quanto ao alinhamento, o edit do delphi não tem alinhamento mesmo.
att
Mario
Gostei + 0
01/11/2006
Zooropa
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
02/11/2006
Rhalves
Begin
Key := #0;
ChamaForm;
End;
Gostei + 0
06/11/2006
Zooropa
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
06/11/2006
Renato.pavan
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
06/11/2006
Zooropa
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
06/11/2006
Campsoft
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
07/11/2006
Marco Salles
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
07/11/2006
Zooropa
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
07/11/2006
Micheus
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
08/11/2006
Marco Salles
[b:ba8ca70060]Mas tem que funcionar [/b:ba8ca70060], sem ter que usar truques..
Mas voce deve fazer isto depois de mostrado o formulário respctivo ao 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
08/11/2006
Zooropa
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
09/11/2006
Siam
Tente trocar onKeyDown por onKeyUp.
Gostei + 0
11/11/2006
Zooropa
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
11/11/2006
Mrangel
if key = VK_F2 then
begin
btLista.OnClick(self);
end;
Marcelo Rangel
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)