Página 1 de 2

Problemas com Memoedit()

Enviado: 06 Set 2016 16:37
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.

Problemas com Memoedit()

Enviado: 08 Set 2016 11:02
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.

Problemas com Memoedit()

Enviado: 08 Set 2016 11:34
por Kapiaba

Problemas com Memoedit()

Enviado: 08 Set 2016 15:50
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.

Problemas com Memoedit()

Enviado: 08 Set 2016 15:55
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.

Problemas com Memoedit()

Enviado: 08 Set 2016 16:48
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)



Problemas com Memoedit()

Enviado: 08 Set 2016 23:12
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.

Problemas com Memoedit()

Enviado: 09 Set 2016 10:30
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)

Problemas com Memoedit()

Enviado: 09 Set 2016 11:38
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.

Problemas com Memoedit()

Enviado: 09 Set 2016 11:49
por Kapiaba
E se você criar uima função para retirar este caracter, tipo:

Código: Selecionar todos

   FUNCTION TIRA_ACENTUACAO()

   ...

   RETURN NIL

Problemas com Memoedit()

Enviado: 09 Set 2016 12:47
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,

Problemas com Memoedit()

Enviado: 09 Set 2016 14:05
por Softwhouse
Toledo, infelizmente, também não de certo.

Problemas com Memoedit()

Enviado: 09 Set 2016 14:15
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

Problemas com Memoedit()

Enviado: 09 Set 2016 16:40
por Toledo
Softwhouse escreveu:Toledo, infelizmente, também não de certo.
Amigo, segue em anexo um demo... execute ele.

Abraços,

Problemas com Memoedit()

Enviado: 09 Set 2016 17:00
por Kapiaba
Tente,

Código: Selecionar todos

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