ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[DÚVIDA] Sobre manipulação de memo...

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
WhatEver23
Novato
Novato


Registrado: Quinta-Feira, 22 de Julho de 2010
Mensagens: 19

MensagemEnviada: Qui Jan 19, 2012 12:36 am    Assunto: [DÚVIDA] Sobre manipulação de memo... Responder com Citação

Eae galera, estou com uma dúvida aqui, de como fazer a função abaixo com o memo do delphi.

Supondo que o conteúdo do memo seja este:

Citação:
Active delphi o
site do programador
delphi


Estou tentando fazer uma função que organize o texto e tire a quebra de linha ficando assim:

Citação:
Active delphi o site do programador delphi


Seria mais ou menos como um backspace no começo da frase seguida clique no espaço. Agradeço desde já quem ajudar, abraços.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Caduzera
Profissional
Profissional


Registrado: Terça-Feira, 29 de Julho de 2008
Mensagens: 656

MensagemEnviada: Qui Jan 19, 2012 7:34 am    Assunto: Responder com Citação

Amigo, você pode fazer um Loop e montar a string como quiser ..

Exemplo:

var
i : Integer;
sTexto : String;

begin
For i := 0 To Memo.Lines.Count - 1 Do
sTexto := sTexto + Trim(Memo1.Lines.Strings[i]) + ' ';

Memo1.Lines.Clear;
Memo1.Lines.Add(sTexto);
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Jan 19, 2012 7:49 am    Assunto: Responder com Citação

Outro modo é utilizar o DelimitedText


Código:
begin
memo1.Lines.StrictDelimiter:=true;
Memo1.Lines.Delimiter:='|';
memo1.Lines.Text:=TrimRight(StringReplace(memo1.Lines.DelimitedText,'|',' ',[rfReplaceAll]));
end;

_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 19, 2012 8:56 am    Assunto: Responder com Citação

Segue outra alternativa:

Código:
Memo1.Lines.Text := StringReplace(Memo1.Lines.Text, sLineBreak, ' ', [rfReplaceAll]);


Espero que seja útil.

_________________
Assinatura: Imoveis a venda em Suzano
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Jan 19, 2012 9:03 am    Assunto: Responder com Citação

com sLineBreak Tinha feito a principio com ele , so
que não tinha dado certo. Olhei com mais calma e parece que tem uma
pequena imperfeição nesta instrução. Ja tinha reparado neste pequeno
desvio ,

veja .. Memo1.text

Citação:
Memo1 A
G


Código:
var
Str_Um, Str_Dois:String;
begin
Str_um:= StringReplace(memo1.Lines.DelimitedText,sLineBreak,' ',[rfReplaceAll]);;
Str_Dois:=StringReplace(Memo1.Lines.Text,Memo1.Lines.LineBreak, ' ', [rfReplaceAll]);
Showmessage(inttostr(length(Str_Um))+sLineBreak+
inttostr(length(Str_Dois)));


O Length de Str_Aux retorna 11 quanto a meu ver retorno correto
seria 9

Mas o engraçado que eu tb tinha utilizado o , Memo1.Lines.LineBreak e eu
descartei por causa desta imperfeição que aparece não ocorrer mais.
Vai entender ( na verdade fiquei a noite acordado , pode ser isto )
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 19, 2012 10:08 am    Assunto: Responder com Citação

Marco, quando você disse Str_Aux seria Str_Um ou Str_Dois?
Para verificar o resultado acho que seria melhor adicionar as strings no próprio Memo ao final do código:

Código:
Memo1.Lines.Add(Str_Um);
Memo1.Lines.Add(Str_Dois);


A princípio obtive 11 para Str_Um, 10 para Str_Dois.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Jan 19, 2012 10:11 am    Assunto: Responder com Citação

Citação:
Marco, quando você disse Str_Aux seria Str_Um ou Str_Dois?


DEsculpa seria str_Um utilizando o slineBreak ... Ao inves de colocar no Memo é melhor contar os carecteres , pq olhando pode parecer despercebido
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 19, 2012 10:20 am    Assunto: Responder com Citação

Sem setar StrictDelimiter = true obtive 11:
Código:
"Memo1 A",G


Setando obtive 9:
Código:
Memo1 A,G
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Jan 19, 2012 10:26 am    Assunto: Responder com Citação

imex escreveu:
Sem setar StrictDelimiter = true obtive 11:
Código:
"Memo1 A",G


Setando obtive 9:
Código:
Memo1 A,G


Esquece o StrictDelimiter = true esta solução foi porque tinha achado
um valor incoerente utilizando o sLineBreak ,
Porém esta "incoerencia" parece ser resolvida com

Citação:
StringReplace(Memo1.Lines.Text,Memo1.Lines.LineBreak, ' ', [rfReplaceAll]);


entende ???
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 19, 2012 10:38 am    Assunto: Responder com Citação

É que não consegui detectar essa incoerência, mas acho que se a versão utilizada tiver a propriedade LineBreak é melhor utiliza-la.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Jan 19, 2012 12:30 pm    Assunto: Responder com Citação

Concluindo segue as opções .. Para não Poluir mais ainda o tópico .OK


Código:
var
i : Integer;
sTexto : String;

begin
For i := 0 To Memo.Lines.Count - 1 Do
sTexto := sTexto + Trim(Memo1.Lines.Strings[i]) + ' ';

Memo1.Lines.Clear;
Memo1.Lines.Add(sTexto);
end;


e/ou

Código:
begin
memo1.Lines.StrictDelimiter:=true;
Memo1.Lines.Delimiter:='|';
memo1.Lines.Text:=TrimRight(StringReplace(memo1.Lines.DelimitedText,'|',' ',[rfReplaceAll]));
end;


e/ou

Código:
Memo1.Lines.Text := StringReplace(Memo1.Lines.Text, sLineBreak, ' ', [rfReplaceAll]);


e/ou

Código:
Memo1.Lines.Text := StringReplace(Memo1.Lines.Text, Memo1.Lines.LineBreak, ' ', [rfReplaceAll]);

_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB