AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi ApplicationHelpFile aus Resource oder Stream
Thema durchsuchen
Ansicht
Themen-Optionen

ApplicationHelpFile aus Resource oder Stream

Ein Thema von OlliWW · begonnen am 16. Mai 2017 · letzter Beitrag vom 16. Mai 2017
Antwort Antwort
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#1

ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 10:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.623 Beiträge
 
Delphi 12 Athens
 
#2

AW: ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 11:03
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#3

AW: ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 11:07
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
- ...
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 11:28
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.

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]));

Geändert von nahpets (16. Mai 2017 um 11:31 Uhr) Grund: Wie üblich jede Menge Schreibfehler :-(
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 12:29
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.

- 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)

- 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

- 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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: ApplicationHelpFile aus Resource oder Stream

  Alt 16. Mai 2017, 15:14
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (16. Mai 2017 um 15:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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