Como saber se a barra de rolagem do ScrollBox foi clicada?

19/09/2004

Preciso saber se a barra de rolagem do ScrollBox foi clicada. Preciso disso para o Delphi 3. No Delphi 7 eu tenho o evento OnConstrainedResize que permite resolve o problema mas no delphi 3 ele não está disponível. Eu só preciso saber se o usuário clicou ou não na barra de rolagem. Não é necessário identificar se foi para cima ou para baixo ou se foi a horizontal ou a vertical. Tentei processar as mensagens WM_HSCROLL e WM_VSCROLL mas não tá rolando. Aguem sabe como fazer?


Tatuweb

Respostas

19/09/2004

Beppe

Nunca precisei disso...mas como as barras de rolagem fazem parte da área não-cliente, tente a mensagem WM_NCMOUSEDOWN, etc...

Boa sorte!


Responder Citar

19/09/2004

Tatuweb

Beppe,

o Delphi não reconheceu a mensagem WM_NCMOUSEDOWN mas o que vc disse ajudou bastante. Eu usei a mensagem WM_NCLBUTTONDOWN que resolveu o problema. O único incoveniente é que ela captura também os cliques em cima do menu e da barra de título mas para o que estou fazendo não chega a ser um problema. Valeu pela ajuda!


Responder Citar

19/09/2004

Beppe

o Delphi não reconheceu a mensagem WM_NCMOUSEDOWN mas o que vc disse ajudou bastante. Eu usei a mensagem WM_NCLBUTTONDOWN que resolveu o problema. O único incoveniente é que ela captura também os cliques em cima do menu e da barra de título mas para o que estou fazendo não chega a ser um problema. Valeu pela ajuda!

É verdade, a mensagem WM_NCMOUSEDOWN não existe, tenho a mania de confundir os eventos da VCL com mensagens do Win32, mas era só o caso de tentar outras mensagens.

Sobre a captura de outros cliques tu pode verificar a posição do mouse.

Se quiser tentar, tenho quase certeza de que cada barra de rolagem recebe um handle, e é uma janela-filha do teu controle. Então pode instalar uma nova WindowProc para ela, que receberá então WM_LBUTTONDOWN.

T+


Responder Citar