interface
// Muster
TMetaFileOwn =
class(TMetaFile)
// oder so
strict private
FMetaFileCanvas: TMetaFileCanvas;
public
constructor Create;
destructor Destroy;
override;
property MetaFileCanvas: TMetaFileCanvas
read FMetaFileCanvas
write FMetaFileCanvas
end;
// Muster
TfmVorschau =
class(TForm)
strict private
FAnzahlPages: Integer;
FAktPage: Integer;
FCurrentMetaData: TMetaData;
// die aktuell gewählten Daten aus der Liste (Previous / Prior über Buttons etc.)
FMFList: TObjectList<TMetaFileOwn>;
public
end;
var
fmVorschau: TfmVorschau;
implementation
constructor TMetaFileOwn.Create;
begin
inherited;
FMetaFileCanvas := TMetaFileCanvas.Create(Self, 0);
//Canvas erzeugen, Self = TMetaFile;
end;
destructor TMetaFileOwn.Destroy;
override;
begin
FMetaFileCanvas.Free;
end;
procedure TfmVorschau.FormCreate(Sender: TObject);
begin
AktPage := 1;
FMFList := TObjectList<TMetaFileOwn>.Create;
end;
procedure TfmVorschau.FormDestroy(Sender: TObject);
begin
FinishPreview;
// Liste leeren nicht nötig
FMFList.Free;
// Liste leeren macht Free sowieso...nur als Erklärung
end;
procedure TfmVorschau.CreateMetaFile;
begin
FCurrentMetaData := TMetaFileOwn.Create;
FCurrentMetaData.Enhanced := true;
FCurrentMetaDataSetSize(PWidth, PHeight);
//Größe des Metafiles, je nach Papierformat
PrintUtils.AktCanvas := FCurrentMetaData.MetaFileCanvas;
//aktuellen Canvas für Unit PrintUtils festlegen, diese enthält die Basisdruckroutinen
SetMapMode(AktCanvas.Handle, MM_TEXT);
SetTextAlign(AktCanvas.Handle, TA_BaseLine);
FMFList.Add(FCurrentMetaData);
// eine nach der Anderen in die Liste
end;
procedure TfmVorschau.NewPage;
begin
CreateMetafile;
//neues Metafile für nächste Seite erzeugen
FAnzahlPages := FMFList.Count;
end;
procedure TfmVorschau.ShowPreview;
// irgendwo müssen die Seiten auch angezeigt werden
begin
Show(FMFList);
// der Anzeigeprocedure die Liste übergeben
end;
procedure TfmVorschau.FinishPreview;
begin
FMFList.Clear;
// alle Objekte freigegeben
end;