AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein CHM-Datei im eigenen Formular anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

CHM-Datei im eigenen Formular anzeigen

Ein Thema von joehoehal · begonnen am 7. Sep 2012 · letzter Beitrag vom 13. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#1

CHM-Datei im eigenen Formular anzeigen

  Alt 7. Sep 2012, 14:38
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
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
184 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 7. Sep 2012, 15:10
Hi,

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

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

Gruß
Steku
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#3

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 9. Sep 2012, 14:03
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
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#4

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 10. Sep 2012, 14:12
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.
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#5

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 11. Sep 2012, 14:43
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
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#6

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 11. Sep 2012, 15:31
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...
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#7

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 11. Sep 2012, 18:40
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

Geändert von joehoehal (11. Sep 2012 um 21:07 Uhr)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#8

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 12. Sep 2012, 10:19
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.
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#9

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 12. Sep 2012, 19:47
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
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#10

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 13. Sep 2012, 08:49
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
Angehängte Dateien
Dateityp: pas snlHTMLHelpEmbedded.pas (9,5 KB, 24x aufgerufen)

Geändert von CCRDude (13. Sep 2012 um 08:49 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 01:51 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