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