Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#1

Quickreport TQrShape in TQrChildBand kopieren

  Alt 26. Feb 2020, 22:56
Hallo zusammen,

ich versuche gerade die Elemente eines TQrBand.rbGroupHeader in ein TQrChildBand zu kopieren. Das funktioniert auch. Nur beim TQrShape kommt es beim Ausdruck zu einer Access-Violation. Der folgende Code wird noch fehlerfrei durchlaufen aber beim nachfolgenden PrintVorgang kracht es dann.
Delphi-Quellcode:
procedure DuplicateChildren(const aSource: TWinControl; aDest: TWinControl; const WithEvents: Boolean = True);
var
  i: Integer;
  lSourceCtrl, lDestCtrl: TControl;
  s1, s2:String;

begin
  aDest.Height := aSource.Height;

  s1:= aSource.ClassName;
  s2:= aDest.ClassName;

  for i := 0 to aSource.ControlCount - 1 do
  begin
    lSourceCtrl := aSource.Controls[i];

    if (lSourceCtrl is TQRShape) then
    begin
      lDestCtrl := TQRShape.Create(lSourceCtrl.Owner);
      lDestCtrl.Top := lSourceCtrl.Top;
      lDestCtrl.Left := lSourceCtrl.Left;
      lDestCtrl.Width := lSourceCtrl.Width;
      lDestCtrl.Height := lSourceCtrl.Height;
      TQRShape(lDestCtrl).Shape := TQRShape(lSourceCtrl).Shape;
      lDestCtrl.Parent := aDest;
      lDestCtrl.Name := lSourceCtrl.Name + '_';
    end
    else
    begin
      lDestCtrl := TControlClass(lSourceCtrl.ClassType).Create(lSourceCtrl.Owner);
      CloneProperties(lSourceCtrl, lDestCtrl);
      lDestCtrl.Parent := aDest;
      lDestCtrl.Name := lSourceCtrl.Name + '_';
    end;
  end;
end;

procedure TrptTest2.qrbaDetail1HeaderBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  DuplicateChildren(Sender, qrcbHeader);
  qrcHeader.Enabled := True;
end;
Lasse ich die Zuweisung  lDestCtrl.Parent := aDest; weg, funktioniert der Print, aber die Shapes werden natürlich nicht angezeigt.
Ich habe das TQrShape extrahiert um zu sehen, woher der Fehler kommt und eigentlich passiert hier ja nichts besonderes.

Hat jemand eine Idee
  Mit Zitat antworten Zitat