Função setcursor(0)

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

Moderador: Moderadores

tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Função setcursor(0)

Mensagem por tchadrack »

Boa tarde

Qual é o resultado esperado desta função? Não sei se entendi corretamente a documentação, o cursor do campo não deveria "desaparecer"?

Código: Selecionar todos

          setcursor(0)
               centra("Digite a Senha", 23, 0)
               Set Color To x/w,w/w,x
                @  1, 30 Get s Picture "@!"
               Read
Quando compilo, o trecho do código acima, o cursor continua visível e "piscando" na tela. Isto é normal ou é algum bug na minha versão do HARBOUR?


DOCUMENTAÇÃO:

Description

SETCURSOR() is an environment function that controls the shape of the
screen cursor
. The actual shape is dependent on the current screen
driver. The specified shapes appear on IBM PC and compatible computers.
On other computers, the appearance may differ for each value specified.

SETCURSOR(0) is the same as SET CURSOR OFF, and any positive integer
value of <nCursorShape> less than 5 is the same as SET CURSOR ON. The
cursor will display as the selected shape.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Função setcursor(0)

Mensagem por Jairo Maia »

Olá tchadrack,

Bem vindo ao fórum.

Sim, o cursor deveria e desaparece, porém, você está chamando a função Centra() após inibir o cursor. Verifique sua função Centra() porque com certeza ela está ativando o cursor.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Função setcursor(0)

Mensagem por tchadrack »

Obrigado pela resposta Jairo.

Segue a função centra()

Código: Selecionar todos

Function CENTRA

   Parameters mensa, lin
   setcursor(0)
   coratu:= SetColor()
   Set Color To n/w
   @ lin, (80 - Len(mensa)) / 2 Say mensa
   Set Color To 
   Return ""
Como tenho ali apenas um setcursor(0), não deveria desaparecer o cursor?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!

Código: Selecionar todos

   coratu:= SetColor()
Pega mas não faz uso.
SET COLOR TO ... ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Função setcursor(0)

Mensagem por tchadrack »

Olá Itamar
Não fui eu que criou este código, estou apenas dando manutenção no sistema, mas realmente esta linha está ali fazendo nada. Pega a cor e depois não a utiliza.
Postei a função do jeito que estava.
Mas e quanto ao setcursor(0), porque não está desabilitando o cursor? Alguém tem idéia?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
Pode ser isso o BO. O cursor pode sumir setcursor(0) pode ser igual a set color n/n,n/n
DOS não existe mais... Isso era da época do DOS. E isso pode variar nos GTs do Harbour.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Função setcursor(0)

Mensagem por Toledo »

Amigos, faz um teste, troque Setcursor(0) por WSetMouse(.F.).

Abraços
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
https://harbour.github.io/ng/c53g01c/nge2189.html
Tava lendo aqui no "manuel", Quando tem get, read o cursor vai aparecer.

Código: Selecionar todos

This command suppresses the cursor while the screen is being painted.
     Ideally, the only time the cursor shows in a production program is when
     the user is editing GETs, MEMOEDIT(), or some kind of line edit.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
O pessoal usava WAIT, para senha ou inkey(0)

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
Toledo, testei aqui, e não funcionou. Nem com setmouse(.f.) sem o "dabliu"

Código: Selecionar todos

hbmk2: Dica: Corrigir os nomes de funçõe(s) possivelmente digitado errado:
       WSETMOUSE() -> SetMouse()
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s):
       WSETMOUSE()
Melhor usar inkey(0).

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Função setcursor(0)

Mensagem por tchadrack »

Error: Unresolved external '_HB_FUN_WSETMOUSE'.

Dá erro quando vou tentar compilar.

Qual library tenho que importar?
tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Função setcursor(0)

Mensagem por tchadrack »

Itamar M. Lins Jr. escreveu:Ola!
https://harbour.github.io/ng/c53g01c/nge2189.html
Tava lendo aqui no "manuel", Quando tem get, read o cursor vai aparecer.

Código: Selecionar todos

This command suppresses the cursor while the screen is being painted.
     Ideally, the only time the cursor shows in a production program is when
     the user is editing GETs, MEMOEDIT(), or some kind of line edit.
Saudações,
Itamar M. Lins Jr.
Engraçado que no programa compilado no Clipper o cursor não aparece. Não tinha lido esta parte do "Manuel" kkkk
Tem jeito de sumir com este cursor?
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Função setcursor(0)

Mensagem por Jairo Maia »

Itamar M. Lins Jr. escreveu:Tava lendo aqui no "manuel", Quando tem get, read o cursor vai aparecer.
Não Itamar, não é isso que a mensagem do manual está dizendo. Releia e veja que não é.
tchadrack escreveu:Não fui eu que criou este código
Então procure no arquivo STD.CH e veja se o programador anterior não alterou o comando GET nesse arquivo. SetCursor( 0 ) desabilita o cursor, e tem que funcionar. SetCursor(0) desabilita o cursor mesmo quando há Get ativo.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
Eu testei aqui. E não sei como esconder o cursor no GET. Testei as possibilidades apresentadas e não funcionou.

Código: Selecionar todos

function main
LOCAL lAnswer := .F.
        @ 24, 0
        @ 24, 15 SAY "Do you want to QUIT? [Y/N]";
           GET lAnswer;
           PICTURE "Y"
        SET CURSOR OFF
        READ
        SET CURSOR ON
hbmk2 cursor.prg

Não sei qual é o GT que o cursor desaparece.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Função setcursor(0)

Mensagem por Itamar M. Lins Jr. »

Ola!
Com inkey(0) funciona.

Código: Selecionar todos

/* Copyright 2000 Alejandro de Garate <alex_degarate hotmail com> */

/* Test mouse for Harbour */

#include "inkey.ch"
#include "setcurs.ch"

PROCEDURE Main()
   LOCAL nR := 5
   LOCAL nC := 38
   setmode(25,80)

   SetCursor( SC_NONE )
   CLS
   IF ! MPresent()
      ? "No mouse present !"
      RETURN
   ENDIF

   @ 0, 0 TO MaxRow(), MaxCol() DOUBLE
   @ MaxRow() - 2,  0 TO MaxRow(), 18 DOUBLE
   @ MaxRow() - 1,  2 SAY "Y:"
   @ MaxRow() - 1, 10 SAY "X:"

   @ nR,  2 SAY "Mouse Type    :"

   @ nR, 18 SAY "Mouse System"

   @ MaxRow() - 2, 68 TO MaxRow(), MaxCol() DOUBLE
   @ MaxRow() - 1, 70 SAY "Exit"

   @ 10,  2 SAY " -- Status --"
   @ 11,  2 SAY "Window Boundaries :"
   @ 12,  2 SAY "Press/Release But.:"
   @ 13,  2 SAY "Double Click Left :"
   @ 14,  2 SAY "Double Click Right:"

   TEST1()

   TEST2( nR, nC )

   SetPos( MaxRow(), 0 )

   ?

   RETURN

STATIC FUNCTION MUPDATE()

   @ MaxRow() - 1,  4 SAY MRow() PICTURE "9999"
   @ MaxRow() - 1, 12 SAY MCol() PICTURE "9999"

   RETURN 0

STATIC FUNCTION MINRECT( nTop, nLeft, nBott, nRight )
   RETURN ;
      MRow() >= nTop .AND. MRow() <= nBott .AND. ;
      MCol() >= nLeft .AND. MCol() <= nRight

// First test: Check the boundaries of the main window

STATIC PROCEDURE TEST1()

   LOCAL nKey

   @ MaxRow() - 3, 25 SAY PadR( "Move the cursor until the UPPER side", 40 )
   MUPDATE()

   DO WHILE ( nKey := Inkey( 0, INKEY_ALL ) ) != K_TAB
      MUPDATE()
      IF nKey == K_MOUSEMOVE
         IF MRow() < 1
            EXIT
         ENDIF
         CHECKEXIT()
      ENDIF
   ENDDO

   @ MaxRow() - 3, 25 SAY PadR( "Move the cursor until the BOTTOM side", 40 )

   DO WHILE ( nKey := Inkey( 0, INKEY_ALL ) ) != K_TAB
      MUPDATE()
      IF nKey == K_MOUSEMOVE
         IF MRow() > MaxRow() - 1
            EXIT
         ENDIF
         CHECKEXIT()
      ENDIF
   ENDDO

   @ MaxRow() - 3, 25 SAY PadR( "Move the cursor until the LEFT side", 40 )

   DO WHILE ( nKey := Inkey( 0, INKEY_ALL ) ) != K_TAB
      MUPDATE()
      IF nKey == K_MOUSEMOVE
         IF MCol() < 1
            EXIT
         ENDIF
         CHECKEXIT()
      ENDIF
   ENDDO

   @ MaxRow() - 3, 25 SAY PadR( "Move the cursor until the RIGHT side", 40 )

   DO WHILE ( nKey := Inkey( 0, INKEY_ALL ) ) != K_TAB
      MUPDATE()
      IF nKey == K_MOUSEMOVE
         IF MCol() > MaxCol() - 1
            EXIT
         ENDIF
         CHECKEXIT()
      ENDIF
   ENDDO

   @ MaxRow() - 3, 25 SAY Space( 40 )
   @ 11, 22 SAY "Pass"

   RETURN

// Second test: check the button pressing

STATIC PROCEDURE TEST2( nR, nC )

   LOCAL nKey, nPress := 0

   @ nR +  0, nC SAY "+---------|---------+"
   @ nR +  1, nC SAY "| +===+ +===+ +===+ |"
   @ nR +  2, nC SAY "| |   | |   | |   | |"
   @ nR +  3, nC SAY "| |   | |   | |   | |"
   @ nR +  4, nC SAY "| +===+ +===+ +===+ |"
   @ nR +  5, nC SAY "|                   |"
   @ nR +  6, nC SAY "|  Up    Up    Up   |"
   @ nR +  7, nC SAY "|                   |"
   @ nR +  8, nC SAY "|                   |"
   @ nR +  9, nC SAY "|           Harbour |"
   @ nR + 10, nC SAY "|            mouse  |"
   @ nR + 11, nC SAY "+-------------------+"

   Set( _SET_EVENTMASK, INKEY_ALL )

   MUPDATE()

   DO WHILE ( nKey := Inkey( 0, INKEY_ALL ) ) != K_TAB

      DO CASE
      CASE nKey == K_MOUSEMOVE    // mouse has been moved
         IF MINRECT( 19, 40, 22, 60 )
            MHide()
         ELSE
            MShow()
         ENDIF
         CHECKEXIT()
         MUPDATE()

      CASE nKey == K_LBUTTONDOWN  // Left mouse button was pushed
         @ nR + 2, nC + 3 SAY "XXX"
         @ nR + 3, nC + 3 SAY "XXX"
         @ nR + 6, nC + 3 SAY "Down"
         nPress++

      CASE nKey == K_LBUTTONUP    // Left mouse button was released
         @ nR + 2, nC + 3 SAY "   "
         @ nR + 3, nC + 3 SAY "   "
         @ nR + 6, nC + 3 SAY "Up  "

      CASE nKey == K_MBUTTONDOWN  // Middle mouse button was pushed
         @ nR + 2, nC + 10 SAY "XXX"
         @ nR + 3, nC + 10 SAY "XXX"
         @ nR + 6, nC + 10 SAY "Down"
         nPress++

      CASE nKey == K_MBUTTONUP    // Middle mouse button was released
         @ nR + 2, nC + 10 SAY "   "
         @ nR + 3, nC + 10 SAY "   "
         @ nR + 6, nC + 10 SAY "Up  "

      CASE nKey == K_RBUTTONDOWN  // Right mouse button was pushed
         @ nR + 2, nC + 15 SAY "XXX"
         @ nR + 3, nC + 15 SAY "XXX"
         @ nR + 6, nC + 15 SAY "Down"
         nPress++

      CASE nKey == K_RBUTTONUP    // Right mouse button was released
         @ nR + 2, nC + 15 SAY "   "
         @ nR + 3, nC + 15 SAY "   "
         @ nR + 6, nC + 15 SAY "Up  "

      CASE nKey == K_LDBLCLK      // "The left mouse button was double-clicked."
         @ 13, 22 SAY "Pass"

      CASE nKey == K_RDBLCLK      // "The right mouse button was double-clicked."
         @ 14, 22 SAY "Pass"

      OTHERWISE
         @ MaxRow(), 20 SAY "A keyboard key was pressed:"
         @ MaxRow(), 48 SAY nKey
#ifdef __HARBOUR__
         @ MaxRow(), 58 SAY hb_keyChar( nKey )
#else
         @ MaxRow(), 58 SAY iif( nKey >= 32 .AND. nKey <= 255, Chr( nKey ), "" )
#endif
      ENDCASE

      IF nPress > 6
         EXIT
      ENDIF
   ENDDO

   @ MaxRow() - 3, 20 SAY Space( 50 )
   @ 12, 22 SAY "Pass"

   SetCursor( SC_NORMAL )

   @ 20, 1 SAY "MOUSE TEST FINISH!"
   ?

   RETURN

STATIC PROCEDURE CHECKEXIT()

   IF ! MINRECT( MaxRow() - 2, MaxCol() - 11, MaxRow(), MaxCol() )
      RETURN
   ENDIF
   SetCursor( SC_NORMAL )
   CLS
   ? "MOUSE TEST FINISH!"
   ?
   QUIT
hbmk2 mouse.prg

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder