Da das BeforePrint von QR vor jedem Neuaufbau des Berichtes aufgerufen wird (also vor jedem Preview und jedem Print), solltest du das Füllen der Label-Felder an anderer Stelle durchführen - z.B. dort, wo du die Preview aufrufst:
Delphi-Quellcode:
var
RgNrText: string
procedure TForm8.ShowReport;
begin
[...]
form1.tb_rg_nr.Last;
rgnr := strtoint(copy(form1.tb_rg_nr.fieldbyname('rgnr').Asstring,6,4)) + 1;
dummy_rgnr := formatFloat('0000', rgNr) //hat denselben Effekt, wie deine Schleife
dummy_rgnr2 := copy(form1.tb_rg_nr.fieldbyname('rgnr').Asstring,1,5);
RgNrText := dummy_rgnr2 + dummy_rgnr;
//form1.tb_rg_nr.Edit; (vor dem Append überflüssig)
form1.tb_rg_nr.Append;
form1.tb_rg_nr.fieldbyname('rgnr').Asstring := RgNrText;
QuickReport1.Preview;
end;
procedure TForm8.ChildBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
if form1.radiogroup3.ItemIndex = 1 then
begin
qrlabel54.Caption := RgNrText;
[...] (eventuell zuweisung von RgNrText zu weitern Labels ...)
end else
qrlabel54.Caption := 'keine !!!';
RgNrText kann entweder ein Formularfeld, eine
Unit-Variable (Deklaration im Implementation-Abschnitt) oder eine Globale Variable (Deklaration im Interfaces-Abschnitt) sein - je nachdem, von wo aus du darauf zugreifst.
Die Methode ShowReport kannst du auf dem QR-Formular als public Methode deklarieren und dann (statt Form8.QuickReport.Preview)
als Form8.ShowReport aufrufen.