Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   HTML-Hilfedatei, keine Kontentanzeige (https://www.delphipraxis.net/180755-html-hilfedatei-keine-kontentanzeige.html)

waldforest 15. Jun 2014 19:51

HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
ich bin dabei für meine Anwendung eine Hilfe zu integrieren.

Ich habe die Hilfedatei mit HelpNDoc erzeugt, die auch gleichzeitig die Constantendatei für meine Anwendung erstellt.

Meine Anwendung erstelle ich mit Delphi XE3
Die Hilfedatei, sofern ich sie direkt aus Windows aufrufe funktioniert einwandfrei.

Unter Uses habe ich den vcl.htmlhelpviewer eingebunden.

Sobald ich aber über mein FORM im ONHelp

HelpFile := ExtractFilePath(Application.ExeName) + 'HTML\AppHelp.html';
HelpContext := HELP_Waren ( CONST HELP_Waren =1001)
Application.HelpShowTableOfContents();
CallHelp := FALSE;


erscheint lediglich ein Fenster mit dem Titel HTML-Hilfe, aber ohne Inhalt.

Was mach ich hier falsch ?

mkinzler 15. Jun 2014 19:54

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Sollte wohl eher
Delphi-Quellcode:
HelpFile := ExtractFilePath(Application.ExeName) + '\HTML\AppHelp.html';
lauten

waldforest 15. Jun 2014 20:01

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
nein, dies ist nicht die Ursache, ExtractFilePath(Application.ExeName) liefert den Pfad mit abgeschlossenem '\'

kompi 15. Jun 2014 20:17

AW: HTML-Hilfedatei, keine Kontentanzeige
 
So weit ich die Dokumentation verstanden habe, kann HTMLHelpviewer nur die kompilierten HTML Dateien mit der Endung .chm verwenden. Dies sollte sich mit HelpNDoc aber problemlos verwirklichen lassen.

Kompi

waldforest 15. Jun 2014 20:22

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
angeblich geht auch HTML, dennoch danke für den Hinweis.
Ich habe den gleichen Effect bei der chm-Datei, auch kein Content.

himitsu 15. Jun 2014 20:52

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Ein aktuelles WinHelp ist auch installiert?
http://support.microsoft.com/kb/917607/de und http://www.soft-ware.net/tipps/tipp5...-angezeigt.asp

Die CHM ist im Prinzip nur eine ZIP-Datei mit den HTML-Dateien drin ... da könnte es schon sein, daß es auch unkomprimiert geht.


Um welche Windowsversion handelt es sich denn und wo liegen die Hilfedateien (z.B. Netzlaufwerk)?


Wir sind letztendlich auf Help&Manual umgestiegen und dafür hab ich dann noch einen billigen HTTP-Server erstellt, welcher die Hilfe lokal bereitstellt, weil der IE HTML-Dateien aus dem Intranet nicht wirklich mag.
(von dem kleinen HTTP-Server, welcher Help&Manual bereitestellt wird, um ebenfalls Probleme zu umgehen, von dem kann ich aus Sicherheitsgründen nur abraten)

Es ist schon erstaunlich, daß nach so vielen Jahrzehnten Computergeschichte praktisch kein Hilfesystem existiert, welches wirklich immer und überall läuft. :stupid:

waldforest 16. Jun 2014 05:27

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Halllo,
ich habe die aktuellen Datei geladen, aktuell liegt die Hilfe noch auf meinem Desktop PC, soll aber zukünftig im Netzwerk zur Verfügung gestellt werden. Aktuell nutze ich WIN 7.
Den beschriebenen Artikel habe ich schon gelesen, wie gesagt, die Hilfedatei ansich wird durch Windows erkannt und sauber angezigt, nur der Aufruf aus meiner Anwendung mit der entsprechenden ID erfolgt nicht.
Von daher gehe ich davon aus, dass es eher ein Problem der Delphianwendung ist.

Gibt es ein Beispiel, welches unter XE3 erstellt wurde ?

pmoegenb 16. Jun 2014 08:27

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,

Hast Du die Unit HTMLHelpViewer in der .dpr-Datei angegeben ?

z. B.:
Delphi-Quellcode:
program AKGeb32;

uses
  Forms,
  HTMLHelpViewer, etc.
  • Die Hilfedatei .chm muss entweder in den Projektoptionen oder den einzelnen Forms ohne Pfadangabe angegeben werden.
  • Die Constantendatei von HelpnDoc wird nicht benötigt.
Du gibst z. B. wenn Du den Inhalt anzeigen möchtest folgenden Code an:

Delphi-Quellcode:
Application.HelpShowTableOfContents;

oder Keyword:

Delphi-Quellcode:
Application.HelpKeyword('Glossar');

oder HelpContext:

Delphi-Quellcode:
Application.HelpContext(15);

an.

P. S.: Die Registry muss außerdem für die Schlüssel:
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x]
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x \HHRestrictions]
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x \ItssRestrictions]

einen entsprechende Eintrag erhalten

waldforest 16. Jun 2014 10:51

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
vielen Dank für die Tipps.

Ich habe dies so umgesetzt, hat leider nicht zum Erfolg geführt.

Wenn ich

Application.HelpKeyword('Glossar');
oder HelpContext:

Application.HelpContext(15);
aufrufe erfolgt ein Exception, Stack Overflow

himitsu 16. Jun 2014 11:55

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Und wo knallt es?

(Falls du die Debug-DCUs deaktiviert hast, solltest du sie mal vorübergehend wieder aktivieren)

waldforest 16. Jun 2014 12:27

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
hier ruft sich die OnHelp wohl selber auf.


@Es scheint eine echte Herausforderung zu sein ein Hilfesythem aufzubauen.

himitsu 16. Jun 2014 13:00

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Wo hast'n das
Delphi-Quellcode:
Application.HelpKeyword('Glossar');
aufgerufen?
Könnest du einfach mal den stacktrace kopieren, nach der exception?

Ja ist es.
Wir hatte da am Ende bestimmt 2-3 Monate lang immer mal wieder dran gesessen und versucht rauszufinden was nun wieder knallt, bis es dann bei allen großen Kunden mal lief.



Aktuell hab ich das OnHelp selbst implementiert, da wir die Hilfeeinträge live aus der Datenbank ziehen und dort hinterlegt haben welches Control/Fenster mit welcher Hilfeseite verlinkt ist.
* Hilfe = eine der HTML-Dateien vom Help&Manual, inkl. eines optionalen Anchor oder eine direkte URL
* Die Tabelle ist auch in der Synchronisation, so daß man die Hilfe problemlos und voallem unabhängig von Programmupdates erweitern kann.

Das Ganze wird standardmäßig an den Standardbrowser geschickt, kann aber auch Programmintern in einem Fenster mit TWebBrowser angezeigt werden. (ein alternatives Programmfenster mit Chromium war auch mal mit drin, aber ist dann doch wieder rausgeflogen, obwohl der TWebBrowser vorallem in Serverumgebungen mit Netzwerkpfaden nicht funktioniert)
Und ein paar Anpassungen am JavaScript/CSS des Help&Manual waran damals auch nötig, weil der TWebBrowser damit nicht zurecht gekommen ist, bzw. diese Funktionen einfach "sperrte".

Und dann läuft die Verbreitung mit über einen AppServer im Intranet, wo ich via TidHTTPServer die Hilfedateien freigebe. Die Dateien könnten aber auch via externem HTTP-Server oder Netzwerkfreigabe (file:) geladen werden. Und theoretisch kann man HTML-Dateien auch direkt aus den Resourcen einer EXE/DLL via RES:-Protokoll vom Windows streamen lassen.

waldforest 16. Jun 2014 14:59

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
vielen Dank für die Unterstützung.

ich Rufe Application.HelpKeyword('Glossar') im Form.onhelp auf.

Ich betreibe die Programmierung als "Hobby", für meinen eigenen kleinen Betrieb, niuchts kommerzielles, und glaube jetzt meine Grenzen erreicht zu haben.
wenn hier Profis 2-3 Monate zur Umsetzung benötigen will ich nicht abschätzen wie viel Zeit ich investieren muss.

Wenn dies wirklich so kompliziert ist, dann werde ich wohl eher auf ein Hilfesystem in meiner Anwendung verzichten, bzw. erstellen uns als externe, also nicht über F1 aufrufbare, Hilfe aufbauen.
Habe gerade mal über Batch versucht, vielleicht bekomm ich es über Shellexecute auch hin.

Dennoch, und mit dem Thema Trace habe ich mich noch nicht befasst, dieses Thema hatte ich noch nicht, wie kann man diesen Trace ziehen ?

himitsu 16. Jun 2014 15:57

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Im Debug-Layout (wird beim Debuggen eigentlich automatisch geladen) die wichtigstens Fenster:
* Aufruf-Stack > Liste das auktuell aufgerufenen Funktionen (meistens oben links, da wo im Standard-Layout der Struktur liegt)
* Thread-Status > der aktive Thread und die vorhandene Threads (meistens unten, bei den Compiler-Meldungen)
* Liste überwachter Ausdrücke
* Haltepunkte
(wenn nicht vorhanden, dann siehe Ansicht > Debugfenster)

Wenn der Programmablauf angehalten ist, z.B. nach einer Exception, dann einfach in Aufruft-Stack gehen, alles markieren und Strg+C.
Programm mit F9 starten und warten bis es knallt ... meistens sieht man dann im Stack-Strace wo man grade ist und vorallem von wo die aktuelle Funktion/Codestelle aufgerufen wurde.

blondervolker 16. Jun 2014 16:58

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag,

hab es ganz einfach gelöst.Hilfe erstellt als HTM mit Knoten.
Diese komplett in einen Ordner"Hilfe" geworfen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);

//Hilfe über Browser öffnen und Fehler unterdrücken
Webbrowser1.Silent := true;
webbrowser1.navigate(extractfilepath(application.exename)+ 'Html/Hilfe.htm');
Siehe Abbildung.Vielleicht hilft das weiter...

zeras 16. Jun 2014 19:57

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Zitat:

Zitat von waldforest (Beitrag 1262392)
Halllo,
ich habe die aktuellen Datei geladen, aktuell liegt die Hilfe noch auf meinem Desktop PC, soll aber zukünftig im Netzwerk zur Verfügung gestellt werden. Aktuell nutze ich WIN 7.

Ich hatte mal Probleme, dass, wenn die Hilfe auf dem Netz liegt, diese nicht geladen wird. Dann habe ich diese beim Start ins Userverzeichnis kopiert und dann ging es. Aber du hast ja schon Probleme, wenn du die Hilfe lokal starten willst.

waldforest 16. Jun 2014 20:17

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
anbei mein Aufrufstack,

die ersten Aufrufe, welche sich unzählige male wiederholen habe ich nicht mit dabei getan.


F_Wkorb.TWkorb.FormHelp(1,1002,True)
Vcl.Forms.TApplication.DoOnHelp(1,1002,True)
Vcl.Forms.TApplication.HelpContext(1002)
F_Wkorb.TWkorb.FormHelp(1,1002,True)
Vcl.Forms.TApplication.DoOnHelp(1,1002,True)
Vcl.Forms.TApplication.HelpContext(1002)
F_Wkorb.TWkorb.FormHelp(1,1002,True)
Vcl.Forms.TApplication.DoOnHelp(1,1002,True)
Vcl.Forms.TApplication.HelpContext(1002)
F_Wkorb.TWkorb.FormHelp(1,1002,True)
Vcl.Forms.TApplication.DoOnHelp(1,1002,True)
Vcl.Forms.TApplication.HelpContext(1002)
Vcl.Forms.TCustomForm.WMHelp((83, (), 0, $8ADF0, 0))
Vcl.Controls.TControl.WndProc((83, 0, 568816, 0, 0, 0, (), 44528, 8, (), 0, 0, ()))
Vcl.Controls.TWinControl.WndProc((83, 0, 568816, 0, 0, 0, (), 44528, 8, (), 0, 0, ()))
Vcl.Forms.TCustomForm.WndProc((83, 0, 568816, 0, 0, 0, (), 44528, 8, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(330554,83,0,568816)
Vcl.Controls.TWinControl.DefaultHandler(???)

himitsu 16. Jun 2014 22:42

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hilfe-Aufrufe werden erst an Application.OnHelp, bzw. TApplicationEvents.OnHelp geleitet und wenn sie dort nicht verarbeitet wurden, dann auch nochmal an ActiveForm.OnHelp und erst danach landet der Aufruf bei
Delphi-Quellcode:
HelpSystem.Hook(..., ActiveForm.HelpFile, {Hilfe-Index/Context}...) // wenn eine Hilfe-Datei bei ActiveForm.HelpFile angegeben wurde

und wenn nicht vorhanden oder es False lieferte, dann bei
Delphi-Quellcode:
HelpSystem.Hook(..., Application.HelpFile, {Hilfe-Index/Context}...) // wenn eine Hilfe-Datei bei Application.HelpFile angegeben wurde

und wenn es das auch nicht gibt, oder es ebenfalls False lieferte, dann bei CM_INVOKEHELP
Delphi-Quellcode:
PostMessage(..., CM_INVOKEHELP, {Hilfe-Index/Context}...);


Wenn man also in einem dieser OnHelp die Hilfe nochmals aufruft, dann landet man natürlich in einer Endlosschleife,
außer man verlässt diese Hilfestruktur, verarbeitet den Aufruf selber oder gibt den Aufruf direkt an das HelpSystem oder CM_INVOKEHELP weiter (und sagt natürlich Result:=True und CallHelp:=False).
Wenn die Parameter Command und Data richtig sind und man nichts "Anderes" aufrufen will, dann kann man mit Result:=True und CallHelp:=True der Hilfestruktur sagen, daß es das selber an HelpSystem oder CM_INVOKEHELP weitergeben soll, ohne andere OnHelp auszulösen.

waldforest 17. Jun 2014 05:28

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Hallo,
vielen Dank,
klingt alles plausibel, ich habe nun meine Eintragungen im OnHelp gelöscht.


Ich bin einen Schritt weiter, wenn ich über einen Button die Hilfe
mit Application.HelpCommand(HELP_CONTEXT,1002)

aufrufe funktioniert es.

So, nun läuft es.
Ich habe nun im OnShow
Application.HelpFile := ExtractFilePath(Application.ExeName) + 'LHelp.chm';
angegeben und nun läuft es.

(bisher hatte ich diese im OnCreate ...)


Vielen Dank für die Unterstützung mich auf den weg zu bringen....

ATON 4. Nov 2016 10:30

AW: HTML-Hilfedatei, keine Kontentanzeige
 
Zitat:

Zitat von himitsu (Beitrag 1262455)
Aktuell hab ich das OnHelp selbst implementiert, da wir die Hilfeeinträge live aus der Datenbank ziehen und dort hinterlegt haben welches Control/Fenster mit welcher Hilfeseite verlinkt ist.
* Hilfe = eine der HTML-Dateien vom Help&Manual, inkl. eines optionalen Anchor oder eine direkte URL
* Die Tabelle ist auch in der Synchronisation, so daß man die Hilfe problemlos und voallem unabhängig von Programmupdates erweitern kann.

Das Ganze wird standardmäßig an den Standardbrowser geschickt, kann aber auch Programmintern in einem Fenster mit TWebBrowser angezeigt werden. (ein alternatives Programmfenster mit Chromium war auch mal mit drin, aber ist dann doch wieder rausgeflogen, obwohl der TWebBrowser vorallem in Serverumgebungen mit Netzwerkpfaden nicht funktioniert)
Und ein paar Anpassungen am JavaScript/CSS des Help&Manual waran damals auch nötig, weil der TWebBrowser damit nicht zurecht gekommen ist, bzw. diese Funktionen einfach "sperrte".

Und dann läuft die Verbreitung mit über einen AppServer im Intranet, wo ich via TidHTTPServer die Hilfedateien freigebe. Die Dateien könnten aber auch via externem HTTP-Server oder Netzwerkfreigabe (file:) geladen werden. Und theoretisch kann man HTML-Dateien auch direkt aus den Resourcen einer EXE/DLL via RES:-Protokoll vom Windows streamen lassen.

Hallo himitsu,

genau so möchte ich das auch bauen. Dabei gibt es das Problem, dass der ANCHOR nicht gefunden wird. Wie hast Du die Verknüpfung zu Bildern und anderen Webseiten innerhalb der Datenbank gelöst? Gibt es da eventuell ein kleines Beispiel-Project?

Viele Grüße


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