我有一个 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/