Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CHM-Datei im eigenen Formular anzeigen (https://www.delphipraxis.net/170255-chm-datei-im-eigenen-formular-anzeigen.html)

joehoehal 7. Sep 2012 13:38

CHM-Datei im eigenen Formular anzeigen
 
Hallo,
ich habe zu meinem Programm eine Hilfedatei im CHM-Format geschrieben. Beim normalen Einbinden wird sie mit dem entsprechenden Programm von Microsoft angezeigt. Ich möchte sie aber in einem eigenen, zu meinem Programm gehörigen Formular anzeigen, damit sie den gleichen Style hat. Hier im Forum habe ich nichts Brauchbares dafür gefunden. Hat jemand eine Idee?
joehoehal

Steku 7. Sep 2012 14:10

AW: CHM-Datei im eigenen Formular anzeigen
 
Hi,

bin beim googeln auf das gestoßen, vielleicht hilft es:

http://www.helpware.net/delphi/delphi_and_hh.htm

Gruß
Steku

joehoehal 9. Sep 2012 13:03

AW: CHM-Datei im eigenen Formular anzeigen
 
Ich denke, dass eine Lösung die Benutzung von HtmlHelp aus dem Windows-API ist (http://msdn.microsoft.com/en-us/libr...ffice.10).aspx).
Dort steht

Declare Function HtmlHelp Lib "HHCtrl.ocx" Alias "HtmlHelpA" _
(ByVal hwndCaller As Long, _
ByVal pszFile As String, _
ByVal uCommand As Long, _
dwData As Any) As Long

und bei der Beschreibung der Parameter

hwndCaller: A handle to an application window or Null. This window handle may be used as a parent, owner, or message recipient for HTML Help, depending on how it is used. In VBA, instead of setting this to vbNullString, set it to 0 (zero).

Ich verstehe das so, dass dies der Handle des Windows ist, in dem die Hilfe angezeigt werden soll, und habe deshalb geschrieben:

HtmlHelp(Form2.Handle,'d:\projekte\mc\help\multico llect.chm',HH_HELP_CONTEXT,22) ;

Tatsächlich wird das gewünschte Topic angezeigt, aber nicht in Form2, sondern im Standard-Fenster.

Woran kann das liegen?

joehoehal

CCRDude 10. Sep 2012 13:12

AW: CHM-Datei im eigenen Formular anzeigen
 
Zitat:

Zitat von joehoehal (Beitrag 1182186)
Tatsächlich wird das gewünschte Topic angezeigt, aber nicht in Form2, sondern im Standard-Fenster.

Woran kann das liegen?

Daran, dass es funktioniert wie es soll - um mal aus der MSDN zu zitieren:
Zitat:

The fundamental feature of the HTML Help API is the help window. Through the API commands, you can create a help window that hosts a Microsoft Internet Explorer DLL (Shdocvw.dll) and displays an HTML file that you specify. The help window is owned by the window you specify. As an owned window, a help window automatically stays on top of its owner and closes when the owner is closed.
Vielleicht kannst Du ja mal versuchen, den Parent des Fenstern nach Anzeige auf Deine Form umzubiegen, oder eben doch, ob ein TWebBrowser das auch - irgendwie (hier die Herausforderung) - angezeigt bekommt.

joehoehal 11. Sep 2012 13:43

AW: CHM-Datei im eigenen Formular anzeigen
 
Wie ich den "Parent ... umbiegen" soll, weiß ich nicht. Mit TWebBroser habe ich's schon versucht.
Wenn ich die CHM-Datei mit TWebBrowser.Navigate aufrufe, wird sie im Standard-Fenster und nicht in meinem Browser / Formular angezeigt. Ich habe auch keinen Parameter gefunden, mit dem ich das ändern könnte.
Dagegen kann man die nicht-compilierte HTML-Hilfe gut mit TWebBrowser anzeigen. Wenn man in Navigate die zu einem bestimmten Topic gehörende HTML-Datei angibt, werden Topic, Inhaltsverzeichnis, Index usw. angezeigt, sodass man vollen Zugang zum gesamten Hilfesystem hat. Das löst prinzipiell mein Problem, ist aber nicht sehr konfortabel, weil man dann anstelle einer einzigen CHM-Datei ein ganzes Paket von HTMLs, Javascripts, Stylesheets usw. bereitstellen muss.
joehoehal

blondervolker 11. Sep 2012 14:31

AW: CHM-Datei im eigenen Formular anzeigen
 
Guten Tag,

hast'e es schon mal mit "Fast-Help" propiert?
Dort man sich verschiedene Möglichkeiten aussuchen,um
eine Hilfe zu erstellen.
Ich benutze diese Software seit Jahren...
Übrigens auch Webbrowser1.Navigate...:-D

joehoehal 11. Sep 2012 17:40

AW: CHM-Datei im eigenen Formular anzeigen
 
Das Erstellen der Hilfe ist nicht mein Problem. Ich benutze dazu HelpnDoc (http://www.helpndoc.com), das ein halbes Dutzend Ausgabeformate anbietet und gut funktioniert. Zu prüfen, ob mir FastHelp weiterhelfen könnte, lohnt sich für mich micht, da die Freeware-Version zeitlich begrenzt ist und die Shareware 250 € kosten würde, was ich dafür nicht bezahlen möchte.
joehoehal

CCRDude 12. Sep 2012 09:19

AW: CHM-Datei im eigenen Formular anzeigen
 
Parent umbiegen, mal ganz grob:

Delphi-Quellcode:
procedure TForm1.bn1Click(Sender: TObject);
var
   h: THandle;
begin
   Application.HelpShowTableOfContents;
   h := FindWindow('HH Parent', 'der titel meiner hilfe');
   if h > 0 then begin
      Windows.SetParent(h, panel2.Handle);
      Windows.SetWindowPos(h, 0, 0, 0, panel2.ClientWidth, panel2.ClientHeight, 0);
   end;
end;
Feintunen könnte man das vermutlich, indem man erstmal das Handle des Inhaltes rausholt, um nicht das ganze Fenster umbiegen und anzeigen zu müssen. Auch muss man bei Resize natürlich anpassen.

Ist sicherlich auch nicht die schönste Methode, aber schnell umgesetzt.

joehoehal 12. Sep 2012 18:47

AW: CHM-Datei im eigenen Formular anzeigen
 
Hallo CCRDude,
danke für den Tipp. Das hat mich schon weiter gebracht, aber leider noch nicht ans Ziel.
Ich kann mit deinem Code das Hilfe-Fenster im Client-Bereich meines Formulars anzeigen. Allerdings sehe ich dann immer noch den Rahmen, der nicht zu meinem Style passt. Ich habe versucht, die störenden Bereiche mit Panels abzudecken. Das funktionert mit BringToFront auch. Aber sobald ich einmal außerhalb des Hilfe-Bereichs und dann wieder zurück klicke, kommen die abgedeckten Bereiche wieder zum Vorschein. Ich kann die Panels auch nicht wieder nach vorn bringen, weil ich kein Ereignis finde, das beim Klicken auf den Hilfe-Bereich ausgelöst wird.
Am besten wäre es, wenn man nicht das gesamte Hilfe-Fenster, sondern nur den Client-Bereich in ein ein anderes Formular einfügen könnte. Dafür habe ich aber weder in SetWindow einen geeigneten Parameter noch sonst eine brauchbare Prozedur gefunden.
Gruß! joehoehal

CCRDude 13. Sep 2012 07:49

AW: CHM-Datei im eigenen Formular anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das mit dem Client-Bereich meinte ich mit dem "Inhalt rausholen" :)

Mal kurz zwei Ansätze skizziert:
  1. Fenster größer machen als das Parent-Control, dann verschwindet der Rahmen auch. Siehe Ansatz mit rpmMain.
  2. Alle Kindelemente mit verschieben (das meintest Du, und auch schon ich mit "Inhalte rausholen). Mit viel Arbeit besser, aber da hat mein Code noch große Lücken (richtige Positionierung, vor allem aber das Message-Handling).

Nutzung in meinem Beispielprojekt:
Delphi-Quellcode:
procedure TForm1.bn1Click(Sender: TObject);
begin
   Application.HelpShowTableOfContents;
   FHelper.Control := panel2;
   FHelper.Attach('titel meiner hilfedatei');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   FHelper := THTMLHelpViewerHelper.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   FHelper.Free;
end;

procedure TForm1.panel2Resize(Sender: TObject);
begin
   FHelper.ReAlign;
end;
Hab's mal angehängt :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Seite 1 von 2  1 2      

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