Mas acredito que mta gente ainda ta loco atras de alguma forma de fazer os controles VScrollBar ou HScrollBar ou qualquer outro responder à rodinha.
Agora você vai aprender então como fazer o seu programa em Visual Basic 6 responder ao scroll do mouse.
Na verdade há alguns anos atrás encontrei na internet um código já pronto que ensinava a usar a rodinha. Mas na época não consegui fazer funcionar em otro projeto e desisti. Olhando agora eu não sei porque não consegui já q é tão facil de entender.
Mas há alguns dias atrás achei na minha casa aqui o projeto e consegui adaptar pra outros programas.
Pra quem quer ver, o projeto original é esse aqui:
Baseado nele, abaixo vou ensinar como fazer a sua VScrollBar responder ao scroll.
ATENÇÃO:
Só pra adiantar, esse procedimentos fazem um uso MUITO pesado de APIs. Você deve seguir EXATAMENTE como está abaixo. De preferência, SALVE o seu projeto antes de qualquer coisa e depois vá salvando a cada procedimento.
A princípio não faça NENHUMA alteração em nenhum parte do código por mais que pareça que não vai interferir em nada.
As APIs fazem uma comunicação com todo o ambiente Windows a ponto de apontar o endereço na memória da sua janela (apesar de eu estar falando bonito assim, tb não tenho ideia dos detalhes de como funciona) e qualquer besteira que você fizer pode causar o fechamento do Visual Basic sem aviso prévio e perda de informações não salvas. Por isso, SALVE SEMPRE.
Observação: O tutorial abaixo ensina como usar o scroll em apenas UM dos formulários do seu projeto.
Para a utilização do scroll em mais de um formulário, talvez mais pra frente eu poste aqui uma solução, tb porque no momento eu também estou com dificuldades para encontrar um método prático e que funcione certinho.
Primeiro de tudo, adicione um Module no seu projeto (se você já tiver um Module, é bom usar um separado só para as funções do Scroll). Em seguida, declare as seguintes variáveis, funções e constantes:
Option Explicit
Public roda As Boolean
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex 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
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
Private 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 GetProp Lib "user32" Alias "GetPropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String) As Long
Public Declare Function SetProp Lib "user32" Alias "SetPropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal hData As Long) As Long
Public Declare Function RemoveProp Lib "user32" Alias "RemovePropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String) As Long
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _ ByVal uAction As Long, _ ByVal uParam As Long, _ ByVal lpvParam As Any, _ ByVal fuWinIni As Long) As Long
Public Declare Function GetSystemMetrics Lib "user32" ( _ ByVal nIndex As Long) As Long
Public Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A
Private Const WHEEL_DELTA = 120
Public Const SM_MOUSEWHEELPRESENT = 75
Public Function HiWord(dw As Long) As Integer If dw And &H80000000 Then HiWord = (dw \ 65535) - 1 Else HiWord = dw \ 65535 End If End Function
Public Function LoWord(dw As Long) As Integer If dw And &H8000& Then LoWord = &H8000 Or (dw And &H7FFF&) Else LoWord = dw And &HFFFF& End If End Function[/code]
Agora, abra o formulário que possui a Scroll Bar e adicione os seguintes códigos nos eventos Load e UnLoad:
[code]Private Sub Form_Load() SetProp Form1.hwnd, "PrevWndProc", SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WndProc)
If GetSystemMetrics(SM_MOUSEWHEELPRESENT) Then roda = True Else roda = False SetWindowLong Form1.hwnd, GWL_WNDPROC, GetProp(Form1.hwnd, "PrevWndProc") RemoveProp Form1.hwnd, "PrevWndProc" End If End Sub
Private Sub Form_Unload(Cancel As Integer) If roda Then SetWindowLong Form1.hwnd, GWL_WNDPROC, GetProp(Form1.hwnd, "PrevWndProc") RemoveProp Form1.hwnd, "PrevWndProc" Set Form1 = Nothing End If End Sub
A variável roda é um flag pra guardar se o mouse possui scroll ou não. Se não possuir ele já desativa a função que lê o mouse. Caso ele possua, ele só vai desativar no UnLoad do formulário.
!!!IMPORTANTE!!!!Preste atenção ao NOME do seu formulário. No código acima, substitua Form1 pelo nome do seu formulário em TODAS as ocorrências. Atenção que não adianta usar o atalho e escrever Me em vez do nome do formulário. TEM QUE SER o nome.ATENÇÃO:Ao ativar a função que lê o mouse, o Windows vai marcar sua janela como referência. Por isso, NÃO CANCELE a execução no editor de códigos clicando no botão Stop, pois se fizer isso e a função que lê o mouse não for desativada o Windows ainda vai querer ler a sua janela o que pode causar erros enquanto você não reiniciar o computador.
Para finalizar, no MODULE, adicione a função que lê o mouse:
Public Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOUSEWHEEL Then
If (HiWord(wParam) / WHEEL_DELTA) < 0 Then 'RODANDO PARA BAIXO With Form1.VScroll1 If .Value < .Max Then .Value = .Value + 1 End With Else 'RODANDO PARA CIMA With Form1.VScroll1 If .Value > .Min Then .Value = .Value - 1 End With End If
DefWindowProc hwnd, uMsg, wParam, lParam Else WndProc = CallWindowProc(GetProp(Form1.hwnd, "PrevWndProc"), hwnd, uMsg, wParam, lParam) End If End Function[/code]
Essa é a função que, a cada instante, responde aos eventos do mouse. O código procura especificamente quando a roda for girada e, no caso, ele roda a VScrollBar. Você pode alterar a parte da ScrollBar como te for conveniente dependendo da resposta que você quer dar à girada da rodinha.
ATENÇÃO- Novamente, altere Form1 para o nome do seu formulário em todas as ocorrências.
- NÃO ALTERE O NOME DA FUNÇÃO WndProc
Pronto. Gire a roda pra ver a ScrollBar se mexer.
Note também, que o código acima vai mover a ScrollBar não importa a localização do mouse. Se você tiver outras ScrollBars e quiser mover uma específica de acordo com a localização, cabe a você fazer a programação correta.
Para isso é relativamente simples, pelo evento MouseMove do formulario pegar a posicao do mouse e assim, utilizando variaveis globais, adaptar na funcao acima pra tomar determinada ação dependendo da posição.
Também, abaixo está um link com um projeto de exemplo de como trabalhar com múltiplas ScrollBars.
Como vocês viram, é preciso muito cuidado pra mexer com essas funções.
Pra qualquer dúvidas que vocês tiverem, BAIXE AQUI o projeto com o código funcionando:http://rapidshare.com/files/70696444/RodaDoMouse.zip.html
Nesse link você encontra dois projetos. Um deles é o exemplo prático desse tutorial, no caso de você não conseguir fazer, você vai ter o exemplo pronto pra poder olhar.
O segundo projeto é um exemplo de como trabalhar com múltiplas ScrollBars.
Últimas Considerações:
Resumindo, trabalhar com o Scroll do Mouse no Visual Basic 6 é uma tristeza. O que eu recomendo é que você adicione as funções no Module, ponha o código no formulário pra ativar a função, teste e veja se funciona mas, enquanto estiver ainda desenvolvendo o projeto, deixe o código do formulário todo comentado pra não atrapalhar os seus testes referente ao resto do programa. Ative o código somente quando for liberar o programa pronto.
O programa original (link lá em cima) ensina também a saber quando a rodinha é girada com o Ctrl ou Shift, ou algum botão pressionado, dêem uma olhada lá.
Só pra constar, a função WndProc pode ler qualquer ação do mouse, mas no código acima está focado apenas no girar da rodinha.
Mas, por exemplo, você pode programar uma ação pra quando ele clicar na rodinha (considerada como botão do meio do mouse), assim como você faz pra abrir o link em uma nova aba no FireFox.
Você só precisaria declarar a constante:
[code]Private Const WM_MBUTTONUP = &H208
E adicionar a programação correta na função WndProc:
Public Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOUSEWHEEL Then ... ElseIf uMsg = WM_MBUTTONUP Then MsgBox "Apertou botão do meio!" Else WndProc = CallWindowProc(GetProp(Form1.hwnd, "PrevWndProc"), hwnd, uMsg, wParam, lParam) End If End Function[/code]
Aqui está o Enum de todas as ações possíveis do mouse:
Pergunta
kuroi
Nesse tópico aqui http://scriptbrasil.com.br/forum/index.php?showtopic=82391 o nosso amigo fabyo postou uma solucao pra como utilizar a rodinha do mouse no editor de codigo do Visual Basic.
Mas acredito que mta gente ainda ta loco atras de alguma forma de fazer os controles VScrollBar ou HScrollBar ou qualquer outro responder à rodinha.
Agora você vai aprender então como fazer o seu programa em Visual Basic 6 responder ao scroll do mouse.
Na verdade há alguns anos atrás encontrei na internet um código já pronto que ensinava a usar a rodinha. Mas na época não consegui fazer funcionar em otro projeto e desisti. Olhando agora eu não sei porque não consegui já q é tão facil de entender.
Mas há alguns dias atrás achei na minha casa aqui o projeto e consegui adaptar pra outros programas.
Pra quem quer ver, o projeto original é esse aqui:
http://rapidshare.com/files/70659407/MouseWheel.zip.html
Baseado nele, abaixo vou ensinar como fazer a sua VScrollBar responder ao scroll.
ATENÇÃO:
Só pra adiantar, esse procedimentos fazem um uso MUITO pesado de APIs. Você deve seguir EXATAMENTE como está abaixo. De preferência, SALVE o seu projeto antes de qualquer coisa e depois vá salvando a cada procedimento.
A princípio não faça NENHUMA alteração em nenhum parte do código por mais que pareça que não vai interferir em nada.
As APIs fazem uma comunicação com todo o ambiente Windows a ponto de apontar o endereço na memória da sua janela (apesar de eu estar falando bonito assim, tb não tenho ideia dos detalhes de como funciona) e qualquer besteira que você fizer pode causar o fechamento do Visual Basic sem aviso prévio e perda de informações não salvas. Por isso, SALVE SEMPRE.
Observação: O tutorial abaixo ensina como usar o scroll em apenas UM dos formulários do seu projeto.
Para a utilização do scroll em mais de um formulário, talvez mais pra frente eu poste aqui uma solução, tb porque no momento eu também estou com dificuldades para encontrar um método prático e que funcione certinho.
Primeiro de tudo, adicione um Module no seu projeto (se você já tiver um Module, é bom usar um separado só para as funções do Scroll). Em seguida, declare as seguintes variáveis, funções e constantes:
A variável roda é um flag pra guardar se o mouse possui scroll ou não. Se não possuir ele já desativa a função que lê o mouse. Caso ele possua, ele só vai desativar no UnLoad do formulário. !!!IMPORTANTE!!!! Preste atenção ao NOME do seu formulário. No código acima, substitua Form1 pelo nome do seu formulário em TODAS as ocorrências. Atenção que não adianta usar o atalho e escrever Me em vez do nome do formulário. TEM QUE SER o nome. ATENÇÃO: Ao ativar a função que lê o mouse, o Windows vai marcar sua janela como referência. Por isso, NÃO CANCELE a execução no editor de códigos clicando no botão Stop, pois se fizer isso e a função que lê o mouse não for desativada o Windows ainda vai querer ler a sua janela o que pode causar erros enquanto você não reiniciar o computador. Para finalizar, no MODULE, adicione a função que lê o mouse: E adicionar a programação correta na função WndProc: Editado por kuroiLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.