Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
114
Assunto : Visual Basic
Titulo: Desativando o menu popup das textbox

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



É normal que sejam criadas validações da entrada de dados no KeyPress. Porém mesmo quando isso é feito as textbox mantém um furo : O menu direito do mouse possui as instruções copy/paste e a utilização de tais instruções não passa pela execução do KeyPress.

Para resolver este problema a solução é desativar o menu exibido quando o botão direito é clicado em uma textbox. Para isso é necessário utilizarmos recursos de sub-classing para interceptar a mensagem de clique do botão direito enviada pelo windows e criar uma nova resposta para a ação.

Recomendo que leiam o artigo sobre sub-classing para melhor entenderem o código abaixo. De qualquer forma, vale o aviso de que sub-classing é um processo instável : Qualquer pequeno erro e seu Visual Basic será rapidamente retirado da memória.

Vamos então ao código. Em um módulo de código criaremos as declarações de API's e funções que ativem e desativem o sub-classing para uma determinada caixa de texto. Eis o código a ser adicionado em um módulo :

Option Explicit


Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC As Long = (-4)
Public Const WM_RBUTTONUP As Long = &H205
Public defWndProc As Long


Public Sub Hook(hwnd As Long)

If defWndProc = 0 Then

defWndProc = SetWindowLong(hwnd, _
GWL_WNDPROC, _
AddressOf WindowProc)
End If

End Sub


Public Sub UnHook(hwnd As Long)

If defWndProc > 0 Then

Call SetWindowLong(hwnd, GWL_WNDPROC, defWndProc)
defWndProc = 0

End If


End Sub


Public Function WindowProc(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Select Case uMsg
Case WM_RBUTTONUP

'this executes when the window is hooked

Case Else

WindowProc = CallWindowProc(defWndProc, _
hwnd, _
uMsg, _
wParam, _
lParam)
End Select

End Function
'--end block--'


No form chamaremos as funções Hook e Unhook para respectivamente ativarmos e desativarmos o sub-classing. Podemos então chamar a função Hook no load e a Unhook no Unload, para cada uma das textbox no formulário. Supondo que temos uma única textbox chamada Text1 o código ficará assim :

Private Sub Form_Load()
Hook Text1.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHook Text1.hwnd
End Sub




Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 2/1/2017 2:34:00 AM
nome: NmpoZaItAoJDacwRHAf
email: derby451@hotmail.com
comentário:
ijNE0N http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/31/2017 10:57:00 AM
nome: ceZKyFtEZdBGNCBRM
email: derby451@hotmail.com
comentário:
zCUyVm http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/30/2017 1:41:00 AM
nome: WVuTyVzUbmPdNfrEO
email: derby451@hotmail.com
comentário:
4F7IHE http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/30/2017 12:26:00 AM
nome: zkVqaFXNVzDuzHURi
email: jogcbfn@hotmail.com
comentário:
64ZZo1 http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 8:13:00 AM
nome: VABWTkXMFPtxaUe
email: jogcbfn@hotmail.com
comentário:
TZeB3c http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br