Delphi 控制台应用程序:如何将 OnHelp 添加到消息对话框?

Delphi console application: how to add OnHelp to message dialogs?

我有一个 Delphi 控制台应用程序可以更新服务器上的组件。它以半交互方式运行,偶尔会出现“你确定吗?”的提示。等,通过此代码:

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

如您所见,我想为其提供帮助 link,在这种情况下,请访问我们的网站并在我们的帮助页面上附加 SOME_HELP_CONTEXT?contextid=SOME_HELP_CONTEXT

我在我们的 GUI 程序中执行此操作,我分配 Application.OnHelp := myHelper; 其中 myHelper 是一个对象的方法,它只调用 ShellExecute 来打开网络 link .

但是控制台应用程序中没有应用程序变量。

有没有一个相当简单的方法来实现这个?

由于您使用的是 Dialogs 单位,因此您已经有了 Application 变量。因为,Dialogs 使用 Controls,它初始化 Forms 单元中的 Application 变量。您所要做的就是在代码中额外使用 Forms 单元。

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.