Substituindo palavras no texto RICHEDIT

Delphi

10/09/2003

Pessoal !!!!


Como faço para substituir palavras no texto ???

Imagine assim: Tenho no richedit um conteúdo (texto), quero substituir determinada palavra em tempo de execução, o que eu digitar no edit, ele le o conteúdo do richedit e substitui



Rogério


Roger_prog

Roger_prog

Curtidas 0

Respostas

Marconi

Marconi

10/09/2003

Estou lhe enviando um exemplo onde eu abro um modelo em Word, salvo com o nome que me interessa em um diretório que me interessa e depois
susbstituo determinados trechos com valores de campos da tabela.

Colocar no uses ActiveX, ComObj, Excel97;

procedure TFormCliFor.BitBtn22Click(Sender: TObject);
var
WinWord, Docs, Doc: Variant; diretorio, dirbase,
arquivo, bairro, cod:string;
begin
diretorio:=dProcessos.directory;
gbModelos.visible:=false;
if Propostas.findkey([cbModelos.text]) // cbModelos é um combobox com a lista de modelos.
// Propostas é uma tabela com o nome dos modelos em um campo de index e outro campo com o path completo dos arquivos modelo.
then cod:=Propostas[´cod´] // código da Proposta (não uso mais).
ShowMessage(´Erro de Processamento´+#13+´Código do Modelo não encontrado´);
Modelos.close;
Propostas.close;
exit;
end;
Arquivo:=emptystr;
arquivo:=inputbox(´Geração conforme Modelo´,´O Nome do Arquivo a ser gerado´,arquivo);
VelhoWord:=AdiquiraOuCrieObjeto(´Word.Basic´);
NovoWord :=AdiquiraOuCrieObjeto(´Word.Application´);
// Tornar o word visivel
NovoWord.Visible := True;
// Abrir arquivo para edição
Doc:= NovoWord.Documents.Open(´s:\dados\documentos\propostas\´+cbModelos.text);
Doc.SaveAs(diretorio + ´\´ + arquivo+´.doc´);
Doc.Close;
Doc:= NovoWord.Documents.Open(diretorio + ´\´ + arquivo+´.doc´);
// Substituir itens do arquivo por texto escolhido
if edtbairro.text<>null then bairro:=´ - ´+ edtbairro.text else bairro:=emptystr;
Doc.Content.Find.Execute(FindText := ´MClienteM´ , ReplaceWith := EditRazao.text);
Doc.Content.Find.Execute(FindText := ´MCliente1M´ , ReplaceWith := EditRazao.text);
Doc.Content.Find.Execute(FindText := ´MCliente2M´ , ReplaceWith := EditRazao.text);
Doc.Content.Find.Execute(FindText := ´MCliente3M´ , ReplaceWith := EditRazao.text);
Doc.Content.Find.Execute(FindText := ´MEndereçoM´ , ReplaceWith := EditEndereco.text);
Doc.Content.Find.Execute(FindText := ´MEndereço1M´ , ReplaceWith := EditEndereco.text);
Doc.Content.Find.Execute(FindText := ´MBairroM´ , ReplaceWith := bairro);
Doc.Content.Find.Execute(FindText := ´MBairro1M´ , ReplaceWith := bairro);
Doc.Content.Find.Execute(FindText := ´MCidade1M´ , ReplaceWith := editCidade.text);
Doc.Content.Find.Execute(FindText := ´MCidadeM´ , ReplaceWith := editCidade.text);
Doc.Content.Find.Execute(FindText := ´MEstado1M´ , ReplaceWith := editEstado.text);
Doc.Content.Find.Execute(FindText := ´MEstadoM´ , ReplaceWith := editEstado.text);
Doc.Content.Find.Execute(FindText := ´MCEPM´ , ReplaceWith := editCEP.text);
Doc.Content.Find.Execute(FindText := ´MCEP1M´ , ReplaceWith := editCEP.text);
Doc.Content.Find.Execute(FindText := ´MContatoM´ , ReplaceWith := EditContato.text);
Doc.Content.Find.Execute(FindText := ´MPropostaM´ , ReplaceWith := Copy(pasta,1,12));
Doc.Content.Find.Execute(FindText := ´MProposta1M´ , ReplaceWith := Copy(pasta,1,12));
Doc.Content.Find.Execute(FindText := ´MProposta2M´ , ReplaceWith := Copy(pasta,1,12));
Doc.Content.Find.Execute(FindText := ´MCNPJM´ , ReplaceWith := EditCnpj.text);
Doc.Content.Find.Execute(FindText := ´MIEM´ , ReplaceWith := EditEstadual.text);
Doc.Content.Find.Execute(FindText := ´MDDDM´ , ReplaceWith := Editddd.text);
Doc.Content.Find.Execute(FindText := ´MDDD1M´ , ReplaceWith := Editddd.text);
Doc.Content.Find.Execute(FindText := ´MTelefoneM´ , ReplaceWith := Editfone.text);
Doc.Content.Find.Execute(FindText := ´MFaxM´ , ReplaceWith := Editfax.text);
if EditEmail.text<>null then bairro:=Emptystr else bairro:= ´Email: ´+EditEmail.text; {aproveitando a variavel bairro para email}
Doc.Content.Find.Execute(FindText := ´MEmailM´ , ReplaceWith := bairro);
end;
Doc.Save;
if Application.MessageBox(´Deseja Imprimir este documento?´,´Confirmação´,MB_ICONQUESTION+MB_YESNO)=MRYes then
Doc.PrintOut(false);
// Fechar
NovoWord.Quit;
end;

Note que ele busca MClienteM (que esta no modelo) e substitui pelo Nome do Cliente. Depois procura MCliente1 e faz a mesma coisa. No entando voce pode substituir apenas uma vez o cliente e se utilizar de links dinâmicos internos para copiar para as outras posilções.


Espero ter dado uma idéia.

Marconi


GOSTEI 0
Fhpita

Fhpita

10/09/2003

Existe a função ´StringReplace´ do delphi que faz isso (ligue a uses SysUtils).


GOSTEI 0
Joilson_gouveia

Joilson_gouveia

10/09/2003

Estude a dica abaixo:

723 - Pesquisa de um string mudando o texto

--------------------------------------------------------------------------------

Coloque no OnChange do Edit1 o Código Abaixo

--------------------------------------------------------------------------------

var
i : integer;
aux: integer;
begin
aux:=1;
for i:=0 to Length(RichEdit1.Text) do
begin
if (Copy(RichEdit1.Text,i+1,length(Edit1.Text)) =
Edit1.Text) then
begin
RichEdit1.SelStart := aux;
RichEdit1.SelLength := i-aux+1;
RichEdit1.SelAttributes.Color := ClBlack;
RichEdit1.SelAttributes.Style := [];
RichEdit1.SelStart := i;
RichEdit1.SelLength := Length(Edit1.text);
RichEdit1.SelAttributes.Color := ClRed;
RichEdit1.SelAttributes.Style := [fsBold];
aux := i + length(Edit1.Text);
end;
end;
RichEdit1.SelStart := aux;
RichEdit1.SelLength := i-aux+1;
RichEdit1.SelAttributes.Color := ClBlack;
RichEdit1.SelAttributes.Style := [];
end;

--------------------------------------------------------------------------------

A dica acima foi enviada por Wendel Bezerra Silva

Para usar vc deve colocar um Edit e um Richedit num form


GOSTEI 0
POSTAR