Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kasp360

Problema com autoincremento usando tecla f2

Recommended Posts

Olá Gente bom dia! Estou com um probleminha no meu pequeno programa, é o seguinte:

Tenho uma base de dados firebird e estou usando os compoenete dbexpress.

Tambem estou usando duas tabela master\detalhe.

 

Quando eu clico F2 o programa abre o cupom e atribuir um numero sequencial via codigo para o meu campo "nrvenda", no caso eu estou usando esse codigo

 

procedure TFrm_frente.Button1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

var

i:integer;

begin

//gera codigo para venda

If Key = VK_F2 then

begin

DtmMovi.DtSetVENDAS.last;

i:=DtmMovi.DtSetVENDAS.FieldByName('nrvenda').AsInteger + 1;

DtmMovi.DtSetVENDAS.append;

DtmMovi.DtSetVENDAS.FieldByName('nrvenda').AsInteger:=i;

end

 

Ele atribui um numero sequencial ao numero da venda normal, o problema acontece quando eu coloco o codigo do produto ele abribuir 1 numero ao numero da venda que só deveria ser atribuiro se eu preciona-se f2 para abri outro cupom. Agora se eu for fazer isso via botão o comando sair normal, já tentei colocar esse comando no evento keypress mas dar erro o que pode esta acontecedo, se tiverem alguma luz...

 

De qualquer foma valeu caras!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Kasp360.

 

Pelo que posso perceber, o Evento que voce programou só será disparado quando o componente "Button" ganhar o Foco. Até estranhei, colocar eventos de teclado em botões que geralmente não são muito utilizados.

 

Minha sugestão é que voce colocasse esse código no Evento OnKeyDown de um componente TEdit ou até mesmo TDBEdit, porém a tecla F2 só funcionará quando o componente ganhar o Foco.

 

Outra sugestão melhor é que esse código funcionaria bem, se fosse de forma automática. Como ? Simples, por exemplo, colocando o código no Evento OnClick de um botão "Inserir Venda".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar quando a tecla f2 é pressionada, tente utilizar este codigo no evento OnTimer de um TTimer:

 

if (GetKeyState(113) < -0) then
	Showmessage('Tecla F2 pressionada');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente, quando trabalho com eventos em teclas do tipo F1, F2, eu faço o seguinte: no Form, programo o evento OnKeyPress do mesmo para capturar o pressionamento da tecla desejada e ativo a propriedade KeyPress dele (não lembro agora se é este o nome exato da propriedade, estou sem o delphi instalado aqui no trabalho). Assim, enquanto eu estiver naquele form, sempre que o atalho for pressionado o evento ligado a ele é disparado. Agora, quando quero que esta chamada seja feita especificamente em um componente, eu uso o OnKeypress do componente e não o onKeyDown, visto que são eventos diferentes...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kasp360 eu montei um teste:

 

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

If Key = VK_F2 then

begin

{Abri a tabela}

{Comando Append}

(Contador}

end;

end;

 

Inseri dados e salvei, ate aí normal.

 

A (Inclusão e o Contador) só disparão quando eu pressiono a tecla F2. Só não testei com o relacionamento mestre-detalhe.

 

Caso eu não tenha entendido muito bem sua dúvida, posta aí !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.