Delphi 控制台应用程序 : how to add OnHelp to message dialogs?

标签 delphi console

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

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

如您所见,我想提供指向它的帮助链接,在本例中,访问我们的网站并在我们的帮助页面上附加 SOME_HELP_CONTEXT:?contextid=SOME_HELP_CONTEXT

我从我们的 GUI 程序中执行此操作并分配 Application.OnHelp := myHelper; 其中 myHelper 是一个对象的方法,它只调用 ShellExecute 打开网页链接。

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

有没有一种相当简单的方法可以实现这一点?

最佳答案

由于您使用的是 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.

关于Delphi 控制台应用程序 : how to add OnHelp to message dialogs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63626307/

相关文章:

multithreading - 如何让delphi等待30秒然后继续

delphi - 独立 Web 服务器与 Apache/IIS

c# - 如果 StreamWriter 变量在 if 语句内初始化并作为参数传递给 Console.SetOut(),它是否会过早地被 GC 处理?

linux - 如何在使用 Yocto 构建的嵌入式系统上关闭控制台?

C# 控制台列格式设置和定位

Delphi:快速(呃)宽字符串连接

windows - 检查 ReadDirectoryChangesw 是否适用于给定路径

c# - 相当于什么?在正则表达式中的delphi MatchesMask中?

iphone - 模糊的 NSZombie 控制台日志

javascript - 为什么我点击表单时出现表单错误