Pro meu caso, à primeira vista, não vai dar certo o outro uso.
Mas você pode tentar automatizar isso.
Basicamente vai precisar de um array de coordenadas, e das rotinas de criação, que usam o array dos desenhos pra wvt_paint(), que como já usa, não vai mudar seu modo de trabalho.
aMouseList pra usar no Inkey(), e aPaintList pra usar no WVT_Paint()
Na sua rotina de button, adiciona a parte de mouse em aMouseList e a parte do desenho em aPaintLIst.
Tipo....
Código: Selecionar todos
FUNCTION MyButton( top, left, bottom, right, cImage, cText, nKeyboard )
AAdd( aMouseList, { top,left, bottom, right, nKeyboard } )
AAdd( aPaintList, { || wvt_DrawImage( top, left, bottom, right, cImage } )
AAdd( aPaintList, { || wvt_DrawLabel( top, left, bottom, right, cText } )
RETURN Nil
E no Inkey, o tratamento que já deve fazer hoje, ou usando INKEYFILTER, ou SET KEY K_MOUSEDOWN, ou outro:
Código: Selecionar todos
DO WHILE nKey != K_ESC
nKey := Inkey(0)
IF nKey == K_MOUSEDOWN
FOR EACH aList IN aMouseList
IF MRow() >= aList[1] .AND. MCOL() >= aList[2] .AND. MROW() <= aList[3] .AND NROW() <= aList[4]
nKey := aList[5]
// conforme a situação Inkey(0);KEYBOARD Chr(aList[4]) ou hb_KeyPut() porque Chr() não vai atender F9 por exemplo
// e em algumas situações testar nkey não é suficiente, precisa do KEYBOARD/hb_KeyPut().
ENDIF
NEXT
ENDIF
ENDDO
Com isso, vai reduzindo seu fonte normal, e vai melhorando as rotinas conforme o que for acontecendo.
Sei que já disse várias vezes que não se trata do wvgpushbutton(), mas pode pensar nele.
Com ele, não vai precisar nem da conversão do inkey, e nem de ficar tratando wvt_Paint.
Nele é o contrário: vai ter que desabilitar, esconder ou destruir conforme o caso.
Mas.... vai ter que se conformar com o tamanho do texto dele
Com o wvt_DrawButton():
- tem que colocar na lista de wvt_Paint() e tem a rotina no inkey()
- no final do uso, limpa a lista de wvt_Paint()
- acho que não deixa usar resource, precisa do arquivo em disco
Com o wvgPushbutton():
- Apenas cria indicando o clique
- Destrói no final, ou esconde se for abrir janela/texto por cima (aqui é onde criar janelas facilita mais ainda)
- pode deixar o ícone em resource, embutido no EXE
Pode acabar gostando da troca.
Independente de usar wvt_DrawButton() ou wvgpushbutton(), uma rotina intermediária pode reduzir fonte.