Ichhabe das Problemm, dass ich ein Objekt kopieren muss. Ich habe auch schon im Forum gesucht und Muetze1s Methode mit dem Copy-Constructor gewählt:
Delphi-Quellcode:
constructor TPageCollection.Create(pc: TPageCollection);
begin
inherited Create;
FInnerList := TList.Create;
FInnerList.Assign(pc.FInnerList);
FPageParent := pc.FPageParent;
FPageOptions := pc.FPageOptions;
FOnProgress := pc.FOnProgress;
FOnSaveFinish := pc.FOnSaveFinish;
FOnLoadFinish := pc.FOnLoadFinish;
end;
Und der Aufruf:
Delphi-Quellcode:
procedure TFotoBook.DisplayDoublePage(PageIndex: Integer; ScaleFactor: Double);
var
TempPC: TPageCollection;
TempLeftPage: TImageEnVect;
TempRightPage: TImageEnVect;
begin
TempPC := TPageCollection.Create(FPageCollection);
if PageIndex = -1 then
Inc(PageIndex);
if (not Odd(PageIndex)) and (PageIndex <> 0) then
Inc(PageIndex);
// Alles unsichtbar machen, sonst funktio0niert Update nicht
if Assigned(LeftPage) then
begin
LeftPage.Visible := False;
end;
if Assigned(RightPage) then
begin
RightPage.Visible := False;
end;
if (PageIndex = 0) or (PageIndex = -1) then
begin
LeftPage := nil;
TempLeftPage := nil;
end
else
begin
LeftPage := FPageCollection.Items[PageIndex];
TempLeftPage := TempPC.Items[PageIndex];
TempLeftPage.Visible := False;
end;
if Assigned(TempLeftPage) then
begin
TempLeftPage.Parent := PageParent;
TempLeftPage.ScrollBars := ssNone;
TempLeftPage.UnSelAllObjects;
TempLeftPage.LayersCurrent := 0;
ScalePage(TempLeftPage, ScaleFactor);
TempLeftPage.Left := PageParent.Width div 2 - TempLeftPage.Width - PAGEGAP div 2;
TempLeftPage.Top := PageParent.Height div 2 - TempLeftPage.Height div 2;
TempLeftPage.Visible := True;
end;
if (PageIndex > 0) and not (FPageCollection.Count < 0) then
Inc(PageIndex);
if PageIndex < FPageCollection.Count then
begin
RightPage := FPageCollection.Items[PageIndex];
TempRightPage := TempPC.Items[PageIndex];
end
else
begin
RightPage := nil;
TempRightPage := nil;
end;
if Assigned(TempRightPage) then
begin
TempRightPage.Parent := PageParent;
TempRightPage.ScrollBars := ssNone;
TempRightPage.UnSelAllObjects;
TempRightPage.LayersCurrent := 0;
ScalePage(TempRightPage, ScaleFactor);
TempRightPage.Left := PageParent.Width div 2 + PAGEGAP div 2;
TempRightPage.Top := PageParent.Height div 2 - TempRightPage.Height div 2;
TempRightPage.Visible := True;
end;
end;
Nur leider wird doch keine Kopie erzeugt, so dass sich die Änderungen
ScalePage doch wieder auf die Originale auswirken und das darf nicht sein. Wo liegt hier der Fehler oder was mache ich falsch?