WM_MOUSEWHEEL - DBGrid Scroll, mas...
Sei que o DBGrid é decencente de TControl. Deveria funcionar a procedure abaixo quando colocado no escopo private do formulário.
Quando não estou com o foco no DBGrid, a procedure executa, porem parece que o DBGrid cancela a ação do scroll do mouse nesta procedure. Venho até vocês para buscar ajuda. Sei que posso utilizar a captura da mensagem responsável pelo movimento do scroll do mouse para tratar. Estou usando o [color=brown:4e214c4f51]Delphi 6[/color:4e214c4f51]. (Aqui na empresa utiliza o D6 e D7, neste sistema utiliza o D6)
Aqui na empresa não posso obstruir os componentes e nem criar sem que tenha vinda um conjunto de ideias suficiente para gerar um componente com um numero de opções adicionais. Portanto, criar um componente que faça isso está fora de cogitação.
O sistema em si tem milhares de exceções, enfim, usar o [color=darkblue:4e214c4f51]ApplicationEvents[/color:4e214c4f51] também não poderia.
Estou num beco onde so posso recorrer a mensagem responsável pelo scroll. [color=blue:4e214c4f51]Preciso capturar o scroll do mouse quando o foco estiver num DBGrid.[/color:4e214c4f51]
Alguem pode me ajudar!?
...
private
{ Private declarations }
procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;
public
...Quando não estou com o foco no DBGrid, a procedure executa, porem parece que o DBGrid cancela a ação do scroll do mouse nesta procedure. Venho até vocês para buscar ajuda. Sei que posso utilizar a captura da mensagem responsável pelo movimento do scroll do mouse para tratar. Estou usando o [color=brown:4e214c4f51]Delphi 6[/color:4e214c4f51]. (Aqui na empresa utiliza o D6 e D7, neste sistema utiliza o D6)
Aqui na empresa não posso obstruir os componentes e nem criar sem que tenha vinda um conjunto de ideias suficiente para gerar um componente com um numero de opções adicionais. Portanto, criar um componente que faça isso está fora de cogitação.
O sistema em si tem milhares de exceções, enfim, usar o [color=darkblue:4e214c4f51]ApplicationEvents[/color:4e214c4f51] também não poderia.
Estou num beco onde so posso recorrer a mensagem responsável pelo scroll. [color=blue:4e214c4f51]Preciso capturar o scroll do mouse quando o foco estiver num DBGrid.[/color:4e214c4f51]
Alguem pode me ajudar!?
.lg.
Curtidas 0
Respostas
Danielrsanches
17/07/2009
o ApplicationEvents não funcionaria ??? pq ??
seria só colocar uma checagem se o foco está no Grid... (DBGrid1.Focused)....
abraços !!!
procedure Tform_principal.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var i: SmallInt; begin if Msg.message = WM_MOUSEWHEEL then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; i := HiWord(Msg.wParam) ; if i > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end; end;
seria só colocar uma checagem se o foco está no Grid... (DBGrid1.Focused)....
abraços !!!
GOSTEI 0
.lg.
17/07/2009
Como eu falei. O sistema já está grande, para a equipe e ainda mais o meu chefe não permite colocar o [color=darkblue:3e60d17246]applicationEvents[/color:3e60d17246], pois há muitas exceções e mensagens sendo tratadas em muitas partes do sistema. O TApplicationEvents já causou um problema uma vez quando um estagiário aqui resolveu utiliza-lo para gerar um log de exceções. A ideia e a intenção é boa, mas ele eliminou todas as exceções tratadas no sistema. O patrão não gostou. (Não adiantou colocar [color=green:3e60d17246]inherited[/color:3e60d17246])
A questão não é porque não funcionaria, é porque eu não posso usa-lo mesmo. Até gostaria de usa-lo para tratar tudo.
Ps.: ´Seria interessante se existisse um [color=darkblue:3e60d17246]FormEvents[/color:3e60d17246], assim não capturasse tudo da aplicação. Nem todos os forms podem ser declarados na [b:3e60d17246]uses[/b:3e60d17246] do form principal.´
Aprecio sua iniciativa, se souber de mais alguma solução...
Atenciosamente,
.LG.
A questão não é porque não funcionaria, é porque eu não posso usa-lo mesmo. Até gostaria de usa-lo para tratar tudo.
Ps.: ´Seria interessante se existisse um [color=darkblue:3e60d17246]FormEvents[/color:3e60d17246], assim não capturasse tudo da aplicação. Nem todos os forms podem ser declarados na [b:3e60d17246]uses[/b:3e60d17246] do form principal.´
Aprecio sua iniciativa, se souber de mais alguma solução...
Atenciosamente,
.LG.
GOSTEI 0
Woinch
17/07/2009
A impressão que passa olhando os fontes do Delphi (não sei se é o caso do Delphi 6, mas no 2007 está assim) é que já existe um evento para tratar essas mensagens: procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; (dê uma olhada no componente TCustomGrid). Já tentou utilizar ele?
GOSTEI 0
Danielrsanches
17/07/2009
só uma pergunta:
o evento OnMouseWheel do Form não resolveria seu problema ???
o evento OnMouseWheel do Form não resolveria seu problema ???
GOSTEI 0
.lg.
17/07/2009
A impressão que passa olhando os fontes do Delphi (não sei se é o caso do Delphi 6, mas no 2007 está assim) é que já existe um evento para tratar essas mensagens: procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; (dê uma olhada no componente TCustomGrid). Já tentou utilizar ele?
Implementei, porém, não surtiu nenhum efeito.
só uma pergunta:
o evento OnMouseWheel do Form não resolveria seu problema ???
Infelizmente eu já havia tentado!
O problema é que com o DBGrid, esse evento do form não é executado. Parece que o dbgrid faz o foco do form ser perdido para o grid, fazendo o evento não acontecer enquanto o mouse esta sobre o dbgrid. Mas o evento acontece quando deixa a posição do grid.
GOSTEI 0