kasp360 0 Denunciar post Postado Janeiro 6, 2010 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
Discorpio 1 Denunciar post Postado Janeiro 6, 2010 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
Raficcha 1 Denunciar post Postado Janeiro 7, 2010 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
Chrnos 30 Denunciar post Postado Janeiro 8, 2010 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
wllf 2 Denunciar post Postado Janeiro 9, 2010 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