Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ApplicationHelpFile aus Resource oder Stream (https://www.delphipraxis.net/192740-applicationhelpfile-aus-resource-oder-stream.html)

OlliWW 16. Mai 2017 09:17

ApplicationHelpFile aus Resource oder Stream
 
Hallo Zusammen,

Ist es möglich eine CHM Hilfedatei, die ich per Application.HelpFile meiner Anwendung zuweise auch aus einem Stream oder ähnlichem zu laden?
Das Problem mit der Filesystem Ebene sind bei meiner Netzwerkanwendung immer die Freigabe der CHM Datei, gleichzeitiger Zugriff, automatisches Ersetzen (Update) der CHM Datei. Schöner wäre es, wenn ich diese als Blob oder ähnliches in der Datenbank ablegen könnte und beim Start meiner Anwendung auslesen und verarbeiten könnte.

DeddyH 16. Mai 2017 10:03

AW: ApplicationHelpFile aus Resource oder Stream
 
Nur eine Idee: könntest Du die chm nicht beim Programmstart aus Deinem Blob lesen, im temp-Verzeichnis ablegen und der Anwendung dynamisch zuweisen? Bei Programmende löschst Du die Datei dann einfach wieder.

OlliWW 16. Mai 2017 10:07

AW: ApplicationHelpFile aus Resource oder Stream
 
Hallo,

Ja diese Idee hatte ich auch schon bzw. so in der Art ist es im Moment schon gelöst:

Ich lese die CHM Datei aus dem (möglicherweise entferntem) Verzeichnis, speichere sie in Application-Temp und weise die Datei dort zu.

Dennoch führt das zu mehreren Problemen:
- Manchmal haben User nicht mal darauf Schreibrechte
- Auf Terminalserverlösungen mit 50 Usern sind das 50x temporäre Dateien mal 30 MB
- Das Updaten der Haupt-CHM führt manchmal wegen Berechtigungen zu Problemen (schreibgeschützt oder von anderen Usern geöffnet)
- Wenn das Programm abstürzt wird die temporäre Datei nicht gelöscht
- ...

nahpets 16. Mai 2017 10:28

AW: ApplicationHelpFile aus Resource oder Stream
 
Auf die CHM verzichten.

Der Inhalt ist ja letztlich (mehr oder weniger) eine "gepackte" Webseite.

Den Inhalt der Hilfe von daher "einfach" in 'nem TWebBrowser anzeigen und über 'nen Webserver ausliefern lassen?

Nur mal so als Idee, wenn's anders nicht sinnvoll realisierbar ist.

Die Komponente TApplicationEvents hat dafür das Ereignis OnHelp.

Delphi-Quellcode:
function TForm1.AppEventsHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;

In Data steht der Wert aus HelpContext der Komponenten, die beim Hilfeaufruf den Fokus hat.

Damit könnte man dann in 'nem TWebBrowser navigieren:
Delphi-Quellcode:
  CallHelp := False;
  FormFuerDieHilfeanzeige.WebBrowser.Navigate(Format('http://ServerDerHilfeZurVerfügungStellt:%d/ProgrammnameOderSowas?HelpContext=%d',[PortDesServersWennNicht80,Data]));

Bernhard Geyer 16. Mai 2017 11:29

AW: ApplicationHelpFile aus Resource oder Stream
 
Zitat:

Zitat von OlliWW (Beitrag 1371575)
Dennoch führt das zu mehreren Problemen:
- Manchmal haben User nicht mal darauf Schreibrechte

Lege es unter %Appdata%. Darauf hat man immer Schreibrechte.
Und falls nicht, so funktiniert Windows praktisch nicht mehr.

Zitat:

Zitat von OlliWW (Beitrag 1371575)
- Auf Terminalserverlösungen mit 50 Usern sind das 50x temporäre Dateien mal 30 MB

Wir kopieren die Datei nur wenn es nötig ist (CHM von Netzlaufwerk funktioniert nicht ohne das man Einträge in der Registry vornimmt)

Zitat:

Zitat von OlliWW (Beitrag 1371575)
- Das Updaten der Haupt-CHM führt manchmal wegen Berechtigungen zu Problemen (schreibgeschützt oder von anderen Usern geöffnet)

Einfach Umbenennen und dann Datei hineinkopieren. Die laufenden Anwendungen laden noch von der umbenannten CHM-Datei und wenn die Anwendung neu startet nimmt sie automatisch die neue CHM-Datei. Nach 1-2 Tagen kann man dann die alte CHM-Datei löschen

Zitat:

Zitat von OlliWW (Beitrag 1371575)
- Wenn das Programm abstürzt wird die temporäre Datei nicht gelöscht

Wir kopieren die chm immer an die gleiche stelle (und prüfen auch vorher ob das überhaupt nötig ist).
Gelöscht wird nix. Das kann man wenn es unbedingt sein muss in den Uninstaller einbauen.

himitsu 16. Mai 2017 14:14

AW: ApplicationHelpFile aus Resource oder Stream
 
Man kann Dateien aus einer Ressource auch "direkt" aufrufen.
https://msdn.microsoft.com/en-us/library/aa767740.aspx

Zitat:

Gelöscht wird nix
Man kann auch in Temp speichern.

Bei Serversystemen hat windows standardmäßig aktiv, daß Temp auch regelmäßig geleert wird
und bei HeimPCs könnte man sowas auch aktivieren.

Wir geben unsere Hilfe ("pures" HTML über einen TidHTTPServer raus, den man im lokal Programm oder in einer Serveranwendung irgendwo im Intranet/Internet laufen lassen könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 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