Problema com setfocus
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:
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:
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
Curtidas 0
Respostas
Wiltonfenix
18/11/2005
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].
GOSTEI 0
Paulo
18/11/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.
GOSTEI 0
Wiltonfenix
18/11/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!
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!
GOSTEI 0
Rgaffo
18/11/2005
Paulo,
Na seguinte parte do seu código:
Tenta fazer assim:
Sem mais,
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,
GOSTEI 0