Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Pointer auf PDF-Datei (https://www.delphipraxis.net/200050-pointer-auf-pdf-datei.html)

Delbor 14. Mär 2019 16:50

Delphi-Version: 5

Pointer auf PDF-Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Zusammen

Im Source meiner TPdf-Komponente sind folgnde Loaddocuument-Prozeduren deklariert:
Delphi-Quellcode:
    procedure LoadDocument(Data: Pointer; Size: Integer); overload;
    procedure LoadDocument(const Data: TBytes); overload;
    procedure LoadDocument(Data: TMemoryStream); overload;
Die Codevervollständigung von Delphi bietet mir aber nur folgendes an:
Anhang 50825
Ziel ist, ein PDF-Dokument zu laden und jeder Seite des Dokuments ein eigenes PdfViwerobject zuzuweisen.
Da ich im aktiven Umgang mit Zeigern wenig bis gar keine Erfahrung habe, denke ich mir das wie folgt:
  1. Loaddocument(PChar(Filename; Sizeof(FileName);
  2. Loaddocument(eigenes ByteArray);
  3. Loaddocument(eigenen Memorystream);
Mit dem Angebot der Codevervollständiung bleibt mir aber wohl gerade mal die schlechteste Variante,da ich durch den Einsatz eines Memorystreams das dokument zweimal im Speicher hätte.
Andrerseits wäre die Memorysream-Variante die für mich z.Z. einfachste.

Oder stehen mir die erste beiden Varianten auch zur Verfügung, wenn die Codevervoööständigung sie mir nicht anbietet?
Andrerseits: sindmeine Überlegungen zu den beiden ersten Varianten überhaupt richtig?

Gruss
Delbor

Neutral General 14. Mär 2019 16:52

AW: Pointer
 
Hast du deine Codevervollständigung mal richtig angeschaut (siehe dein Bild)?
Und die Version mit dem Pointer muss auf die Daten des Dokuments zeigen, nicht auf einen Dateinamen.
Unterm Strich braucht man eigentlich nur eine der Varianten.
Delphi-Quellcode:
var byteStream: TByteStream;
begin
  byteStream := TByteStream.Create;
  try
    byteStream.LoadFromFile(DocumentFilename);
    // Alles das Gleiche:
    Loaddocument(byteStream); // procedure LoadDocument(Data: TMemoryStream); overload;
    Loaddocument(byteStream.Bytes); // procedure LoadDocument(const Data: TBytes); overload;
    Loaddocument(byteStream.Memory, byteStream.Size); // procedure LoadDocument(Data: Pointer; Size: Integer); overload;
  finally
    byteStream.Free;
  end;
end;

Luckie 14. Mär 2019 16:58

AW: Pointer
 
Bitte gib deinem Beitrag einen aussagekräftigen Titel, damit man ungefähr weiß um was es geht! :roll:

hoika 14. Mär 2019 17:01

AW: Pointer
 
Hallo,
Zitat:

Loaddocument(PChar(Filename; Sizeof(FileName);
Ich würde Length statt SizeOf benutzen.

mkinzler 14. Mär 2019 17:02

AW: Pointer
 
Wenn Du aus einer Datei laden willst, müsstest Du die Variante mit dem Stream verwenden.

Neutral General 14. Mär 2019 17:04

AW: Pointer
 
Zitat:

Zitat von hoika (Beitrag 1427745)
Hallo,
Zitat:

Loaddocument(PChar(Filename; Sizeof(FileName);
Ich würde Length statt SizeOf benutzen.

Das ist so oder so falsch.

Delbor 14. Mär 2019 17:14

AW: Pointer
 
Hi Luckie
Zitat:

Zitat von Luckie (Beitrag 1427743)
Bitte gib deinem Beitrag einen aussagekräftigen Titel, damit man ungefähr weiß um was es geht! :roll:

Ich hab das mal etwas angepasst, wobei das so eigentlich auch nicht ganz stimmt. Das Property Pdf.Document ist ein Pointer auf die Struktur Document der Pdfium.dll (wenn ich das jetzt richtig sehe).

Delbor 14. Mär 2019 17:22

AW: Pointer
 
Hizusammen

Zitat:

Zitat von Neutral General (Beitrag 1427747)
Zitat:

Zitat von hoika (Beitrag 1427745)
Hallo,
Zitat:

Loaddocument(PChar(Filename; Sizeof(FileName);
Ich würde Length statt SizeOf benutzen.

Das ist so oder so falsch.

Korrigiert mich, aber soviel ich weiss, liefert Lenght die Anzahl der Elementte/Zeichen und SizeOf die Grösse in Bytes. Ob SizeOf, wie von mir angewendet, auch wirklich die gesuchte Grösse liefert, ist eine andere Frage.

Gruss
Delbor

Delphi.Narium 14. Mär 2019 17:29

AW: Pointer auf PDF-Datei
 
Man kann da keinen Dateinamen übergeben, von daher ist es egal ob Length oder SizeOf. Beides ist falsch. Siehe dritten Aufruf von Loaddocument in Neutral Generals Post.

Delbor 14. Mär 2019 17:33

AW: Pointer
 
Hi Neutral General
Zitat:

Zitat von Neutral General (Beitrag 1427741)
Hast du deine Codevervollständigung mal richtig angeschaut (siehe dein Bild)?

Du meinst die 3 Zeilen? Da hab ich offensichtlich falsch gekuckt...

Ansonsten: Vielen Dank für dein aufschlussreiches Beispiel!

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz