CHM enthält
HTML.
EPub enthält
HTML.
Da muss man schonmal nicht viel "ummodeln".
Umgang mit Delphi und EPub, siehe Delphipraxis:
Anzeigen eines Ebooks im epub-Format
Mein Weg ist:
Ein Formular, das dem der CHM-Hilfe verblüffend ähnlich sieht.
Ein "eingebauter" Webserver (ähnlich zum Vorschlag von himitsu).
Hilfe ist in 'nem "erweiterten" EPub. Das EPub ist auch per EPubViewer lesbar.
Die "Erweiterung" ist 'ne MemTable, die ich im Programm als DataSet nutzen kann, um so leicht auf F1 und den Wert aus dem HelpContext der Komponenten, Edits, was auch immer, reagieren kann.
Der Rest ist eigentlich nur: Auf den Hilfeaufruf reagieren. Der eingebaute TWebBrowser wird hierbei per Navigate auf eine
Url zum eingebauten WebServer geleitet, der entnimmt der Aufrufurl den HelpContext, sucht den passenden Satz im DataSet, findet dort die Angaben zur entsprechenden Datei im EPub, entzippt sie und liefert sie an den TWebBrowser.
Der Baum im "CHM-Hilfe-Clone-Tree" wird beim Programmstart aus dem DataSet generiert, ebenso die Stichwortsuche. Beim Klick auf irgendwas im Baum oder in der Stichwortsuche, wird auch nur der TWebBrowser per Navigate (wie oben) auf den WebServer geleitet.
Klingt alles viel aufwändiger, als es eigentlich wirklich ist.