![]() |
AW: Verständnisfrage Vorwärtsdeklaration
Hi zusammen
Ich habe die Deklaration nochmal etwas abgeändert, so dass es für mich 'schon eher nachDelphi aussieht':
Delphi-Quellcode:
Das Resultat gleich bei der ersten Prozedur nach 'Implementation:
uses
... const PAGE_MARGIN = 5; // pixels type TZoomMode = (zmCustom,zmActualSize, zmPageLevel, zmPageWidth); TPointsSize = record ... end; TRectD = record ... end; TPDFPage = class Index : Integer; Handle : HPDFPage; ... end; TPDFiumFrame = class(TFrame) private { Déclarations privées } {Hier waren TPointsSize, TRectD und TPDFPage deklarirt} private FDocument : HPDFDocument; ... protected ... public { Déclarations publiques } ... end;
Delphi-Quellcode:
Dass hier die Unterklasse direkt und nicht etwa eine Instanz angesprochen wird, fiel mir erst jetzt auf.
function TPDFiumFrame.TPDFPage.HasText: Boolean;
begin .... end; Instanzen gibt es erst später, wenn das Programm schon lange läuft und ein Dokument geladen ist. Gruss Delbor |
AW: Verständnisfrage Vorwärtsdeklaration
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DeddyH
Der Frame ist Teil innerhalb der Sinpdf.zip. Meine Testanwendung ist grundsätzlich bis auf die zweite, als Navigationsbar dienende Frameinstanz genaau diese Anwendung. Mit dabei ist die PDFium.dll, die das Einlesen der PDF-Dokumente ermöglicht. Diese Anwendung ist Opensource, Entwickler der DLL ist Google. Im Anhang findest du die Synpdf-Zip, die ich mir von der Synopse-Seite heruntergeladen habe. Gruss Delbor |
AW: Verständnisfrage Vorwärtsdeklaration
Ja, da habe ich alle *.pas durch, in keiner lässt sich die Zeichenfolge "PDFium" finden, wo kommt also der TPDFiumFrame her?
|
AW: Verständnisfrage Vorwärtsdeklaration
Ich hab den Eingangspost jetzt 3mal gelesen und ich verstehs nich. Schreib ein
Delphi-Quellcode:
vor die TPDFPage Deklaration und fertig - brauchst keine Vorwärtsdeklaration.
public type
Ja, der nested Type muss dann mit
Delphi-Quellcode:
ansprochen werden und das taucht auch so in der Methodenliste auf - da ist nix seltsames dran.
TPDFiumFrame.TPDFPage
|
AW: Verständnisfrage Vorwärtsdeklaration
Hi DeddyH
Sorry, wenn ich erst jetzt antworte - nach deinem letzten Post hab ich festgestellt, dass meine Anwendung doch auf meinem Mist gewachsen ist. Ich benutze dabei gewissermassen als Basis ![]() Leider kann ich dir nur diesen Link geben. Die Datei, die da als Zip-Datei herunterladbar ist, hat mehr als 5MB und kann daher nicht als Anhang hier gepostet werden. Gruss Delbor |
AW: Verständnisfrage Vorwärtsdeklaration
Ich weiß zwar nicht, wozu Du die Seiteninstanz brauchst, aber es gibt da mehrere Möglichkeiten. Entweder die Typdeklaration aus der Klasse herausnehmen und davor setzen, oder z.B. einen öffentlichen Typalias deklarieren. Wenn ich das so schreibe:
Delphi-Quellcode:
,dann komme ich an Bums nicht heran, das sagt mir auch der Compiler. Mache ich das aber so:
type
TTest = class strict private type TDings = class Bums: integer; end; public Bums: TDings; end;
Delphi-Quellcode:
,dann kann ich Bums als TBums ansprechen.
type
TTest = class strict private type TDings = class Bums: integer; end; public type TBums = TDings; public Bums: TBums; end; |
AW: Verständnisfrage Vorwärtsdeklaration
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:
Überflüssig ist das hier:
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; ...
Delphi-Quellcode:
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.
constructor TPDFiumFrame.Create(AOwner: TComponent);
begin {$IFDEF TRACK_EVENTS} AllocConsole; {$ENDIF} inherited; ControlStyle := ControlStyle + [csOpaque]; FZoom := 100; FPageIndex := -1; PDFPageClass := TPDFPageClass.Create; Aber sie ermöglicht mir etwas anderes:
Delphi-Quellcode:
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:
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; Zitat:
Zitat:
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 |
AW: Verständnisfrage Vorwärtsdeklaration
Hi zusammen
Die Lösung liegt darin, dem TPDFiumFrame ein Property zu verpassen:
Delphi-Quellcode:
Wie ich nun den PDFiumFrame2 dazu bringe, die Seite mit dem aus PDFiumFrame1 erhaltenen Index anzuzeigen, muss ich erst noch herausfinden. Es gibt zwar eine Funktion (GetPage), die das tut. Aber die liefert an den Aufrufer (PDFiumFrame1) zurück, nicht gewissermassen an sich selbst.
property PageAt[const p: TPoint]: TPDFPage read GetPageAt;
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz