Entwickler-Ecke

Dateizugriff - *.pdf aus Resource öffnen?


Gruenschnabel - Do 22.10.09 16:07
Titel: *.pdf aus Resource öffnen?
Hallo Leute!

Da dies mein erster Thread ist, will ich mich mal kurz vorher noch vorstellen. Als, ich bin der Gruenschnabel und das resultiert eigentlich daraus, dass ich Delphi wiederentdeckt habe :-) Ich hatte das vor vielen vielen Jahren mal im Grundkurs Informatik und seitdem ist eigentlich (leider muss man sagen) an wissen verschütt gegeangen. heute nutze ich Delphi6 (vorrangig, da deutsch :-D) und Delphi7SEportable

Nun habe ich folgendes Problem:

Um benötigte Dateien mit in eine EXE compilieren zu können, kann ich sie in eine resource packen und von dort aus zugreifen. So geschehen mit einigen wav's, die auch ohne Probleme funzen. Nun dachte ich in meinem jugendlichen wahn und leichtsinn, dass ich auch die pdf's da reinpacken kann. konnte ich auch. zumindest hat brcc32.exe keinen fehler gebracht.
1. Frage: wo kann ich nachschauen, was ich an dateien alles reinpacken kann? (Hilfe war nicht sonderlich hilfreich)

Beim Versuch die pdf zu öffnen nutze ich die shellexecute samt open...:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.THLClick(Sender: TObject);
begin
if ShellExecute(Application.Handle,
                 'open',
                 PChar(13),
                 nilnil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;


Die 13 gibt logischerweise den Index der res-datei an. Soll zumindest. Beim compilieren bringt er mir keinen fehler, aber beim Zugriff darauf:

Zitat:
Zugriffverletzung bei Adresse 7C809E9C in Modul "kernel32.dll". Lesen von Adressse 000000D

2. Frage: gibts alternativen? mach ich hier schon was falsch?

Die ShellApi hab ich unter uses eingefügt.

setze ich statt des index den normalen dateipfad ein funzt alles bestens.

Ich hoffe ihr könnt mir helfen.

MfG,

Gruenschnabel

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt


FinnO - Do 22.10.09 17:20

Zitat:

Beim Versuch die pdf zu öffnen nutze ich die shellexecute samt open...:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.THLClick(Sender: TObject);
begin
if ShellExecute(Application.Handle,
                 'open',
                 PChar(13),
                 nilnil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;





du gibst nirgends den Pfad der PDF-Datei an.

richtig wäre:

Delphi-Quelltext
1:
2:
3:
4:
ShellExecute(Application.Handle,
                 'open',
                 extractFilePath(ParamStr(0))+'MeinePDF.pdf',
                 nilnil, SW_NORMAL


Gruenschnabel - Do 22.10.09 17:24

na die pdf hab ich doch in der res-datei mit nem index (in meinem fall die 13) versehen. ich möchte ja den dateipfad vermeiden, damit ich ich zu der exe nicht noch ein datenpaket nebenher stehen lassen muss. Oder hab ich da nen gravierenden denkfehler?

bei den wave dateen funzt das ja auch


FinnO - Do 22.10.09 17:33

bzgl. Ressourcen bin ich jetzt überfragt. Frage mich nur, warum du etwas gegen ein Datenpakte hast. In Zeiten von WinZIP sollte das kein Problem mehr darstellen.


Gruenschnabel - Do 22.10.09 17:38

an und für sich überhaupt nichts. ich hätte nur gerne eine eigenständige exe, die selbstständig lauffähig ist. vielleicht gibts ja ne möglichkeit, aber die ist leider nicht in meinem wissensschatz vorhanden, deshalb poste ich hier :-)


Delete - Fr 23.10.09 00:38

Mach dich mal über TResourceSteam schlau.


Gruenschnabel - Fr 23.10.09 03:49

Perfekt!

Alles bestens funktioniert. Ich danke Euch!