Inserir uma String

Delphi

23/03/2004

Olá, tenho gravado no Banco de Dados um Texto, gostaria que quando fosse feito a imprimissao do texto no Quick Report, me fosse acrescentado uma variavel definida pelo usuario no meio desse texto.
Ex:Esta gravado na tabela da seguinte forma:
´PROCESSO DE COMPENSAÇÃO Nº DO ANO DE:´

ai quando fosse imprimir, gerar o relatorio o usuario iria informar o Nº do processo e o ano.

AI IRIA IMPRIMIR ASSIM
´PROCESSO DE COMPENSAÇÃO Nº 351 DO ANO DE 2004´
Como fazer isso

Luis Rabelo


Ldrabelo

Ldrabelo

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

23/03/2004

Colega,

Você pode colocar uma variável tipo @001 e @002, utilizar Pos para localizar e delete e insert para ajustar o texto.


GOSTEI 0
Geno

Geno

23/03/2004

[quote:19af29b2ce=´Aroldo Zanela´]Colega,

Você pode colocar uma variável tipo @001 e @002, utilizar Pos para localizar e delete e insert para ajustar o texto.[/quote:19af29b2ce]

Afe..para que isso?

Tipo..se ele usa o quick report, antes de mostrar o preview era so por um form pedindo o numero do processo e o ano, e acrescentar os labels com essa informacao no relatorio.

No evento oncreate os labels recebiam os valores das variaveis informadas pelo usuario no formulario antarior, e pow.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

23/03/2004

Colega,

Complementando com um exemplo para facilitar o entendimento, eis que, de acordo com minha interpretação de dua mensagem, o número do processo e o ano pode estar em qualquer posição do texto:

function TForm1.ReformataTexto(TextoOriginal, SubstPrimeiro,
  SubstSegundo: String): String;
  var nPos: Integer;
begin
  nPos := Pos(´@001´, TextoOriginal);
  if (nPos>0) then
  begin
    Delete(TextoOriginal, nPos, 4);
    Insert(SubstPrimeiro, TextoOriginal, nPos);
  end;
  nPos := Pos(´@002´, TextoOriginal);
  if (nPos>0) then
  begin
    Delete(TextoOriginal, nPos, 4);
    Insert(SubstSegundo, TextoOriginal, nPos);
  end;
  Result := TextoOriginal;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cTeste: String;
begin
  cTeste := ´PROCESSO DE COMPENSAÇÃO Nº @001 DO ANO DE @002´;
  ShowMessage(ReformataTexto(cTeste, ´1254554545-8´, ´2004´));

  cTeste := ´FICOU REGISTRADO NO PROCESSO DE COMPENSAÇÃO Nº @001 NAQUELE ANO DE @002´;
  ShowMessage(ReformataTexto(cTeste, ´1254554545-8´, ´2004´));
end;



GOSTEI 0
Aroldo Zanela

Aroldo Zanela

23/03/2004

Colega,

Com classe:

  TReformataTexto = Class
    Texto: String;
    SubstPrimeiro: String;
    SubstSegundo: String;
    procedure Execute;
  end;


Implementação do método execute:

procedure TReformataTexto.Execute;
  var nPos: Integer;
begin
  nPos := Pos(´@001´, Texto);
  if (nPos>0) then
  begin
    Delete(Texto, nPos, 4);
    Insert(SubstPrimeiro, Texto, nPos);
  end;
  nPos := Pos(´@002´, Texto);
  if (nPos>0) then
  begin
    Delete(Texto, nPos, 4);
    Insert(SubstSegundo, Texto, nPos);
  end;
end;


Instanciando e utilizando o objeto da classe:

procedure TForm1.Button1Click(Sender: TObject);
var ReformataTexto: TReformataTexto;
begin
  ReformataTexto := TReformataTexto.Create;

  ReformataTexto.Texto          := ´PROCESSO DE COMPENSAÇÃO Nº @001 DO ANO DE @002´;
  ReformataTexto.SubstPrimeiro  := ´125454545-85´;
  ReformataTexto.SubstSegundo   := ´2004´;
  ReformataTexto.Execute;

  ShowMessage(ReformataTexto.Texto);
  ReformataTexto.Texto          := ´FICOU REGISTRADO NO PROCESSO DE COMPENSAÇÃO Nº @001 NAQUELE ANO DE @002´;
  ReformataTexto.Execute;

  ShowMessage(ReformataTexto.Texto);

  ReformataTexto.Free;
end;



GOSTEI 0
Ldrabelo

Ldrabelo

23/03/2004

[quote:da3153486c=´Aroldo Zanela´]Colega,

Você pode colocar uma variável tipo @001 e @002, utilizar Pos para localizar e delete e insert para ajustar o texto.[/quote:da3153486c]


Valeu realmete e isso que estou procurando.
Muito obrigado, funcionou legal


GOSTEI 0
Nildo

Nildo

23/03/2004

É por este e por muitos outros motivos que eu uso o FreeReport. Voce define variaveis dentro dele, e ele tem um evento OnGetValue que voce troca o valor das variaveis no momento da impressão/visualizacao. Muito legal esse FreeReport, além de, na minha opinião, ganhar de 10x1 do QuickReport


GOSTEI 0
POSTAR