GARANTIR DESCONTO

Fórum Como ´limpar a variável key´ após utilizar o FormKeyDown? #332533

01/11/2006

0

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


Zooropa

Zooropa

Responder

Posts

01/11/2006

Aldus

No final do evento coloque: key:=0

Quanto ao alinhamento, o edit do delphi não tem alinhamento mesmo.

att
Mario


Responder

Gostei + 0

01/11/2006

Zooropa

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


Responder

Gostei + 0

02/11/2006

Rhalves

Cara, tentar utilizar assim:

Begin
Key := #0;
ChamaForm;
End;


Responder

Gostei + 0

06/11/2006

Zooropa

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:

case key of VK_F2:
     if Edit1.Focused then
        Chama a Pesquisa;


Se alguém puder me ajudar...


Responder

Gostei + 0

06/11/2006

Renato.pavan

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:
case key of VK_F2:
     if Edit1.Focused then
        Chama a Pesquisa;

Se alguém puder me ajudar...


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


Responder

Gostei + 0

06/11/2006

Zooropa

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.


Responder

Gostei + 0

06/11/2006

Campsoft

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)


Responder

Gostei + 0

07/11/2006

Marco Salles

Com voce faz duas coisas ao mesmo tempo ????

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


Responder

Gostei + 0

07/11/2006

Zooropa

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.


Responder

Gostei + 0

07/11/2006

Micheus

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;



Responder

Gostei + 0

08/11/2006

Marco Salles

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


Responder

Gostei + 0

08/11/2006

Zooropa

Saudações Marco,
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.


Responder

Gostei + 0

09/11/2006

Siam

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


Responder

Gostei + 0

11/11/2006

Zooropa

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!


Responder

Gostei + 0

11/11/2006

Mrangel

Tente Colocar só no onkeydown dos edits


if key = VK_F2 then
begin
btLista.OnClick(self);
end;

Marcelo Rangel


Responder

Gostei + 0

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

Aceitar