Application console Delphi: comment ajouter OnHelp aux boîtes de dialogue de message?
J'ai une application console Delphi qui met à jour les composants sur un serveur. Il fonctionne de manière semi-interactive, il y a parfois l'invite "êtes-vous sûr?" etc, via ce code:
MessageDlg('Are you sure?', mtConfirmation, [mbYes, mbNo, mbHelp], SOME_HELP_CONTEXT)...
Comme vous pouvez le voir, j'aimerais fournir des liens d'aide vers celui-ci, dans ce cas, en allant sur notre site Web avec en SOME_HELP_CONTEXTannexe notre page d'aide:?contextid=SOME_HELP_CONTEXT
Je fais cela à partir de nos programmes GUI et j'attribue Application.OnHelp := myHelper;où myHelperest une méthode d'un objet qui appelle simplement ShellExecuteà ouvrir le lien Web.
Mais il n'y a pas de variable d'application dans une application console.
Existe-t-il un moyen assez simple d'y parvenir?
Réponses
Puisque vous utilisez l' Dialogsunité, vous disposez déjà de la Applicationvariable. Parce que Dialogsutilise Controls, qui initialise la Applicationvariable qui se trouve dans l' Formsunité. Tout ce que vous avez à faire est d'utiliser en plus l' Formsunité dans votre code.
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.