AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MessageDlg mit OnHelp

Ein Thema von ralfiii · begonnen am 19. Nov 2014 · letzter Beitrag vom 21. Nov 2014
Antwort Antwort
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

MessageDlg mit OnHelp

  Alt 19. Nov 2014, 11:57
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: MessageDlg mit OnHelp

  Alt 19. Nov 2014, 12:44
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.

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);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#3

AW: MessageDlg mit OnHelp

  Alt 19. Nov 2014, 13:20
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:
     if MessageDlg('Yes or no?', mtConfirmation, [mbYes, mbNo, mbHelp], 1)=mrYes then
        Memo1.Lines.Add('Yes clicked');
aufrufen (in dem Dialog auf "Hilfe" clicken), dann kommt der erwähnte Fehler.

Wie soll ich da THelpManager einbauen?

Danke,
Ralf


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.

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);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#4

AW: MessageDlg mit OnHelp

  Alt 19. Nov 2014, 13:58
Hatte es auch so gemacht
Delphi-Quellcode:
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;
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?

[edit]
Der Grund ist, daß der Help-Button in diesen Dialogen sich direkt an GetHelpSystem > HelpSystem.Hook wendet und nicht über Application.DoHelp geht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Nov 2014 um 14:03 Uhr)
  Mit Zitat antworten Zitat
CCRDude

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

AW: MessageDlg mit OnHelp

  Alt 21. Nov 2014, 10:48
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: MessageDlg mit OnHelp

  Alt 21. Nov 2014, 11:39
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:14 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