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