Hi TBx
So auf den ersten Blick fürchte ich, dass das, was ich vorhabe, deinem ersten Beispiel entspricht, zumal unter dem Nastly-Link auch ein Classhelper eingesetzt wird. Daher mal die Deklaration des PDFiumFrames:
Delphi-Quellcode:
TPDFiumFrame =
class(TFrame)
private
{ Déclarations privées }
type
// One point is 1/72 inch (around 0.3528 mm).
TPointsSize =
record
cx : Double;
cy : Double;
end;
TRectD =
record
Left : Double;
Top : Double;
Right : Double;
Bottom : Double;
end;
TPDFPage =
class
Index : Integer;
Handle : HPDFPage;
Top : Double;
Rect : TRect;
Text : HPDFTextPage;
NoText : Boolean;
Visible : Integer;
SelStart : Integer;
SelStop : Integer;
Selection: TArray<TRectD>;
destructor Destroy;
override;
function HasText: Boolean;
function CharIndex(x, y, distance: Integer): Integer;
function CharCount: Integer;
function Select(Start: Integer): Boolean;
function SelectTo(Stop: Integer): Boolean;
function ClearSelection: Boolean;
procedure DrawSelection(
DC, BMP: HDC;
const Blend: TBlendFunction;
const Client: TRect);
end;
private
FDocument : HPDFDocument;
......
Und der durch mich erweiterte Teil:
Delphi-Quellcode:
public
{ Déclarations publiques }
type
TPDFCustomDocumentPage = class(TPDFPage) // Die fragliche Klasse.
private
public
end;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Invalidate; override;
procedure LoadFromMemory(APointer: Pointer; ASize: Integer);
procedure LoadFromStream(AStream: TStream);
procedure LoadFromFile(const AFileName: string);
procedure ClearSelection;
function PageLevelZoom: Single;
function PageWidthZoom: Single;
property Document: HPDFDocument read FDocument;
property PageIndex: Integer read FPageIndex;
property PageCount: Integer read FPageCount;
property Zoom: Single read FZoom write SetZoom;
property ZoomMode: TZoomMode read FZoomMode write SetZoomMode;
// Erweitert durch mich
Property PDFPageList: TList read FPages; // Dieses Property erlaubt mir von aussen (Mainform) den Zugriff auf die Items(PDF-Seiten und deren Abmessungen)
end;
Und die Mainform deklariert dann eine kompatible Klassenvariable, zum Beispiel nur Lokal, um auf die von PDFium.PDFPageList zurückgegeben PDFSeite, bzw deren
Handle, zugreifen zu können:
Delphi-Quellcode:
procedure TSynpdfMain.PDFiumFrame1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var SP, FP :TPoint; XF : Integer; PdfPage : TPDFiumFrame.TPDFCustomDocumentPage;
begin
PdfPage := TPdfPage.Create(Owner);
Mit einem Classhelper würde dies wohl so ausehen:
Delphi-Quellcode:
public
{ Déclarations publiques }
type
TPDFPageHelper = class(TPDFPage)
private
public
function GetPage(Index: Integer) : TPDFPage;
Property PDFPageList: TList read FPages;
end;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
...
property Zoom: Single read FZoom write SetZoom;
property ZoomMode: TZoomMode read FZoomMode write SetZoomMode;
end;
Wobei dieser Code immer noch im Frame steht. Ausserhalb, also in der Mainform, brauche ich einen kompatiblen Datentyp. Im Falle der Funktion müsste dies eine Klassenvariable (oder eine Instanz?) vom Typ TPDFPage sein. Das ist aber nicht möglich, da in der
Unit SynPDF eine Klasse TPDFPage deklariert ist, die aber von TPDFDictionary abgeleitet und somit ganz anders aufgebaut ist.
Gruss
Delbor