var
fmVorschau: TfmVorschau;
AnzPages, AktPage : integer;
PrevMeta : TMetaFile;
PrevMetaCanvas : TMetaFileCanvas;
MFList : TObjectList<TMetaFile>;
procedure TfmVorschau.FormCreate(Sender: TObject);
var I : integer;
begin
AnzPages := 1;
AktPage := 1;
MFList := TObjectList<TMetafile>.Create;
end;
procedure TfmVorschau.CreateMetaFile;
begin
PrevMeta := TMetafile.Create;
PrevMeta.Enhanced := true;
PrevMeta.SetSize(PWidth,PHeight);
//Größe des Metafiles, je nach Papierformat
PrevMetaCanvas := TMetafileCanvas.Create(PrevMeta,0);
//Canvas erzeugen
PrintUtils.AktCanvas := PrevMetaCanvas;
//aktuellen Canvas für Unit PrintUtils festlegen, diese enthält die Basisdruckroutinen
SetMapMode(AktCanvas.Handle,MM_TEXT);
SetTextAlign(AktCanvas.Handle,TA_BaseLine);
end;
...
procedure TfmVorschau.NewPage;
begin
//Freigabe des MetafileCanvas der VORHERIGEN Druckseite
PrevMetaCanvas.Free;
//PrevMeta.SaveToFile('D:\Test_Firebird_Server\' + IntToStr(AnzPages) + '.emf'); //diese Variante funktioniert
//Metafile der VORHERIGEN Druckseite in Objektliste ablegen und freigeben
MFList.Add(PrevMeta);
PrevMeta.Free;
//neue Seite erzeugen
Inc(AnzPages);
CreateMetafile;
//neues Metafile für nächste Seite erzeugen
end;
//Abschlussprozedur nach dem Erzeugen der letzten Druckseite
procedure TfmVorschau.FinishPreview;
begin
PrevMetaCanvas.Free;
//PrevMeta.SaveToFile('D:\Test_Firebird_Server\' + IntToStr(AnzPages) + '.emf'); //siehe oben
MFList.Add(PrevMeta);
PrevMeta.Free;
end;
...
//die Anzeigeprozedur produziert nur leere Seiten
//die Liste weist genau so viele Einträge auf, wie Seiten vorher gedruckt und in der Liste abgelegt wurden
procedure TfmVorschau.ShowAktPage;
var CurrMetaFile : TMetafile;
begin
CurrMetaFile := TMetafile.Create;
//CurrMetaFile.LoadFromFile('D:\Test_Firebird_Server\' + IntToStr(AktPage) + '.emf'); //Anzeige funktioniert auf diese Art und Weise
//Eintrag der gewünschten Seite auf Metafile-Liste holen --> ist das richtig so ???
CurrMetafile := MFList.Items[AktPage-1];
//Seitengröße entsprechend der gewählten Zoomstufe einstellen
CurrMetaFile.SetSize(PageP1.Width,PageP1.Height);
//mit dem Vorschauimage verbinden
PrevIMG.Picture.Assign(CurrMetaFile);
//Freigabe
CurrMetafile.Free;
Label1.Caption := '
Seite ' + IntToStr(AktPage);
end;