Substituindo palavras no texto RICHEDIT
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
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
Curtidas 0
Respostas
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
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
10/09/2003
Existe a função ´StringReplace´ do delphi que faz isso (ligue a uses SysUtils).
GOSTEI 0
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
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