Autor |
Beitrag |
MarcRB1975
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: Di 20.01.09 21:59
Hallo,
ich versuche schon seit Tagen, dass ich eine PDF-Datei mit einer EXE-Datei sozusagen "verschmelze". Wenn dann die Exe gestartet wird, soll gleich nur diese eine PDF-Datei geladen werden.
Wie man das mit Bildern oder Texten - sprich aus Txt-Dateien - macht, weiß ich schon. Das ist kein Problem. Aber das mit der PDF schon irgendwie.
Das klappt nicht.
1. Hab ich versucht, die PDF in ein Memo einzulesen, dieses Memo dann mit einem Memorystream i.V.m. der Exe abzuspeichen. Grundsätzlich geht das ja auch. Aber wie gesagt nur mit Bildern oder mit ganz normalen Texten. Wenn ich z.B. jetzt in ein Memo/Edit einen Text eingegeben hätte, könnte ich diesen Text in der Exe abspeichern.
Ich bekomme immer die Meldung, dass die Datei (PDF) defekt oder nicht zu lesen ist.
Es muss doch eine Möglichkeit geben, die Datei in einen Stream auslesen zu können, an die Exe anzuhängen und wenn die Exe geladen wird, muss an die Stelle gegangen werden, an dem der Stream für die PDF beginn ... bis zum Ende. Dann diesen Stream in Form einer z.B. PDF-Datei speichern und diese Datei dann anzeigen lassen. Das muss doch gehen.  So in etwa hab ich das ja auch versucht.
Dann hab ich mal ganz was anderes ausprobiert. Nur mal so... als Versuch. Ich habe eine PDF-Datei Kopiert. Diese kopierte Datei habe ich mit dem Editor geöffnet, den Inhalt gelöscht und dann gespeichert. Die Original-Datei habe ich ebenfalls mit dem Editor geöffent, den Inhalt kopiert und in die PDF-Kopie eingefügt. Tja... was kam... "es" konnte eine Schrift nicht gelesen werden und deshalb kann der Inhalt nicht richtig angezeigt werden. Das stimmt auch  Nur Punkte waren zu sehen, statt ein Text.
Kann mir vielleicht jemand sagen, wie man eine PDF mit einer Exe verbindet, ohne, dass man die PDF direkt mit der Exe "mitgibt"?
Vielen Dank im Voraus.
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Di 20.01.09 22:09
Erstmal ganz grundsätzlich: Dein bisheriges Problem ist, dass ein TMemo (und genauso der Notepad etc.) nur alphanumerische Zeichen laden. Eine PDF-Datei besteht aber eben nur zum geringsten Teil aus Zeichen. Wenn du sie also mit derartigen Methoden lädst, fehlen alle Bytes darin, die nicht im Zeichensatz vorkommen. Wenn du das Ergebnis abspeicherst, zerstörst du die Datei. Ist übrigens genauso, wenn du eine Exe-Datei in den Editor lädst und abspeicherst.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
MarcRB1975 
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: Di 20.01.09 22:27
achsoooo ... Danke für diese Info. Das wusste ich zum Beispiel gar nicht, dass durch diese Art die PDF o. Exe zerstört wird.
Aber besteht denn überhaupt eine Möglichkeit, den Inhalt einer PDF-Datei in Form eines Streams o.ä. mit einer Exe zu verbinden. Das mit dem Memo/RichEdit war halt so eine Idee. Irgendwie hatte ich mir gedacht, muss es ja eine Möglichkeit geben, die Daten auszulesen, mit der Exe zu verbinden und später ohne Probleme auszulesen und anzeigen zu können.
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 20.01.09 23:38
Wie meinst du das Verbinden? Willst du mit dem Programm selbst Daten in der Exe speichern und wieder laden? Dann schreibe ich gerade einen FAQ-Beitrag zu dem Thema.
www.delphi-library.d...ewtopic.php?p=545198
Bis der fertig ist findest du hier eine Lösung:
www.delphi-forum.de/....php?p=545146#545146
Oder willst du eine Datei beim Kompilieren in der Exe speichern und dann wenn das Programm läuft benutzen?
Dann kannst du eine Ressource mit in die Exe einbinden und mit einem TResourceStream laden.
|
|
MarcRB1975 
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: Mi 21.01.09 10:45
Nun, ich dachte mir das so:
Ich habe eine Exe, durch die ich eine PDF-Datei durch den OPEN-Dialog auswählen kann.
Diese Datei soll dann in eine neu erzeugten Exe angehängt werden.
Wenn dann diese neu erzeugte Exe geöffnet wird, soll die PDF-Datei im Viewer angezeigt werden.
Jedoch soll während dieses Vorgangs keine PDF-Datei erzeugt werden, die dann später, bis dieser Prozess durchlaufen ist, automatisch gelöscht wird. Wenn Du verstehst, was ich meine. Diese Datei soll nicht "sichtbar" erzeugt werden.
Ich habe mal eine andere Idee, einen anderen Vorschlag:
Es besteht ja die Möglichkeit einen MemoryStream in eine Datei zu speichern.
Jedoch, wie wäre es, wenn man diese Datei NICHT auf dem Deskop oder in einen sonstigen Ordner speichert bzw. erzeugt, sondern im Zwischenspeicher. Das heisst der Pfad ist der Zwischenspeicher. Nennen wir diese erzeugte Datei: "TEST.PDF" und vom Zwischenspeicher aus liest dann die Exe diese TEST.PDF ein. Geht das überhaupt?
Wenn ich eine fertige Datei markiere und kopiere, ist diese kpl. Datei ja auch im Zwischenspeicher. Demnach muss es doch auch gehen, durch einen Memorystream eine Datei im Zwischenspeicher zu erzeugen und dann wieder auszulesen, sozusagen "virtuell".
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mi 21.01.09 14:09
MarcRB1975 hat folgendes geschrieben : | Wenn ich eine fertige Datei markiere und kopiere, ist diese kpl. Datei ja auch im Zwischenspeicher. ... |
Hallo,
das ist ein Irrtum. Du kannst ja ein ganzes Laufwerk mit 100 GB auf diese Art kopieren.
Gruss Reinhard
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 21.01.09 16:52
MarcRB1975 hat folgendes geschrieben : | Ich habe eine Exe, durch die ich eine PDF-Datei durch den OPEN-Dialog auswählen kann.
Diese Datei soll dann in eine neu erzeugten Exe angehängt werden. |
Müssen es zwei verschiedene Exe Dateien sein?
In dem Beispiel (der zweite Link) habe ich ja gezeigt, wie du Daten an eine Datei anhängst und auch erkennst ob welche dran hängen. Du könntest also schauen ob da Daten sind, wenn nicht den Dialog anzeigen und diese anhängen an die eigene Exe und wenn da welche sind, diese anzeigen.
(Und sonst kannst du natürlich auch eine reine Viewer-Exe als Ressource mit der Exe mitliefern und diese dann auspacken und die Datei daran anhängen.)
|
|
|