Hi DeddyH
Da TPDFPage privat deklariert ist, habe ich von der Mainform keinen Zugriff darauf, kann also in der Mainform keine Klassenvariable einführen, die mit TPDFPage kompatibel ist.
mit deinem Tip ist das allerdings kein Problem. Die Deklaration in TPDFiumFrame:
Delphi-Quellcode:
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure SetPageIndex(Value : Integer);
public
{ Déclarations publiques }
type
TPDFPageClass = TPDFPage;
public
PDFPageClass : TPDFPageClass;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
...
Überflüssig ist das hier:
Delphi-Quellcode:
constructor TPDFiumFrame.Create(AOwner: TComponent);
begin
{$IFDEF TRACK_EVENTS}
AllocConsole;
{$ENDIF}
inherited;
ControlStyle := ControlStyle + [csOpaque];
FZoom := 100;
FPageIndex := -1;
PDFPageClass := TPDFPageClass.Create;
Es existiert jetzt zwar eine Instanz dieser Klasse, die aber vorerst nicht initialisiert ist. Ich sehe auch keinen Sinn dain, dies überhaupt noch zu tun - zumindest nicht im TPDFiumFrame.
Aber sie ermöglicht mir etwas anderes:
Delphi-Quellcode:
procedure TSynpdfMain.PDFiumFrame1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var SP, FP :TPoint; Index : Integer; Page : TPDFiumFrame.TPDFPageClass;
begin
Memo1.Lines.Add('------ PDFiumFrame1MouseUp ------');
for Index := 0 to PDFiumFrame1.PDFPageList.Count -1 do
begin
Page := PDFiumFrame1.PDFPageList.Items[Index];
Memo1.Lines.Add('Page.Index := '+ IntToStr(Index));
Memo1.Lines.Add('Page.Rect.Left := '+ FloatToStr(Page.Rect.Left));
Memo1.Lines.Add('Page.Rect.Top := '+ FloatToStr(Page.Rect.Top));
Memo1.Lines.Add('Page.Rect.Top := '+ FloatToStr(Page.Rect.Right));
Memo1.Lines.Add('Page.Rect.Top := '+ FloatToStr(Page.Rect.Bottom));
end;
PDFPageList ist ein Property, das ich dem TPDFiumFrame verpasst habe und das den Zugriff auf die TList-Variable FPages erlaubt. Die Ausgabe im Memo bei einem Click auf PDFiumFrame1:
Zitat:
------ PDFiumFrame1MouseUp ------
Page.Index := 0
Page.Rect.Left := 5
Page.Rect.Top := 5
Page.Rect.Right := 144
Page.Rect.Bottom := 185
Page.Index := 1
Page.Rect.Left := 5
Page.Rect.Top := 190
Page.Rect.Right := 144
Page.Rect.Bottom := 370
Page.Index := 2
Page.Rect.Left := 5
Page.Rect.Top := 375
Page.Rect.Right := 144 //<===Page.Rect.Right
Page.Rect.Bottom := 555
PDFiumFrame1.Seite := 1
PDFiumFrame1.Left := 10
PDFiumFrame1.PDFCurPage ist NIL
PDFiumFrame1.PDFSelPage ist NIL
PDFiumFrame1.TotalSize.cx := 612
PDFiumFrame1.TotalSize.cy := 5544
PDFiumFrame1.Width := 166 // <===PDFiumFrame1.Width
PDFiumFrame1.Height := 556
PDFiumFrame1.PageIndex := 0
Dem gegenüer liefert mir ein Click auf den grösseren Frame2 Folgendes:
Zitat:
------ PDFiumFrame2MouseUp ------
Page.Index := 0
Page.Rect.Left := 5
Page.Rect.Top := 5
Page.Rect.Right := 590
Page.Rect.Bottom := 762
Damit ist klar: Ich habe Zugriff auf die Abmessungen der einzelnen Seiten in den Frameinstanzen. Diese werde ich brauchen, um bei einem Click den Index der einzelnen Seiten zu ermitteln. Bislang liefert mir ein Klick auf die Seite mit dem Index 0 zwar auch den korrekten Wert, aber erst ein Klick auf die 4. angeigte Seite liefert mir den Index 1 zurück.
Allerdings zweifle ich daran, dass ich, wie erst angedacht, hier mit ScreenToClient weiterkomme Die Masse der einzelnen Seiten sind in der
DLL und beziehen sich auf (normalerweise) das A4-Format.
Gruss
Delbor