如何解决Delphi控制台应用程序:如何在消息对话框中添加OnHelp?
我有一个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
即可打开Web链接。
但是控制台应用程序中没有Application变量。
有没有很简单的方法来实现这一目标?
解决方法
由于您使用的是Dialogs
单元,因此您已经有了Application
变量。因为Dialogs
使用Controls
,它会初始化Application
单元中的Forms
变量。您要做的就是在代码中另外使用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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。