![]() |
MessageDlg mit OnHelp
Hallo!
Besteht eine einfache Möglichkeit, irgendwie auf das Clicken des Help-Buttons eines MessageDlg zu reagieren? So auf die schnelle schaut es aus, als würde Form.OnHelp und Application.OnHelp nicht getriggert werden. Statt dessen gibt's eine Exception "Keine kontextsensitive Hilfe installiert." - selbst wenn ein (dummy) Helpfile in der Form definiert wurde. Danke, Ralf |
AW: MessageDlg mit OnHelp
Besser nicht Application.OnIrgendwas, sonder TApplicationEvents.OnIrgendwas benutzen. Ist sicherer so.
In XE scheint es noch so zu gehen: OnHelp-Event definieren und dann HelpContext/HelpKeyword angeben. Eventuell liegt es dort aber daran, daß in dem Programm eventuell noch irgendwo Altcode von der alten Hilfe vorhanden ist. :gruebel: Dein Problem (tritt in XE3 auch so auf) wäre über THelpManager.RegisterViewer zu lösen.
Delphi-Quellcode:
procedure THelpManager.ShowContextHelp(const ContextID: Longint; const HelpFileName: string);
... begin ... { if nobody handles context-sensitive help, then bail. } if FExtendedViewerList.Count = 0 then raise EHelpSystemException.CreateRes(@SNoContext); |
AW: MessageDlg mit OnHelp
Hab eh ein TApplicationEvents verwendet und dort dann OnHelp definiert.
Wenn ich bei dem Formular kein Helpfile definiere, dann wird der Event nie aufgerufen. Wenn ich zumindest ein Dummy-Helpfile angebe (ich hab mal IBDAC.chm verwendet), dann wird das OnHelp aufgerufen, wenn ich auf einem Button mit definierte, HelpContext oder HelpKeyword auf F1 drücke. Will ich Hilfe aber über sowas
Code:
aufrufen (in dem Dialog auf "Hilfe" clicken), dann kommt der erwähnte Fehler.
if MessageDlg('Yes or no?', mtConfirmation, [mbYes, mbNo, mbHelp], 1)=mrYes then
Memo1.Lines.Add('Yes clicked'); Wie soll ich da THelpManager einbauen? Danke, Ralf Zitat:
|
AW: MessageDlg mit OnHelp
Hatte es auch so gemacht
Delphi-Quellcode:
und da es dann an der gezeigten Stelle knallt, würde es dort reichen, wenn man in FExtendedViewerList etwas rein tut, also über RegisterViewer einen IHelpManager registriert? :gruebel:
procedure TForm23.Form23Click(Sender: TObject);
begin MessageDlg('xx', mtInformation, [mbYes, mbHelp], 3); end; function TForm23.ApplicationEvents1Help(Command: Word; Data: NativeInt; var CallHelp: Boolean): Boolean; begin ShowMessage('Help'); end; [edit] Der Grund ist, daß der Help-Button in diesen Dialogen sich direkt an GetHelpSystem > HelpSystem.Hook wendet und nicht über Application.DoHelp geht. :wall: |
AW: MessageDlg mit OnHelp
Hmmm... Delphi 2010? Ich glaube selbst in XE muss man den Support für .chm noch explizit angeben. Ich erinnere mich grob (sitze gerade nicht an dem Rechner) dass ich dafür explizit die Unit HTMLHelpViewer brauche. Sonst würde er noch uraltes .hlp wollen.
Vielleicht scheitert er ja am Format, sieht daher keine kontextsensitive Hilfe installiert? |
AW: MessageDlg mit OnHelp
Bei Uns ist es so, daß ich das OnHelp selber verarbeite
und im Hintergrund keine Hilfedatei mehr direkt angebunden ist. Vorher war es eine HLP, aber das funktioniert ja nicht mehr (standardmäßig kein Viewer in aktuellen Windowsen) und sonst gibt es einfach kein Hilfesystem, welches immer und überall problemlos funktioniert. Alle Forms bekommen automatisch einen HelpContext 100 zugewiesen. Und dann wird in OnHelp auf das ActiveControl und dann Richtung Form deren Parents (Panels, TabControls, GroupBoxen, Form) geprüft, ob in der DB eine Hilfeverlinkung (FormName+ControlName) existiert. Im Hintergrund gibt es dort keine einzelne Hilfedatei mehr. Geht dann alles auf die HTML-Hilfe von Help&Manual. Die Hilfedateien liegen dann entweder in einem Verzeichnis, oder auf einem Webserver. Bei vielen Kunden gibt es keinen oder nur einen eingeschränkten Internetzugang, also ist der Webserver nicht erreichbar. HTML-Dateien im Internetexplorer zu laden funktioniert nicht immer, da Netzlaufwerke als unsicher angesehen werden (von Microsoft) und die Hilde dann nicht oder nur teilweise geladen wird (JS und CSS wird gern blockert), also gibt es im Netzwerk einen kleinen selbstgeschrieben Hilfe-Server (TidHTTPServer), welcher nur unsere Hilfedateien ausliefert. HTTP über Post 212 (211 = DataSnap) wird vom IE nicht als problematisch angesehn. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz