Array
(
)

Problema com setfocus

Paulo
   - 18 nov 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:



Citação:
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:


Wiltonfenix
   - 18 nov 2005

Você está executando o SetFocus depois de um Exit. Se entrar naquela mensagem, ele nunca vai executar o SetFocus. Pq ele abandona a Procedure.


Paulo
   - 18 nov 2005

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.


Wiltonfenix
   - 18 nov 2005

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!


Rgaffo
   - 21 nov 2005

Paulo,

Na seguinte parte do seu código:

#Código

edCod.SetFocus; 
edCod.Clear;

edQde.Text:=´1´;


Tenta fazer assim:

#Código
edQde.Text:=´1´;

edCod.Clear;
edCod.SetFocus;


Sem mais,