CRIAR UM BOTAO PRA CADA TECLA

NETOCAZUZA 03/08/2010 17:03:31
#349316
Tenho um programa que tem uma função que toma algumas atitudes de acordo a tecla pressionada. O código já ta funcionando da seguinte forma:
[txt-color=#0000f0]If KeyCode = vbKeyF2 Then[/txt-color] e aí ele faz ou não o comando. Isso já tá pronto e funcional, de modo que eu vou apertando as teclas do teclado pra tomar decisões.
O que eu gostaria agora, era criar um botão no meu form que ao ser clicado, executasse o mesmo código. No exemplo acima, a tecla F2 do teclado faz essa ação, então quero desenhar uma botão F2 no meu form, e dar a opção de o usuário teclar F2 (no teclado), ou clicar F2 através desse botão no form, tudo com o mesmo código.
JONATHANSTECKER 03/08/2010 17:09:58
#349317
Resposta escolhida
Crie um método que faça essa função, e no botão ou no evento da tecla F2 chame esse método.
Acredito ser a forma mais prática de fazer isso.
JAMESBOND007 03/08/2010 17:10:37
#349318
isto ira te ajudar leia e faça o download.
http://www.macoratti.net/vb_pdv1.htm
NETOCAZUZA 04/08/2010 08:49:33
#349367
Esquece, mano. Eu queria uma coisa bem mais simples, sem ter que ficar mexendo no código que tá com um monte de select case e portanto confuso. Não tem como apenas colocar um código lá no evento click do botão, dizendo que ele é igual a tecla não? Tipo um comando mais ou menos assim:
commandbutton1_click = vbkeyf2
Pois assim eu teria que fazer apenas uma alteração no botão, sem mexer no código original, então se der errado, basta tirar o botão que o programa vai estar normal, tudo funcionando novamente. Caso seja possível gostaria da sintaxe.
JONATHANSTECKER 04/08/2010 09:19:07
#349382
Neto, como indiquei logo acima... Faça dessa forma que não encomodará e você não vai ficar repetindo o código...

Citação:

Crie um método que faça essa função, e no botão ou no evento da tecla F2 chame esse método.
Acredito ser a forma mais prática de fazer isso.



[txt-color=#007100][ô] Seu método[/txt-color]
Sub [txt-color=#e80000]F10[/txt-color] ()
MsgBox([Ô]F10[Ô])
End Sub

[txt-color=#007100][ô] No evento click do botão[/txt-color]
Private Sub command1_Click
[txt-color=#e80000]F10[/txt-color]
exit sub

[txt-color=#007100][ô] Quando pressionada a tecla F10[/txt-color]
[txt-color=#e80000]F10[/txt-color]

Jonathan Stecker
PEGUDO 04/08/2010 09:32:01
#349386
Cara, vamos se assim eu consigo te ajudar:

se seu código estiver assim:

[txt-color=#0000f0]If[/txt-color] KeyCode = vbKeyF2[txt-color=#0000f0] then [/txt-color]MsgBox([Ô]F2 pressionada[Ô])

faça assim:

[txt-color=#0000f0]If[/txt-color] KeyCode = vbKeyF2[txt-color=#0000f0] then [/txt-color]Chama_MsgBox()

Crie um Private, separadamente:

[txt-color=#0000f0]Private sub [/txt-color]Chama_MsgBox()
MsgBox([txt-color=#e80000][Ô]F2 pressionada[Ô][/txt-color])
[txt-color=#0000f0]End Sub[/txt-color]


Aí você desenha o botão, da forma que desejar, e coloque o código:

[txt-color=#0000f0]Private Sub[/txt-color] BtnOk_Click()
Call Chama_MsgBox()
[txt-color=#0000f0]End Sub[/txt-color]

Espero ter ajudado.
NETOCAZUZA 04/08/2010 09:54:50
#349390
Rapaziada, valeu pela força mesmo, mas como to constatando, nada em vb é simples. Tudo tem que dar uma enrolada na cabeça da gente. Eu to entendendo tudo o que me passaram e sei que todas as dicas funcionam em outras situações, mas não to conseguindo enxergar como aplicar no meu caso, sem mexer no código original. Como eu disse, o programa tem uma sub form_keydown que verifica que tecla foi pressionada e faz a ação... Se eu chamar a sub de dentro do evento de um botão, ela vai fazer todos os testes da sub, e não é isso que eu quero. Seria apenas mais uma opção para o usuário, caso ele esteja usando o mouse no momento. O clique nesse botão já teria que ser a resposta e não entrar na sub novamente senão ficaria num looping infinito. Não tem realmente nada mais simples pra fazer, sem mexer no código original?
Queria apenas dizer no click do meu botão que ele equivale a pressionar a tecla F2 nesse teste da sub keydonw, o clique na verdade já seria a resposta..
sub form_keydown (opções) selectcase case1, case2, case3, etc... sendo que os case seriam F1,F2,F3, etc.
Pronto... essa é a forma como o programa tá funcionando.. nessa sub form_keydown que eu não quero mexer, e quando eu teclo, funciona perfeito.
Então só queria dizer que o clique no botão 1 equivale a pressionar F1, clique no botão 2 equivale a pressionar F2 e assim sucessivamente. Tudo isso sem ter que mexer no código original, só colocando o código nos botões. Talvez não tenha como, mas é assim que to tentando entender.
SACOFRITO 04/08/2010 10:32:19
#349399
Faz assim
Form_keydown ()
if keycode=113 then
funcaof2
end if
end sub


function funcaof2()
executaacao
end function

seubotao_click()
funcaof2
end sub
JONATHANSTECKER 19/03/2011 00:49:18
#368537
Favor ENCERRAR o tópico já que problema foi resolvido!
MARCELO.TREZE 19/03/2011 12:56:34
#368561
basta usar senkeys

coloque seus botões como array ex:

crie um botão mude a propriedade index=0 depois copie o mesmo e vai colando

fiará assim

botao(0)
botao(1)
....

depois no key press deste botão cole

Private Sub Botao_Click(Index as Integer)
Select Case Index
Case 0
Sendkey [Ô]{tab}[Ô]
case 1
[ô] valor do sendkey desejado e pronto
End Select
End Sub

Tópico encerrado , respostas não são mais permitidas