José Quintas, a memoedit() não é sensível aos inputs por mouse.
Alexandre, grato, vou dar uma estudada. Quem sabe a gente acaba achando algo que contribui com todo mundo, né?
A memoedit() a que me refiro é um pequeno bloco de notas temporárias, não é importante saber se é para gravar, reformatar parágrafo, nada disso.
Bastaria que o usuário desse um clique no tabuleiro para que o programa grave o que estiver na janela de texto e volte ao jogo.
Por enquanto, baseando-me na resposta do caro Quintas e nesse tópico aqui (
https://pctoledo.org/forum/viewto ... =4&t=12152 ), o que tentei foi:
No programa principal:
Código: Selecionar todos
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
function MAIN()
HB_SETCODEPAGE('PT850')
HB_LANGSELECT('PT')
* setmode(25,80)
setmode(26,80)
set colo to
cls
set wrap on
set score off
set date brit
set century on
set cursor off
set eventmask to 255 // <- incluí esse set. 255 significa "qualquer tecla ou mouse", segundo o inkey.ch
e na função que chama a memoedit():
Código: Selecionar todos
xobs = memoedit(xobs,03,45,19,75,tipo,'usrme') // tipo é passado por parâmetro à função mtexto() que é a que contém essas linhas aí...
set curs off
dbcommitall()
retu
* funcao do usuario da memoedit()
func usrme(mstat,mlin,mcol)
loca mtecla := lastkey()
loca mretval := 0
if mstat = 0
// modo = idle
else
if mstat = 1 .or. mstat = 2 // tanto faz se mudou ou não o buffer, grave sempre, já que são apenas anotações temporárias
if mtecla = 27 .or. mtecla = 23 .or.;
(mtecla = 1002 .and. mlin >= 2 .and. mlin <= 20 .and. mcol >= 3 .and. mcol <= 39) // 1002 é o retorno de inkey() ao clique com botão esquerdo e essas coordenadas são as coordenadas do tabuleiro
mretval = 23
endi
elseif mstat = 3
// modo = inicialização da memoedit
endi
endi
retu mretval
Bem... contar um pouco da história: estou fazendo um programa para jogar Sudoku. Na tela desse programa há duas janelas lado-a-lado.
A da esquerda é o tabuleiro, onde há as 81 casas; a da direita, um bolo de anotações para dicas rápidas, que a gente anota do ladinho da folha quando joga um sudoku impresso...
Quando o usuário está jogando, se clicar com o botão esquerdo no tabuleiro, posiciona o curso na casa mais próxima do cursor. E se clicar com o mesmo botão na área em que está o bloco de notas, entra na memoedit(). Eu gostaria de que ele voltasse ao tabuleiro - e deixando gravado o que tivesse alterado no bloco de notas - clicando com o esquerdo no tabuleiro. Mas só consigo sair da memoedit() teclando ESC ou CTRL-W... A memoedit() como está, mesmo depois do "set eventmask = 255", está cega e surda ao mouse.
Tenho comentado sobre isso no tópico "Migrar Clipper para Harbour" mas não sem um pouco de constrangimento, já que o assunto talvez já esteja extrapolando em muito o assunto daquele tópico... Além de que é um tópico pinado, muito importante para quem chega e quer debater migração entre compiladores.
Se quiser dar uma olhada, eis aqui os fontes e o executável desse programa de Sudoku. Cuidado: não execute o sudoku.exe em qualquer lugar porque ele vai criar um monte de arquivos e tralhas, vai bagunçar o coreto... digo, a pasta em que for executado. Aqui criei a pasta "sudoku" sob a "Arquivos de programas", mas pode por onde quiser...
Grato!