[firebase-br] off topic: mala direta

Eduardo Bahiense eduardo em icontroller.com.br
Dom Set 30 16:47:27 -03 2007


[...]
> texto de forma padrão: ex:
> &nome&
> &endereço&
> ou
> <<nome>>
> <<endereço>>
> 
> mandar sua aplicação ler o texto rtf para uma variável de texto, ou ums 
> stringlist e usar as funções do próprio Delphi (o help é rico nelas).

No caso de Rtf tem que fazer via FindText.
A procedure abaixo demonstra como fazer se você passar uma lista do tipo


ReplaceList.Add('Nome=José Antônio da Silva');
ReplaceList.Add('Endereco=Rua x, No Tal');

ou ainda

ReplaceList.Values['Nome']     := 'José Antônio da Silva'
ReplaceList.Values['Endereco'] := 'Rua x, No Tal'

No caso, ela procura <Nome> e substitui por José Antônio da Silva e 
assim  sucessivamente


procedure DoReplaceRichFields(RichEdit: TRichEdit;  ReplaceList:TStrings);
var FoundAt, i, StartPos, EndPos, nSize:integer;
     ToSearch, ToReplace:String;
begin
      EndPos := RichEdit.GetTextLen;
      for i := 0 to ReplaceList.Count-1 do
          begin
               StartPos := 0;
               FoundAt  := 0;
               while FoundAt >= 0 do
                     begin
                          ToSearch  := '<'+ReplaceList.Names[i]+'>';
                          ToReplace := ReplaceList.ValueFromIndex[i];
                          nSize     := Length(ToSearch);
                          FoundAt := RichEdit.FindText(ToSearch, 
StartPos, EndPos, [stMatchCase]);
                          if FoundAt >= 0 then
                             begin
                                  RichEdit.SelStart  := FoundAt;
                                  RichEdit.SelLength := nSize;
                                  RichEdit.SelText   := ToReplace;
                                  StartPos           := FoundAt+nSize;
                             end;
                     end;
          end;
end;

[]s Eduardo





Mais detalhes sobre a lista de discussão lista