Application console Delphi: comment ajouter OnHelp aux boîtes de dialogue de message?

Aug 28 2020

J'ai une application console Delphi qui met à jour les composants sur un serveur. Il fonctionne de manière semi-interactive, il y a parfois l'invite "êtes-vous sûr?" etc, via ce code:

MessageDlg('Are you sure?', mtConfirmation, [mbYes, mbNo, mbHelp], SOME_HELP_CONTEXT)...

Comme vous pouvez le voir, j'aimerais fournir des liens d'aide vers celui-ci, dans ce cas, en allant sur notre site Web avec en SOME_HELP_CONTEXTannexe notre page d'aide:?contextid=SOME_HELP_CONTEXT

Je fais cela à partir de nos programmes GUI et j'attribue Application.OnHelp := myHelper;myHelperest une méthode d'un objet qui appelle simplement ShellExecuteà ouvrir le lien Web.

Mais il n'y a pas de variable d'application dans une application console.

Existe-t-il un moyen assez simple d'y parvenir?

Réponses

4 SertacAkyuz Aug 28 2020 at 09:16

Puisque vous utilisez l' Dialogsunité, vous disposez déjà de la Applicationvariable. Parce que Dialogsutilise Controls, qui initialise la Applicationvariable qui se trouve dans l' Formsunité. Tout ce que vous avez à faire est d'utiliser en plus l' Formsunité dans votre code.

program Project1;

{$APPTYPE CONSOLE} {$R *.res}

uses
  System.SysUtils, Vcl.Dialogs, Vcl.Forms, Winapi.Windows;

type
  THelper = class
  protected
    function OnHelp(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean; virtual;
  end;

{ THelper }

function THelper.OnHelp(Command: Word; Data: THelpEventData;
  var CallHelp: Boolean): Boolean;
begin
  MessageBox(GetActiveWindow, PChar(Format('help request about "%d"', [Data])), '', 0);
  CallHelp := False;
end;

var
  Helper: THelper;
begin
  try
    Helper := THelper.Create;
    Application.OnHelp := Helper.OnHelp;
    MessageDlg('Are you sure?', mtConfirmation, [mbYes, mbNo, mbHelp], 5);
    Helper.Free;
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.