| Autor |
Beitrag |
bigmasterdenis
      
Beiträge: 48
|
Verfasst: Mi 12.12.07 13:48
Hallo Leute!
Zu meinem Prog gibt es eine PDF-Hilfedatei. Am liebsten würde ich die direkt in die exe einbetten, sodass der User die Hilfe dann direkt vom Programm aus starten kann ohne zu wissen wo die PDF liegt.
Klar, ich könnte die PDF irgendwo ablegen und dann mit shellexecute aufrufen, aber dann muss sich die PDF ja an einer vordefinierten Stelle befinden um ausgeführt werden zu können.
Gibt es nicht auch einen Weg die PDF irgendwie als recourse zu behandeln? Hab nirgends was dazu gefunden
Danke und Gruß
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Mi 12.12.07 13:54
Das geht schon, aber du musst die pdf-Datei dann wieder irgendwo ablegen, um sie wieder mit Shell-Execute öffnen zu können. Wieso also nicht gleich abgelegt bereitstellen?
_________________ Hallo Mutti
|
|
bigmasterdenis 
      
Beiträge: 48
|
Verfasst: Mi 12.12.07 14:09
| Zitat: | | Das geht schon, aber du musst die pdf-Datei dann wieder irgendwo ablegen... |
Ich will sie ja direkt in der exe ablegen. Mit Bidern klappt es ja, sodass ich nicht zich bilder und eine exe habe, sondern einfach nur die exe, in welche die Bilder integriert sind.
Frage mich nur ob und wie das mit PDFs klappt.
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Mi 12.12.07 14:22
Du kannst AFAIK jeden Datentyp in einer RES-Datei integrieren:
Bsp.:
HELP RCDATA HELP.pdf
Wenn du aber keine PDF-Viewer Komponente hast, die das Einlesen aus einem Stream erlaubt, sondern du diese mit ShellExecute aufrufen willst, muss du die pdf-Datei aus der EXE vorher irgendwo ablegen.
_________________ Hallo Mutti
|
|
bigmasterdenis 
      
Beiträge: 48
|
Verfasst: Mi 12.12.07 14:30
achso is dat....
Aber | Zitat: | | die pdf-Datei aus der EXE vorher irgendwo ablegen |
würde mir schon reichen. Dann extrahiere ich die PDF kurz irgendwo nach temp und rufe sie dann mit shellexecute auf. Dann hat der user immer noch den Eindruck als wäre die PDF eingebettet.
Dafür muss ich nur noch rausfinden wie man resources aus der exe wieder rauskriegt...
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Mi 12.12.07 14:39
SuFu benutzen (Stichwort RCDATA): Hier wird z.B. das Prinzip mit Beispielen erklärt.
_________________ Hallo Mutti
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 12.12.07 14:41
Teile der Unit sind nicht von mir, aber ich weiß inzwischen nicht mehr was mein und was fremd ist, da es eine 5 Jahre alte Unit ist und ich sie immer wieder verändere:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
| unit uResExport;
interface
uses SysUtils, Windows, Classes, ShellApi, Dialogs, Forms;
procedure HlpStart;
implementation
function GetTempDir: string; var Buffer: array[0..MAX_PATH] of Char; begin GetTempPath(SizeOf(Buffer) - 1, Buffer); Result := StrPas(Buffer); end;
function ExtractRes(ResType, ResName, ResNewName: string): Boolean; var Res: TResourceStream; begin Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType)); try Res.SavetoFile(ResNewName); Result := True; finally Res.Free end; end;
procedure ShellExecute_AndWait(FileName: string); var ExInfo: TShellExecuteInfo; Ph: DWord; begin FillChar(exInfo, SizeOf(exInfo), 0); with ExInfo do begin cbSize := SizeOf(exInfo); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; Wnd := GetActiveWindow(); ExInfo.lpVerb := 'open'; lpFile := PChar(FileName); nShow := SW_SHOWNORMAL; end;
if ShellExecuteEx(@exInfo) then begin Ph := ExInfo.HProcess; end else begin ShowMessage(SysErrorMessage(GetLastError)); Exit; end;
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do Application.ProcessMessages; CloseHandle(Ph); end;
procedure HlpStart; var HLP_FILE: String; begin HLP_FILE := GetTempDir + 'PopAdress.HLP';
if ExtractRes('HLPFILE', 'FILE', HLP_FILE) then if FileExists(HLP_FILE) then begin ShellExecute_AndWait(HLP_FILE); DeleteFile(PChar(HLP_FILE)); end; end;
end. |
Das habe ich für eine HLP Datei gemacht, aber es sollte auch mit einer PDF funktionieren.
_________________ Popov
|
|
bigmasterdenis 
      
Beiträge: 48
|
Verfasst: Mi 12.12.07 14:47
Wow, danke Leute! Das hilft mir weiter 
|
|