Problemas com Memoedit()

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

Moderador: Moderadores

Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Estou tendo problemas com memoedit() no Harbour. Está gravando diversos caracteres Ì no campo FPT. Existe outra função substituindo a memoedit()? No xHarbour estava funcionando perfeitamente, convertí para harbour deu problema. Grato.
Fernando
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Complementando, esses caracteres Ì significam a troca de linha e somente são acrescentados quando o texto for alterado ou seja quando carrego o texto para alteração esses caracteres aparecem e são gravados no memo. Compilei com o Harbour 3.2 e 3.4 e o problema aparece em ambos.
Fernando
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Caro Kapiaba, cheguei a conclusão que essa função está com bug no harbour. No clipper e xharbour funciona perfeitamente. Cada vez que carrego o texto no memoedit() é acrescentado o caractér para mudança de linha. Se carregar e salvar dez vezes serão acrescentados 10 caracteres.
Fernando
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com Memoedit()

Mensagem por Kapiaba »

Fernando, neste caso, o melhor a fazer, é mostrar o seu código fonte, para que os mestres em HARBOUR, analisem o seu código, não se preocupe, criticas são sempre bem vindas e aprimora o conhecimento. Pode ser uma coisa que o harbour tem e o xHarbour não tem ou vice versa.

Abs.
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Montei esse pequeno exemplo para terem uma idéia. Se for digitar além do final da linha passará para o final da linha e será inserido o caractér Ì. Tentei remover com memotran() e hardcr() e nada...


Código: Selecionar todos


Function Main()
Request DBFCDX, DBFFPT
RddSetDefault('DBFCDX')
DbSetDriver('DBFCDX')
Scroll()

If !File('Tabela.dbf')
   aStructure:={}
   AADD(aStructure,{'Texto','M',10,0})
   DbCreate('Tabela.dbf',aStructure)
   Use Tabela.dbf New
   DbAppend()
   DbCloseAll()
EndIf

Use Tabela.dbf New
mTexto:=Tabela->Texto

EditaTexto()
Replace Texto With mTexto

EditaTexto()
Replace Texto With mTexto

Return(.T.)


FUNCTION EditaTexto(mTextFile)
Local cOldTela:=SaveScreen(06,13,20,65)
@ 06,13 To 18,64
@ 20,00 Say 'Tecle ESC para gravar'
mTexto:=MemoEdit(mTexto,07,14,16,62,.T.,'MemControl')
RestScreen(06,13,20,65,cOldTela)
Return(.T.)


FUNCTION MemControl(nMode,nLine,nCol)
Do Case
   Case LastKey() == 27
        Return 23
EndCase
Return(Nil)


Fernando
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Problemas com Memoedit()

Mensagem por Jairo Maia »

Olá Softwhouse,

Removi a duplicidade da chamada EditaTexto() e compilei seu exemplo, e tanto quebrando a linha com ENTER ou digitando até o final não vi nada diferente. Deu tudo certo.
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)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com Memoedit()

Mensagem por Kapiaba »

MEMOEDIT.png
Aqui, compilou normal com harbour e xHarbour usando fivewin.

Código: Selecionar todos

#include "FiveWin.ch"

Function Main()

   Request DBFCDX, DBFFPT
   RddSetDefault('DBFCDX')
   DbSetDriver('DBFCDX')

   Scroll()

   If !File('Tabela.dbf')

      aStructure:={}

      AADD(aStructure,{'Texto','M',10,0})

      DbCreate('Tabela.dbf',aStructure)

      Use Tabela.dbf New
      DbAppend()
      DbCloseAll()

   EndIf

   Use Tabela.dbf New

   Replace Texto With "I LOVE FIVEWIN THE BEST AND XHARBOUR FOR WINDOWS"

   mTexto:=Tabela->Texto

   MemoEdit( mTexto )

   //   Browse()

   // quit

   EditaTexto()

   Replace Texto With mTexto


Return(.T.)

FUNCTION EditaTexto(mTextFile)

   Local cOldTela:=SaveScreen(06,13,20,65)

   @ 06,13 To 18,64

   @ 20,00 Say 'Tecle ESC para gravar'

   mTexto:=MemoEdit(mTexto,07,14,16,62,.T.,'MemControl')

   RestScreen(06,13,20,65,cOldTela)

Return(.T.)

FUNCTION MemControl(nMode,nLine,nCol)

   Do Case
   Case LastKey() == 27
      Return 23
   EndCase

Return(Nil)
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Jairo e Kapiaba, vejam bem, vcs removeram a segunda chamada a memoedit() e é exatamente aí que está o problema. A cada alteração do registro é inserido o caracter Ì. Se fizer dez alterações serão inseridos dez caracteres Ì.
Quando grava a primeira vez tudo ok, se for alterar, quando carrega o campo no memoedit() aparece o caracter Ì. Se der ENTER no final da linha não aparece, somente se for digitando e a quebra de linha for automática.
Fernando
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com Memoedit()

Mensagem por Kapiaba »

E se você criar uima função para retirar este caracter, tipo:

Código: Selecionar todos

   FUNCTION TIRA_ACENTUACAO()

   ...

   RETURN NIL
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Problemas com Memoedit()

Mensagem por Toledo »

Softwhouse escreveu:A cada alteração do registro é inserido o caracter Ì.
Amigo, faz um teste, altere:

Código: Selecionar todos

FUNCTION MemControl(nMode,nLine,nCol)
Do Case
   Case LastKey() == 27
        Return 23
EndCase
Return(Nil)
por:

Código: Selecionar todos

FUNCTION MemControl(nMode,nLine,nCol)
Do Case
   Case LastKey() == 27
        Return 273
EndCase
Return(Nil)
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
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Toledo, infelizmente, também não de certo.
Fernando
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Problemas com Memoedit()

Mensagem por Softwhouse »

Kapiaba, tentei a função HardCR(), mas termina com a distribuição automática das linhas, ou seja é truncado a quebra de linha, por exemplo:

Test
e
Fernando
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Problemas com Memoedit()

Mensagem por Toledo »

Softwhouse escreveu:Toledo, infelizmente, também não de certo.
Amigo, segue em anexo um demo... execute ele.

Abraços,
Anexos
demomemoedit.rar
(558.79 KiB) Baixado 257 vezes
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
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com Memoedit()

Mensagem por Kapiaba »

Tente,

Código: Selecionar todos

   Replace Texto With ( mTexto, CRLF, "-" )
Abs,
Responder