Problema com setfocus

18/11/2005

No evento OnKeyDown de um TJvEdit, de nome edCod, eu faço:
if key = 13 then.... tudo certinho e etc... Acontece que no final de tudo, ainda dentro da procedure, eu chamo novamente com setfocus, o edit em questão, ou seja, edCod.SetFocus; Só que não vai, quem recebe o foco é o edQde e que não deveria. Vi o TabOrder e está tudo perfeito. Dentro do evento, são chamadas duas procedures, o qual olhei se não havia um chamado para edQde e nada, tudo normal, então porque edCod não recebe o foco no final de tudo? Coloquei o setfocus fora do if key = 13...end; e tbm não funcionou. O q devo fazer?

Eis meu código no OnKeyDown do JvEdit

Já coloquei o setfocus, dentro do try..finally, fora do try..finally, antes do finally, depois do finally, o bloco try..finally dentro do if key, fora do if key, o setfocus fora do if key, dentro do if key e fora do try, enfim, já tentei de tudo e nada. Mudei todas as opções possíveis. Aqui está o cósdigo:


procedure TfrmVenda.edCodKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = 13 then begin try if Dm.SGC_Conect.InTransaction=false then begin MessageDlg(´Você deve abrir uma venda primeiro!´, mtInformation, [mbOk],0); limpaedit(self); lbDesc.Caption:=´Caixa Livre´; lbPreco.Caption:=´´; exit; end; with Dm.ConsProd do begin Close; Sql.Clear; Sql.Add(´select * from estoque where codbar like ´+edCod.Text); open; end; lbDesc.Caption:=Dm.ConsProdDESCRICAO.Value; lbPreco.Caption:=floattostrf(Dm.ConsProdP_VENDA.AsFloat,ffCurrency,12,2); op:=´I´; itensvenda; baixaestoque; edCod.SetFocus; edCod.Clear; edQde.Text:=´1´; finally end; end; end;


Se estiver algo fora da lógica, é que continuo tentando, então coloco numa posição, retiro da posição e etc...

As procedures itensvenda e baixaestoque, são somente parâmetros para executar uma SP. Não faz menção a nenhum componente, a nada mesmo:


Paulo

Respostas

18/11/2005

Wiltonfenix

Você está executando o [b:59e130f1fa]SetFocus[/b:59e130f1fa] depois de um [b:59e130f1fa]Exit[/b:59e130f1fa]. Se entrar naquela mensagem, ele nunca vai executar o [b:59e130f1fa]SetFocus[/b:59e130f1fa]. Pq ele abandona a [b:59e130f1fa]Procedure[/b:59e130f1fa].


Responder Citar

18/11/2005

Paulo

Não é verdade, pois o exit é somente se a conexão não estiver ativa conforme está no código. E como disse, se algo estiver fora de lógica, é devido a várias tentativas, inclusive eu já até retirei o if da conexão para testar e se realmente sair da procedure, não executaria nada, o que não é verdade, pois está funcionando bem, exceto o setfocus. O problema tem haver com keypreview do form, mas não posso retirá-lo. Estou testando o keypreview dentro do key = 13, setando-o para false e após a execução de tudo, setando-o parat true, ainda não funcionou, mas é por aí o caminho. Vou testar mais aqui e qualquer coisa, posto a solução aki. Mas não tem nada a ver com o exit, pois ele só é chamado, caso a conexão não esteja ativa.


Responder Citar

18/11/2005

Wiltonfenix

Ah tá. Entendi...

Bom, você pode olhar duas coisas então para testar aí:

1. Ao invés do evento onKeyDown, tente usar onKeyPress. Use KeyDown só se for testar as teclas de função (F1,F2,F3,...)

2. Veja a propriedade TabOrder (não tenho certeza se o nome é esse), se está habilitada.

Posta aqui falando se deu certo ou conseguiu de outra forma.

Boa Sorte!


Responder Citar

21/11/2005

Rgaffo

Paulo,

Na seguinte parte do seu código:

edCod.SetFocus; 
edCod.Clear; 

edQde.Text:=´1´;


Tenta fazer assim:

edQde.Text:=´1´;

edCod.Clear; 
edCod.SetFocus;


Sem mais,


Responder Citar