Página 1 de 2

Função setcursor(0)

Enviado: 01 Ago 2019 14:48
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.

Função setcursor(0)

Enviado: 01 Ago 2019 15:48
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.

Função setcursor(0)

Enviado: 01 Ago 2019 16:07
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?

Função setcursor(0)

Enviado: 01 Ago 2019 16:53
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.

Função setcursor(0)

Enviado: 01 Ago 2019 17:16
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?

Função setcursor(0)

Enviado: 01 Ago 2019 17:36
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.

Função setcursor(0)

Enviado: 01 Ago 2019 17:40
por Toledo
Amigos, faz um teste, troque Setcursor(0) por WSetMouse(.F.).

Abraços

Função setcursor(0)

Enviado: 01 Ago 2019 17:47
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.

Função setcursor(0)

Enviado: 01 Ago 2019 17:49
por Itamar M. Lins Jr.
Ola!
O pessoal usava WAIT, para senha ou inkey(0)

Saudações,
Itamar M. Lins Jr.

Função setcursor(0)

Enviado: 01 Ago 2019 17:53
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.

Função setcursor(0)

Enviado: 01 Ago 2019 17:54
por tchadrack
Error: Unresolved external '_HB_FUN_WSETMOUSE'.

Dá erro quando vou tentar compilar.

Qual library tenho que importar?

Função setcursor(0)

Enviado: 01 Ago 2019 18:45
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?

Função setcursor(0)

Enviado: 01 Ago 2019 19:01
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.

Função setcursor(0)

Enviado: 01 Ago 2019 19:41
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.

Função setcursor(0)

Enviado: 01 Ago 2019 19:53
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.