Clipper On Line • Ver Tópico - Dúvida com SetMode

Dúvida com SetMode

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

Moderador: Moderadores

 

Dúvida com SetMode

Mensagempor porter » 09 Set 2017 08:18

Olá pessoal,
Em determinadas rotinas do sistema, uso o comando SETMODE(25,80) ou SETMODE(43,80),
como faço para verificar se determinadas rotinas está configurado com um com outro ?
if configurado(25,80)
...
else
...
endif


Obrigado.

Harbour 3.2.0(dev)
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Dúvida com SetMode

Mensagempor Toledo » 09 Set 2017 09:11

Amigo, não testei, mas acho que vai funcionar:

Function configurado(nLin_,nCol_)
Local lRet_:=.F.
If nLin_==MaxRow()+1
   If nCol_==MaxCol()+1
      lRet_:=.T.
   Endif
Endif
Return (lRet_)


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 de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Dúvida com SetMode

Mensagempor porter » 09 Set 2017 09:24

Obrigado Toledo, perfeito, deu certo.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 10 Set 2017 11:11

como faço para verificar se determinadas rotinas está configurado com um com outro ?


Ok, já foi respondido, mas explicando:

SetMode() configura quantidade de linhas e colunas.
Oras... só testar MaxRow() e MaxCol() pra saber as linhas e colunas máximas.

A minha pergunta é: porque precisa testar o SetMode() ? Basta usar MaxRow() e MaxCol().

Mas não é só isso.... tem sempre um lado ruim.....

WINDOWS 10 (DEZ)

NÃO EXISTE CONSOLE DE TAMANHO FIXO NO WINDOWS 10.

Talvez GTWVG, GTWVT ou GTWVW sejam obrigatórias no Windows 10, se não quiser ter problemas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 10 Set 2017 11:16

Teste prático:

PROCEDURE Main

   LOCAL nMaxRow, nMaxCol

   SetMode( 25, 80 )
   CLS
   nMaxRow    := MaxRow()
   nMaxCol    := MaxCol()
   DO WHILE Inkey(1) != 27
      IF nMaxRow != MaxRow() .OR. nMaxCol != MaxCol()
         ? MaxRow(), MaxCol()
         nMaxRow := MaxRow()
         nMaxCol := MaxCol()
      ENDIF
   ENDDO

   RETURN



24 94
31 94
31 103
34 103
34 136
47 136
47 135
47 46
47 63
47 65
52 66
d:\temp>
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor carlaoonline » 06 Abr 2023 11:14

Bom dia!

Estou com o seguinte BUG no código abaixo Harbour 3.2 modo Console:

Se habilitar as duas linhas com o SetColor dai não consigo chegar a 10 voltas no loop que fecha o CMD e fica em segundo plano no gerenciador de tarefas do Windows.

Se desabilitar as linhas SetColor dai roda bem mais MAS mesmo assim se ficar clicando qualquer tecla para sair dos Inkey(2), ele fecha acontece a mesma coisa.

Se alguém puder dar uma luz.... coisa muito estranha

O BUG acontece bem na linha do SetMode.

//----------------------------------------------------------------
Function Main()
//----------------------------------------------------------------
// Salva as dimensoes atuais da tela
PUBLIC nLarguraOriginal := MaxCol() 
PUBLIC nAlturaOriginal  := MaxRow()

// Determina novas dimensoes
PUBLIC nLarguraDaTela   := 30    // Largura da tela do app
PUBLIC nAlturaDaTela    := 5     // Altura da tela do app

PUBLIC COR_PADRAO    := "W+/BG,W/R,,,N/W"
PUBLIC COR_RESULTADO := "R+/BG"

nVoltas:=1

Do while .t.
   //SetColor(COR_PADRAO)
   SetMode(nAlturaDaTela, nLarguraDaTela) // Aplica as novas dimensoes
   Cls
   @ 02,02 SAY "nVoltas=" +Alltrim(Str(nVoltas))
   @ 04,02 SAY "<Esc> para Sair"     
   If Inkey(2)=27
      Exit
   Endif

   //SetColor(COR_RESULTADO)
   SetMode(nAlturaOriginal, nLarguraOriginal) // Volta para as originais
   X=GeraNumero(99999, 1) 
   @ 02, 02 SAY StrZero ( X, 5)  // ... ele mostra um numero aleatorio a cada vez.   
   nVoltas++
   If Inkey(2)=27
      Exit
   Endif
EndDo

Return Nil

//----------------------------------------------------------------
// Gera numero aleatorio entre o SEGUNDO parametro e o PRIMEIRO
Function GeraNumero(nLimite, nInicio)
//----------------------------------------------------------------
    Local nNumeroGerado, nPausa, nSegundoAtual
    nInicio:=iif(nInicio==Nil, 1, nInicio)
    nNumeroGerado := Int( rand()* nLimite ) +nInicio
    RETURN nNumeroGerado
//----------------------------------------------------------------

Avatar de usuário

carlaoonline
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 190
Data de registro: 24 Ago 2014 22:38
Cidade/Estado: Porto Alegre-RS
Curtiu: 73 vezes
Mens.Curtidas: 22 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 12:35

Sei lá se entendi seu problema....

terminou o programa, ele fecha, isso é normal.

Coloque alguma coisa no final pra ele parar.
Talvez Alert( "terminou" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 12:38

Adicional:

Coloque na primeira linha Altd()
E compile com -b
Vai poder acompanhar linha a linha pelo debug.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor carlaoonline » 06 Abr 2023 14:36

JoséQuintas escreveu:terminou o programa, ele fecha, isso é normal.


Não.

Ali no pequeno trecho que postei é um loop eterno até receber ESC.

Teclando qualquer outra coisa vai incrementando e mostrando a variável 'nVoltas'.

O problema é que se ativar as duas linhas do SetColor e for teclar rápido para passar a diante várias vezes, dai não chaga a dar 10 voltar que o programa fecha sozinho (sem estar programado isso) e fica rodando em segundo plano sempre.

JoséQuintas escreveu:Vai poder acompanhar linha a linha pelo debug.

Ja fiz isso:

carlaoonline escreveu:O BUG acontece bem na linha do SetMode


JoséQuintas escreveu:Coloque alguma coisa no final pra ele parar.
Talvez Alert( "terminou" )

Aí é que está....kkkkkk naquele simples código, quando chaga na linha do SetMode ele fecha a tela visível (o CMD que estava aberto) e para de funcionar, ficando apenas o aplicativo no gerenciador de tarefas MAS sei lá onde foi a tela e o funcionamento dele após o SetMode.

Trava depois de algumas voltas no loop quando teclo rápido qualquer tecla.
Avatar de usuário

carlaoonline
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 190
Data de registro: 24 Ago 2014 22:38
Cidade/Estado: Porto Alegre-RS
Curtiu: 73 vezes
Mens.Curtidas: 22 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 16:05

carlaoonline escreveu:uando chaga na linha do SetMode ele fecha a tela visível


O que chama de tela visível ?
Tá chamando isso de dentro de uma LIB GUI ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 16:09

Aproveitando....

Cuidado com esse tipo de uso.
SetMode() parece não ter sido feito pra ser usado toda hora.
É usar no início e nada mais.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor carlaoonline » 06 Abr 2023 19:38

JoséQuintas escreveu:Tá chamando isso de dentro de uma LIB GUI ?


Abro o CMD e digito hbmk2.exe teste.prg hbct.hbc e pronto

O programa conforme descrito nas linhas do PRG não executa o que lhe foi dito, na terceira, quarta ou quinta volta é como se alguém clicasse com o botão no X do CMD e fechasse a janela com o executável junto, porém se fizermos isso ele é apagado da memória e nesse caso fecha o CMD que, como não é GUI nem MT, é o proprio executável.

JoséQuintas escreveu:O que chama de tela visível ?


Aquilo que exergamos rodando, o aplicativo, o resultado das linhas que são bem simples e dizem para mostrar o valor de nVoltas na tela a cada volta do loop

JoséQuintas escreveu:Cuidado com esse tipo de uso.
SetMode() parece não ter sido feito pra ser usado toda hora.
É usar no início e nada mais.


Sim, entendi que realmente o problema é esse, trava justamente no SetMode ao ser executado recorrentemente, se colocar no início e no final roda beleza.

MAS TB VERIFIQUEI que somente quando o comando RAND() está presente no código. Se tirar o RAND() posso usar o SetMode CENTENAS DE VEZES DE FORMA BEM RÁPIDA e o aplicativo faz o que deve fazer, acho que isso é o chamado "BUG", sei lá
Avatar de usuário

carlaoonline
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 190
Data de registro: 24 Ago 2014 22:38
Cidade/Estado: Porto Alegre-RS
Curtiu: 73 vezes
Mens.Curtidas: 22 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 20:05

teste.png


Aqui deve ter entrado WVG.
Fica parecendo que tem duas janelas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor JoséQuintas » 06 Abr 2023 20:25

teste.png


Uma alternativa, de qualquer jeito fecha a thread quando fechar a principal.
compile hbmk2 test gtwvg.hbc

FUNCTION Main()

   LOCAL nVoltas := 0, nKey := 0, nNumero

   SetMode(25,80)
   SetColor( "W/B" )
   CLS
   hb_ThreadStart( { || Mostra( @nNumero ) } )
   DO WHILE nKey != 27
      @ 2, 2 SAY "nVoltas=" + Ltrim( Str( nVoltas ) )
      @ 4, 2 SAY "ESC pra sair"
      nNumero := GeraNumero( 99999, 1 )
      nKey := Inkey(2)
      nVoltas += 1
   ENDDO
   RETURN Nil

FUNCTION Mostra( nNumero )

   hb_gtReload( "WVG" )
   SetMode( 5, 30 )
   SetColor( "W/R" )
   CLS
   DO WHILE .T.
      @ 2, 2 SAY StrZero( nNumero, 5 )
      Inkey(1)
   ENDDO
   RETURN Nil

//----------------------------------------------------------------
// Gera numero aleatorio entre o SEGUNDO parametro e o PRIMEIRO
Function GeraNumero(nLimite, nInicio)
//----------------------------------------------------------------
    Local nNumeroGerado

    nInicio:=iif(nInicio==Nil, 1, nInicio)
    nNumeroGerado := Int( rand()* nLimite ) +nInicio

    RETURN nNumeroGerado
//----------------------------------------------------------------


Se precisar usar pra valer, melhor de outro jeito.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Dúvida com SetMode

Mensagempor cjp » 30 Abr 2023 00:37

Pessoal, alguém pode me ajudar com um problema com SetMode, por favor?
Uso em um programa feito em Harbour, modo console, setmode( 41, 125 ). Funciona bem com todos os usuários.
Entretanto, no computador de uma usuária nova, que tem Windows 11 rodando, está dando um problema: a tela não se acerta, fica com uma barra de rolagem lateral.
Já testei ajustar o setmode de várias formas, sem sucesso.
Também já testei ajustar a janela de execução do meu programa de várias formas, também sem sucesso.
Será que o Windows 11 tem alguma especificidade com isso? Não sei se algum outro usuário meu tem Windows 11, mas nunca tive problema semelhante com nenhum usuário.
Alguém poderia me ajudar com isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro