Salvar screen

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

Moderador: Moderadores

Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

Olá, gostaria de saber, como posso fazer p/ salvar a tela em um txt.....
bom, basicamente oq quero dizer é, tenho uma tela em wvw, por exemplo:

Código: Selecionar todos

Function Main()
   local cTela := ""

  WVW_SetMainCoord( .T. )
  WVW_nOpenWindow("MEU TESTE", 10, 20, 20, 50)

  @ 11,21 SAY "OLA MUNDO"
  @ 12,21 SAY "lalas"
  @ 13,21 SAY MAXROW()+1
  @ 13,50 say MAXCOL()+1
  @ 15,21 SAY "---------"

  x := SaveScreen(0,0,maxrow(),maxcol())
  save screen to x
  wait
  @ 11,21 clear to 15,79
  ? "limpou"
  wait
  restscreen(,,,,x)
  setpos(18,00)
  ? "restaurou"

  for I:=1 to len(x) step+2
     cTela += SubStr(x, i, 1)
  next
  
  memowrit("teste.txt", cTela)

  WAIT 
Return
Bom, mas o arquivo q ele gera, ta tendo coisa duplicada... veja:

Código: Selecionar todos

                                OLA MUNDO                      lalas             OLA MUNDO                      lalas                                  25        lalas                                  25                           80                  25                           80                       ---------               80                       ---------                                        ---------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
Então, gostaria de saber, como posso fazer p/ q ele nao duplique ?
depois q o wvw teve uma atualização, começou a acontecer isso, creio eu, q o primeiro 'ola mundo'...'lalas', seja do console do DOS, e o outro, seja do console do wvw....
quanto testo, só com o console do dos, ele nao duplica...

Então, agradeço a ajuda (:
Imagem
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Salvar screen

Mensagem por Jairo Maia »

Olá,

Você poderia explicar a razão para ter que salvar a tela em TXT? Pergunto porque tem outras alterantivas para você salvar a tela em disco.
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
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

Olá...
é para q eu possa carregar ela depois, em uma outra dialog, mesmo depois de ter fechado o programa....
Imagem
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Salvar screen

Mensagem por Jairo Maia »

Olá,

Pressupondo que seja Harbour (não xHarbour), para salvar, use assim:

Código: Selecionar todos

cTela1 := SaveScreen( 0, 0, MaxRow(), MaxCol() )
Hb_MvSave( "Nome_do_arquivo", cTela1 )
Para restaurar use assim:

Código: Selecionar todos

Hb_MvRestore( "Nome_do_Arquivo", .t. )
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
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

Bom, estou usando o xharbour...
Imagem
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Salvar screen: xHarbour

Mensagem por Imatech »

xH...

Código: Selecionar todos

*--------------------------------------------------------------*
* RM_MVSAVE() 
*--------------------------------------------------------------*
FUNCTION RM_MVSAVE()
    LOCAL i := 0
    LOCAL nForLoop := 0
    LOCAL t := 0
    LOCAL l := 0
    LOCAL b := MAXROW()
    LOCAL r := MAXCOL()
    LOCAL cScreen := SAVESCREEN(t, l, b, r)    //
    LOCAL nCellSize := len( Savescreen( 0, 0, 0, 0 ) )
    LOCAL nStart := 1
    LOCAL nRange := ( r + 1 ) * nCellSize
    LOCAL sAux := ''
    LOCAL cOutString := ''
    LOCAL cSubString := ''

    For i := 1 To b + 1
        cOutString := ''
        cSubString := Substr( cScreen, nStart, nRange )
        For nForLoop := 1 To nRange step nCellSize
           cOutString += Substr( cSubString, nForLoop, 1 )
        Next
        sAux += ( cOutString ) + CHR(13) + CHR(10)
        nStart += nRange
    Next

RETUNR( sAux )
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

Ele nao deveria recerber alguns argumentos ?
Imagem
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Salvar screen

Mensagem por Jairo Maia »

Olá,
Para xHarbour você pode também usar assim:

Para salvar:

Código: Selecionar todos

cTela1 := SaveScreen( 0, 0, MaxRow(), MaxCol() )
SAVE TO "Nome_do_arquivo.Mem" ALL LIKE cTela1
Para restaurar:

Código: Selecionar todos

RESTORE FROM "Nome_do_arquivo.Mem" ADDITIVE
NOTA: Neste caso, o nome da variável não pode ter mais que 10 caracteres. A extensão padrão do arquivo é .MEM, você pode alterar como quiser.
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
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

A unica coisa q ele esta salvando no arquivo é o nome da viariavel... ;x
Imagem
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

bom... agora eu entendi o funcionamento desse comando... mas nao eh exatamente isso q estou tentando fazer, oq estou tentando fazer, é pegar o texto q esta dentro do dialog do wvw e salvar em txt, p/ q eu possa imprimir ou usar ele depois, em um outro dialog, entende ?
Mas, qnd eu salvo, ele salva com valores duplicados... ;x
Imagem
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Salvar screen

Mensagem por Imatech »

Acredito que ainda não entendemos o seu objetivo

Código: Selecionar todos

*-----------------------------------------*
* x := TELA ATIVA
*-----------------------------------------*
 x := RM_MVSAVE()

*-----------------------------------------*
* SALVA EM ARQUIVO...
*-----------------------------------------*
MemoWrit( fname, x )
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

Bom, quero salvar a tela, em um arquivo de texto, para q eu possa abrir ele em um outro form, msm depois de ter fechado o programa, e também, q eu possa imprimir o arquivo...

jovemxxx, qnd usei sua função, ele salvou assim:

Código: Selecionar todos


                                OLA MUNDO                      lalas
 OLA MUNDO                      lalas                                  25       
 lalas                                  25                           80         
         25                           80                       ---------        
       80                       ---------                                       
 ---------                                                                      

Imagem
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Salvar screen

Mensagem por Imatech »

Vamos tentar novamente...
*** não é igual a que ele mantem em buffer
Então vamos limitar o salvamento a largura maxima de sua tela digamos 25 caracteres ( nRange := 25 )

Código: Selecionar todos

*--------------------------------------------------------------*
* RM_MVSAVE() 
*--------------------------------------------------------------*
FUNCTION RM_MVSAVE()
  LOCAL i := 0
  LOCAL nForLoop := 0
  LOCAL t := 0
  LOCAL l := 0
  LOCAL b := MAXROW()
  LOCAL r := MAXCOL()
  LOCAL cScreen := SAVESCREEN(t, l, b, r)  //
  LOCAL nCellSize := len( Savescreen( 0, 0, 0, 0 ) )
  LOCAL nStart := 1
  LOCAL nRange := ( r + 1 ) * nCellSize
  LOCAL sAux := ''
  LOCAL cOutString := ''
  LOCAL cSubString := ''

  *---------------------------------------------------* 
  * MOSTRAMOS OS VALORES PARA UTILIZAR NO LOOP
  *---------------------------------------------------* 
  ALERT( 'nRange: ' + STR( nRange ) + ';;' + 'nCellSize: ' + STR( nCellSize) )
  *---------------------------------------------------* 
  * AQUI LIMITAMOS O TAMANHO MAXIMO DA LINHA DE TELA
  *---------------------------------------------------* 
  nRange := IIF( nRange > 25, 25, nRange )

  For i := 1 To b + 1
    cOutString := ''
    cSubString := Substr( cScreen, nStart, nRange )
    For nForLoop := 1 To nRange step nCellSize
     cOutString += Substr( cSubString, nForLoop, 1 )
    Next
    sAux += ( cOutString ) + CHR(13) + CHR(10)
    nStart += nRange
  Next

RETUNR( sAux )
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Salvar screen

Mensagem por bencz »

bom, agora ele ficou assim ;x

Código: Selecionar todos




       OLA MU

             

      OLA MUN

            l

             

 25        la

             

25           

    80       

5            

   80        

   --------- 


E ele continua duplicando o texto...
e nao estou conseguindo depurar o código, pois qnd inicializa o debuger, recebo um erro ;x
Imagem
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Salvar screen

Mensagem por Imatech »

Que valores foram exibidos na mensagem: ALERT...
ALERT( 'nRange: ' + STR( nRange ) + ';;' + 'nCellSize: ' + STR( nCellSize) )

Código: Selecionar todos

*--------------------------------------------------------------*
* RM_MVSAVE() 
*--------------------------------------------------------------*
FUNCTION RM_MVSAVE()
 LOCAL i := 0
 LOCAL nForLoop := 0
 LOCAL t := 0
 LOCAL l := 0
 LOCAL b := MAXROW()
 LOCAL r := MAXCOL()
 LOCAL cScreen := SAVESCREEN(t, l, b, r) //
 LOCAL nCellSize := len( Savescreen( 0, 0, 0, 0 ) )
 LOCAL nStart := 1
 LOCAL nRange := ( r + 1 ) * nCellSize
 LOCAL sAux := ''
 LOCAL cOutString := ''
 LOCAL cSubString := ''

 *---------------------------------------------------* 
 * MOSTRAMOS OS VALORES PARA UTILIZAR NO LOOP
 *---------------------------------------------------* 
 ALERT( 'nRange: ' + STR( nRange ) + ';;' + 'nCellSize: ' + STR( nCellSize) )

 *---------------------------------------------------* 
 * AQUI AJUSTAMOS nCellSize para vxh
 *---------------------------------------------------* 
 nCellSize := IIF( nCellSize < 4, 4, nCellSize  )

 For i := 1 To b + 1
  cOutString := ''
  cSubString := Substr( cScreen, nStart, nRange )
  For nForLoop := 1 To nRange step nCellSize
  cOutString += Substr( cSubString, nForLoop, 1 )
  Next
  sAux += ( cOutString ) + CHR(13) + CHR(10)
  nStart += nRange
 Next

RETUNR( sAux )
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Responder