Quem gosta de utilizar os recursos do mouse em telas feitas com o Dialog System já deve ter reparado que existem algumas opções paramudar o ponteiro do mouse, movimentando-o por sobre determinados objetos na GS. Isso é feito com a função SET-MOUSE-SHAPE:
Além do "SYS-WAIT", posso utilizar ainda o "SYS-ARROW", "SYS-TEXT", "SYS-MOVE", "SYS-NWSE", "SYS-NESW", "SYS-WE", "SYS-NS" e "SYS-QUESICON". Pois bem. E se eu quiser usar como ponteiro do mouse, aquela "mãozinha" famosa, utilizada nos links dos browsers ? Bem, isso não é possível através do Dialog System, a não ser que eu crie um arquivo de cursor ".cur" e o especifique em um arquivo DS.ICN, por exemplo. Mas não é exatamente isso que eu quero.
Pesquisei então nas classes do NetExpress. A classe MouseCursor é quem cria os ponteiros do mouse para as aplicações. Mas não existe também nessa classe, métodos para criação da "mãozinha", somente dos ponteiros mencionados acima. Resolvi olhar o programa-fonte dessa classe - sim, o programa-fonte está no seu micro - para ver como eram criados os objetos. Olhei o método de classe "SYS-WAIT", para ver como ele retornava o objeto:
Teoricamente, eu já teria uma "mãozinha" como ponteiro de mouse, referenciado acima pelo objeto umCursor. Bastava setar esse objeto em uma "window" por exemplo, pra ver se tudo havia funcionado.
Utilizei o método "SetCursor" e pronto. A Microfocus não me deu nenhuma "mãozinha" mas ela estava lá, passeando por sobre a tela.
MUDAR-PONTEIRO
SET-MOUSE-SHAPE WIN-PRINCIPAL "SYS-WAIT"
Além do "SYS-WAIT", posso utilizar ainda o "SYS-ARROW", "SYS-TEXT", "SYS-MOVE", "SYS-NWSE", "SYS-NESW", "SYS-WE", "SYS-NS" e "SYS-QUESICON". Pois bem. E se eu quiser usar como ponteiro do mouse, aquela "mãozinha" famosa, utilizada nos links dos browsers ? Bem, isso não é possível através do Dialog System, a não ser que eu crie um arquivo de cursor ".cur" e o especifique em um arquivo DS.ICN, por exemplo. Mas não é exatamente isso que eu quero.
Pesquisei então nas classes do NetExpress. A classe MouseCursor é quem cria os ponteiros do mouse para as aplicações. Mas não existe também nessa classe, métodos para criação da "mãozinha", somente dos ponteiros mencionados acima. Resolvi olhar o programa-fonte dessa classe - sim, o programa-fonte está no seu micro - para ver como eram criados os objetos. Olhei o método de classe "SYS-WAIT", para ver como ele retornava o objeto:
A constante IDC-WAIT que aparece no método encontra-se no arquivo WINDOWS.CPY. Esse arquivo contém todas as definições de variáveis e constantes que devem ser utilizadas com as API´s do Windows. Ela possui o valor 32514. Baseado nessas informações, resolvi procurar no Google alguma informação sobre essas constantes e seus valores. Rapidamente descobri uma que me interessava: IDC-HAND, com o valor 32649. Essa constante não está documentada no WINDOWS.CPY. Pensei então que poderia fazer a mesma coisa que o método "SYS-WAIT", só que passando como parâmetro a constante IDC-HAND com o seu valor 32649.method-id. "SYS-WAIT".
local-storage section.
01 aCursorType pic x(4) comp-5.
01 aCursorId pic x(4) comp-5.
linkage section.
01 lnkCursor usage object reference.
procedure division returning lnkCursor.move IDC-WAIT to aCursorType
invoke super "new" returning lnkCursor
invoke lnkCursor "initialize" using aCursorType
exit method.
end method "SYS-WAIT".
working-storage section.
77 i pic s9(09) comp-5 value zeros.78 IDC-HAND value 32649.
procedure division.invoke MouseCursor "new" returning umCursor
move IDC-HAND to i
invoke umCursor "initialize" using i
Teoricamente, eu já teria uma "mãozinha" como ponteiro de mouse, referenciado acima pelo objeto umCursor. Bastava setar esse objeto em uma "window" por exemplo, pra ver se tudo havia funcionado.
invoke umaWindow "setCursor" using umCursor
Utilizei o método "SetCursor" e pronto. A Microfocus não me deu nenhuma "mãozinha" mas ela estava lá, passeando por sobre a tela.
Nenhum comentário:
Postar um comentário