get historico grande

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

get historico grande

Mensagem por tonyx »

tenho o seguinte historico = space(160)
@ 1,1 say ´histoico" get historico pict ´@!´
aparece linha enorme -- gostaria mostrar em 2 linhas - e com o funcionamento do insert e del

separei em 2 partes a ssim so no final um nao entrosa outra parte e usuario tem excluir a 2 parte
@ 2,1 say "historio" get parte1 pict ´@!´
@ 3.1 say "........." get parte2 pict "@!´

/// tem como usar uma so variavel -- em 2 ou 4 linhas --- exep: seria iqual formatacao de texto como do word

gostaria demonstrativo simples -------
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: get historico grande

Mensagem por Pablo César »

Em lugar do @ SAY... por quê não usa o MEMOEDIT ? Ficaria mais fácil para exibir durante a hora de edição. Inclusive se tiver alguma limitação você pode inclui-la na função de controle que permite o MEMOEDIT (função de controle está no 7º parâmentro)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

Re: get historico grande

Mensagem por tonyx »

nao da mesmo por o "memoedit" ja tenho en cima e baixo e (lado direito) outros campos..
os 160 char tem que ser divididos em 2 ou 4 linhas (a tela ja esta toda preencida)

nao tem como algum comando ou funcao
( ler esta variavel de 160 char dentro de um quadro (area) especifico ??? ) modo tela 24,80

pensei ate realmente no memoedit mas nao fica legall....


grato pela ajuda

:%
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: get historico grande

Mensagem por ANDRIL »

Amigo, poste um exemplo visual do que voce esta querendo fazer, por que não consegui imaginar esta situação, mesmo por que, nao vemos a forma como sua tela esta desenhada.

Primeiramente pensei no memoedit, como não deu certo, forneça mais detalhes para que possamos ajudá-lo.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

Re: get historico grande

Mensagem por tonyx »

╔════════════════════════════════════════════════════════════════════════════╗
║ SISTEMA DE CONTABILIDADE M O V I M E N T O G.W.M. ║
╚════════════════════════════════════════════════════════════════════════════╝
╔═════════════════════════════════════════════════════════════════════
║ Empresa: 177 C ║
║ Filial : 01 PMP Data:31/10/2010 Lote:0001 ║
║ Val.LOTE: 1,00 ║
╠═════════════════════════════════════════════════════════════════════╣
║ Lancamento: 0001 Doc.: 0001 ║
║ Conta a DEBITO .: 1.1.1.01.01.001- ║
║ Descricao ......: CAIXA ║
║ Centro de Custo : 0001 ADMINISTRACAO ║
║ Conta a CREDITO : ║
║ Descricao ......: ║
║ Centro de Custo : ║
║ Valor ..: 1.00 Historico Padrao: 0 ║
║ ╔══════[ SALDO DO LOTE ]═════════╗ ╔═════════[ TEXTO/COMPLEMENTO ]═══════╗ ║
║ ║Tot.Deb: 0,00║ ║1234567890123456789012345678901234567890║ ║
║ ║Tot.Cre: 0,00║ ║ INSERIR E EXCLURIR AQUI ║ ║
║ ║Dif.Deb: 1,00║ ║ ║ ║
║ ║Dif.Cre: 1,00║ ║ ║ ║
║ ╚═════════════════════════════╝ ╚═══════════════════════════════════╝ ║
╚═════════════════════════════════════════════════════════════════════╝

tela e esta aqui no final ta tremida mas no visor sai reta....
--- negocio esta no texto sao 160 char eu estou rapartindo em 4 variaveis , parte_1,2,3,4
na hora gravar junto as 4,
======== dificuldade esta no usuario.... acha deveria ser linha so na hora inserir e excluir
as linhas abaixo (ideia memoedit la nao e ruim) mais se alguem outra...

grato..... :P
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: get historico grande

Mensagem por Pablo César »

Não entendí muito bem, você poderia ter feito um print screen e gravado em jpg para termos uma idéia melhor, inclusive com a edição do campo que não ficou claro qual é exatamente, seria o campo "TEXTO/COMPLEMENTO" ? Então, você pode tranquilamente fazer com o MEMOEDIT, se a questão é como fazer a chamada dele dentro da edição dos GETs, tenho duas alternativas:

1. No rodapé do campo "TEXTO/COMPLEMENTO" onde está a linha "╚═══════════════════════════════════╝" você redesenha a linha assim: "╚═══════════ F9 - Edição de texto ══════════╝" e dentro do campo exiba através do SAY as SUBSTRINGS das primeiras 4 linhas, só para constar que tem uma observação. E coloca o SET KEY -8 TO SUA_FUNCAO antes dos GETs, assim poderá ser chamado o MEMOEDIT quando pressionarem F9 e faça ja com o tamanho de 160 de largura, mas pode abrir com a janela no tamanho máximo de 00,00,23,79 isso se não usar outra resolução ou até mesmo faça de um tamanho que fique sobreposta a tela de edição de campo dos GETs, podendo fazer outra janela com cor de fundo diferenciando dando a sensação de estar sobre-pósta e até com sombra (fica bom).

2. Você pode colocar um GET fora do campo e visão, digamos @ 25,81 GET xVar WHEN SUA_FUNCAO daí cada vez que o cursor se posicionar neste campo abre automáticamente o MEMOEDIT. A função tem que sempre retornar .T.

Não vejo por quê não fazer com MEMOEDIT... explique melhor a sua dificuldade.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: get historico grande

Mensagem por ANDRIL »

Amigo, embora eu concorde com que o Pablo disse sobre a tela postada, segue uma função desenvolvida em cima do que entendi do seu post.

Código: Selecionar todos

//Programador: Anderson Vieira
//Liguagem...: Clipper 5x
//Objetivo...: Preencher variaveis somente se necessario

cls

teste1=space(20)
teste2=space(20)

var1=space(40)
var2=space(40)
var3=space(40)
var4=space(40)
*--siga este procedimento, que declara o array, troque pelo nome das suas
*--vars, atente-se no primeiro sem aspas e no segundo com aspas
arCampos:={{var1,"var1"},;
           {var2,"var2"},;
           {var3,"var3"},;
           {var4,"var4"};
          }
*--array para retornar os dados editados
arBuffer:={}

*--variavel de exemplo, para demonstrar o preechimento
*--quando a var1 esta entre variaveis
@09,27 say"   Teste1:" get teste1

@10,27 say"Historico:" get var1 valid edicao(10,39,arCampos,40)=.t. 
*--estas sao as demais variaveis que serao usadas
*--preencher o campo de 160 posicoes, se nao
*--quiser visualiza-las na tela, desative-as
@11,27 say"          " get var2 when passa()=.t. 
@12,27 say"          " get var3 when passa()=.t. 
@13,27 say"          " get var4 when passa()=.t. 

*--variavel de exemplo, para demonstrar o preechimento
*--quando a var1 esta entre variaveis
@14,27 say"   Teste2:" get teste2
@23,00 say padc("*** No campo HISTORICO tecle ENTER para preencher todo o historico ***",79)
read


? var1
? var2
? var3
? var4
A funcao que faz a edição dos valores dos gets

Código: Selecionar todos

function edicao()
parameters l1,c1,arCampos,largura
local tela
priv sub:=0

*--obtem sempre o vlr atualizado da var atual
var=readvar() //arCampos[1,2] //readvar()
vlr=&var

if lastkey()#13
return .t.
endif

keyb chr(255)
inkey(0)

*--array para uso na funcao achoice
if len(arBuffer)=0
aadd(arBuffer,padr(vlr,40)) //arCampos[1,1])
else
arBuffer[1]=vlr
endif

for i = 2 to len(arCampos)
   if !empty(arCampos[i,1])
      var=arCampos[i,2]
      vlr=&var
      aadd(arBuffer,padr(vlr,40))
   endif
next

do while .t.
lfin=l1+len(arBuffer)

l4=lfin
tela:=savescreen(l1-1,c1-1,l4+2,c1+1+largura)

set colo to b/w,w/b
@l1-1,c1-1 to lfin,c1+largura
@lfin+1,c1-1 say padr("F10=Aceitar  Esc=Cancelar  Del=Exclui",largura+3)

sub=achoice(l1,c1,lfin,c1+largura-1,arBuffer,"","contro",sub)
restscreen(l1-1,c1-1,l4+2,c1+1+largura,tela)
if lastkey()=-9
   for i=1 to len(arCampos)
       if i<=len(arBuffer)
       cmp=arCampos[i,2]
       &cmp=arBuffer[i]
       else
       cmp=arCampos[i,2]
       &cmp=space(40)
       endif
   next 
exit
elseif lastkey()=27
exit
endif
enddo
return .t. 
A funcao auxiliar da funcao postada acima.

Código: Selecionar todos

function contro
parameters modo, num_sel, posicao
local getlist:={}
do case
    case lastkey()>=48.and.lastkey()<=57.or.lastkey()>=65.and.lastkey()<=90.or.lastkey()>=97.and.lastkey()<=122.or.lastkey()=13
    setcursor(3)
    if lastkey()#13
    keyb chr(lastkey())
    else
       if len(alltrim(arBuffer[num_sel]))=0
       keyb chr(1)
       else
       keyb chr(6)
       endif
    endif
    @row(),col() get arBuffer[num_sel] colo "w/n,w+/b"
    read
    setcursor(0)

    *--se a linha for toda preenchida, add uma
    *--nova linha e posiciona o cursor

    if len(alltrim(arBuffer[num_sel]))=largura
       if num_sel=len(arBuffer)
          aadd(arBuffer,space(largura))
          lfin++
          sub=num_sel+1
          keyb chr(30)
          return 1
       endif
    elseif len(alltrim(arBuffer[num_sel]))=0
       *--se a linha for editada e seu conteudo final
       *--for vazio, elimina a linha do achoice

       if len(arBuffer)=1
          arBuffer[num_sel]=space(largura)
       else
          adel(arBuffer,num_sel)
          asize(arBuffer,len(arBuffer)-1)
       endif
       keyb chr(30)
       sub=num_sel-1
       return 1
    endif
    return 2


    case lastkey()=7
       if len(arBuffer)=1
       arBuffer[num_sel]=space(largura)
       else
       adel(arBuffer,num_sel)
       asize(arBuffer,len(arBuffer)-1)
       endif
       keyb chr(30)
       sub=num_sel-1
       return 1

    case lastkey()=-9
    return 0

    case lastkey()=13
    return 1

    case lastkey()=27
    return 0

    otherwise
    return 2

endcase
E aqui, a funcao para impedir a edicao de alguns gets, como
feito no inicio deste exemplo.

Código: Selecionar todos

function passa
*--funcao para pular as variaves que nao desejo preencher
*--atualizando o seu buffer
if lastkey()=5
keyb chr(5)
return .t.
endif
keyb chr(13)
return .t.
Boa sorte, ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

get historico grande

Mensagem por Pablo César »

Enquanto o Andril postava a sua resposta, eu estava fazendo este exemplo que disponibilizo com os fontes para melhor compresão sobre o que eu sugeri na mensagem anterior.

Vou também compilar o que o colega Andril postou, mas acho que ja deve resolver com estas opções apresentadas.
TESTE32.zip
(103.55 KiB) Baixado 115 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: get historico grande

Mensagem por alxsts »

Olá!

Segue mais uma solução, que julgo ser mais simples:

Código: Selecionar todos

#include "Box.ch"
#include "Inkey.ch"

PROCEDURE Main()

   LOCAL nTotDeb, nTotCre, nDifCre, nDifDeb, GetList := {}
   LOCAL cHistor := PadR( "Resposta a um post do forum Clipper on Line.", 160 )
  
   CLS
   DispBox( 15, 0, 22, 79, B_SINGLE + " " )
   DispBox( 16, 2, 21, 35, B_SINGLE + " " )
   DispBox( 16,36, 21, 78, B_SINGLE + " " )
   @ 16, 9 Say "[ SALDO DO LOTE ]"
   @ 16,46 Say "[ TEXTO/COMPLEMENTO ]"
   @ 21,46 Say "[ Ctrl+W salvar     ]"
   nTotDeb := 0
   nTotCre := 0
   nDifCre := 0
   nDifDeb := 0 

   @ 17, 3 Say "Tot.Deb:" Get nTotDeb Pict "@E 9,999.99"
   @ 18, 3 Say "Tot.Cre:" Get nTotCre Pict "@E 9,999.99"
   @ 19, 3 Say "Dif.Deb:" Get nDifCre Pict "@E 9,999.99"
   @ 20, 3 Say "Dif.Cre:" Get nDifDeb Pict "@E 9,999.99"
   @ MaxRow() + 1, MaxCol() + 1 Get cHistor ;  
         When { |oGet| oGet:VarPut( MemoEdit( oGet:VarGet, 17, 37, 20, 75, .T.,, 40 ) ), .F. }

   // apenas exibe o texto do historico antes do Read
   __KeyBoard( CHR( K_ESC ) )
   MemoEdit( cHistor, 17, 37, 20, 75, .F., , 40 )
   
   ReadModal( GetList ); GetList := {}

   // Remover "soft carriage return/line feeds"
   cHistor := StrTran( cHistor, Chr(141)+Chr(10), " " )

   Alert( cHistor,,"W+/B" )
   
   RETURN
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Responder