Mouse e get´s especiais

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mouse e get´s especiais

Mensagem por MARCELOG »

Olá pessoal,
há um tempão um bug do xHarbour (0.995) vinha me atormentando.
O foco nos get´s especiais (pushbutton, checkbox, etc.) xHarbour
funcionavam beleza na primeira edição dos mesmos.
Todavia, por exemplo, depois de acessar e executar a tarefa de um pusuhbutton com o mouse, a referência para os demais get´s especiais ficava louca e eu não conseguia mais ativar o alvo.
Já postei algumas mensagens sobre o assunto neste forum e andei por diversos outros, não conseguindo muita coisa.
O Culik pegou um prg que postei e me devolveu sem o problema, mas ele utiliza o CVS e eu, pobre mortal, o ORG.
Então, fazendo testes, descobri que o método que testa o mouse HITTEST, não fazia a correta validação para "zerar" o número do próximo get.
Dessa forma, e acho importante informar aos companheiros que gostam de aplicação console como eu, até a próxima versão, se você usa os get´s especiais indicados, faça o seguinte para corrigir o problema:

Abra o TGETLIST.PRG e a faça as alterações em HITTEST -
Mude !lGUI para lGUI e compile/link o objeto alterado ao seu sistema.

Com certeza vai funcionar tudo direitinho, tal qual no CVS.

Espero ter ajudado.

MGS :*
Avatar do usuário
linux.eo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 09 Out 2005 19:23

Get, mouse, xharbour, clipper 5.3, superlib, visuallib, etc

Mensagem por linux.eo »

Marcelo,

Sou novato no meio Clipper, xHarbour, mas sou um
grande curioso e fuçador.

Nem aprendi a lidar com DBFs no Clipper, mas já
estou brincando com criação de LIBs e inventando
novos objetos.

Também gosto muito de modo console, e estou querendo
desenvolver uma lib sem C nem ASM, para xharbour,
criando um ambiente visual para rodar em ms-dos, freedos,
e linux.

Consegui reproduzir a fonte da VisualLib no Linux,
e o ambiente ficou idêntico.

Criei uma função que produz um botão GET, com movimento
ao ser pressionado.

O problema é que sou novato com clipper, e não conheço
os macetes dos objetos.

Consegui fazer a SuperLib 3.5 rodar no xHarbour,
com todos os seus exemplos funcionando,
aparentemente dando problema apenas no
sistema de Menu Bungee.

No caso do menu bungee, quando tenho um
dropdown dentro de outro, ele não aparece.

Seria como um sub-menu, no sistema do SuperLib.

Mudando de assunto, desenvolvi uma lib para criar GETs
em forma de botões.

function botao(nTop, nLft, cTit, nLar, nTip, cCbt, cCht, nCor, cVar1, nVal1, cMsg, bBlo)
// linha, coluna, titulo, largura, TIPO, corbotao, corhotkey, etc

Com a função que criei, basta usar:

nBtnTipo = 1
botao( 8,56,"OK",15,nBtnTipo,"w+/n*",,,"nA1",1,"Este e o botao OK")

nBtnTipo vai informar como desehar o botão.
Se 1, desenha botão igual ao do Edit do MS-DOS.
Se 2, desenha botão igual ao do VisualLib.
Se 3, desenha botão rodeado com caracteres de borda,
dando impressão de relevo.

Todos, tem visual de foco, e de pressionamento.

Acontece, que estou sem conseguir interagir
com o mouse, sobre estes GETs criados na marra.

Então, para testes, eu criei um formulário GET
idêndico ao DEMO do VisualLib.

Se você se mover com o teclado, tudo funciona
perfeito, ele passeia dos GETs para os botões,
volta dos botões para os GETs normalmente.

Ainda consegui brincar com as direções de saída:

local nInExit := oGet:exitstate // pega a direção em que ia sair
local nCursor := setcursor() // recebe o tipo atual de cursor
setcursor(0) // nao exibe cursor piscando

Você pode navegar sobre os botões usando
TAB, Shift-TAB, setas para cima, baixo, esquerda, direita.

Pode pressionar o botão com tecla Enter ou Espaço.

Até aí tudo bem, mas como o xHarbour trabalha
com mouse nativamente, acontece o seguinte:

Nos elementos GET normais, consigo alterar o
foco usando o mouse. Mas não consigo "entrar"
em um destes "meus" botões com o mouse.

E se eu "entrar"(focar) em um botão com as setas
do teclado, eu não consigo "sair"(desfocar) do
botão usando o mouse.

Ou seja, quando você foca um botão, estou de
alguma forma ignorando o mouse.

Qual função deve ser implementada dentro
de meu objeto GET, para que ele interaja
com o mouse do xHarbour?

Vi uma função chamada HitTest(), mas ainda
não encontrei material mais detalhado sobre
a mesma.

Agradeço se você ou mais alguém puder
informar que função deve ser usada
dentro de um objeto GET "virgem",
para interagir com o mouse no xHarbour
ou no Clipper 5.3.

Aproveitando, você conhece outra lib
para modo console, como a SuperLib?

Grato.
Avatar do usuário
linux.eo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 09 Out 2005 19:23

Mensagem por linux.eo »

Acho que entendi.

Eu estava "preso" dentro de um LOOP,
na função oGet:reader

O LOOP é feito para examinar as teclas
pressionadas pelo usuário.

No caso eu amarrei, e esqueci de
examinar cliques do mouse.

Tenho agora que examinar
como fazer para o ganhar e perder
o foco com o clique do mouse.
Responder