141 lines
3.1 KiB
ObjectPascal
141 lines
3.1 KiB
ObjectPascal
|
|
{$IFNDEF CLR}
|
||
|
|
|
||
|
|
{$I Dac.inc}
|
||
|
|
|
||
|
|
unit HelpUtils;
|
||
|
|
{$ENDIF}
|
||
|
|
|
||
|
|
interface
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
uses
|
||
|
|
{$IFDEF VER8P}
|
||
|
|
Dialogs,
|
||
|
|
{$ELSE}
|
||
|
|
Forms,
|
||
|
|
{$ENDIF}
|
||
|
|
SysUtils;
|
||
|
|
{$ENDIF}
|
||
|
|
|
||
|
|
procedure ShowHelp(HelpFile, JumpID: string);
|
||
|
|
procedure OpenUrl(Url: string);
|
||
|
|
procedure MailTo(Address: string);
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
uses
|
||
|
|
{$IFDEF VER8P}
|
||
|
|
{$IFDEF CLR}
|
||
|
|
System.ComponentModel.Design,
|
||
|
|
Borland.Studio.ToolsAPI,
|
||
|
|
Borland.Vcl.HelpIntfs,
|
||
|
|
{$ELSE}
|
||
|
|
HelpIntfs,
|
||
|
|
{$ENDIF}
|
||
|
|
{$ENDIF}
|
||
|
|
Registry, ShellAPI, ShlObj, Windows;
|
||
|
|
{$ENDIF}
|
||
|
|
|
||
|
|
{$IFDEF VER8P}
|
||
|
|
type
|
||
|
|
IApiHelpSystem = {$IFDEF CLR}IHelpService{$ELSE}IHelpSystem{$ENDIF};
|
||
|
|
{$ENDIF}
|
||
|
|
|
||
|
|
procedure ShowHelp(HelpFile, JumpID: string);
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
var
|
||
|
|
{$IFDEF VER8P}
|
||
|
|
HelpSystem: IApiHelpSystem;
|
||
|
|
{$ELSE}
|
||
|
|
OldFile: string;
|
||
|
|
{$ENDIF}
|
||
|
|
{$ENDIF}
|
||
|
|
begin
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
{$IFDEF VER8P}
|
||
|
|
{$IFDEF CLR}
|
||
|
|
HelpSystem := BorlandIDE.GetService(typeof(IHelpService)) as IHelpService;
|
||
|
|
{$ELSE}
|
||
|
|
GetHelpSystem(HelpSystem);
|
||
|
|
{$ENDIF}
|
||
|
|
if Assigned(HelpSystem) then
|
||
|
|
{$IFDEF CLR}
|
||
|
|
try
|
||
|
|
HelpSystem.ShowHelpFromUrl(JumpID)
|
||
|
|
except on E: Exception do
|
||
|
|
{$IFNDEF VER9}
|
||
|
|
MessageDlg(e.Message, mtError, [mbOk], 0);
|
||
|
|
{$ENDIF}
|
||
|
|
end
|
||
|
|
{$ELSE}
|
||
|
|
HelpSystem.ShowTopicHelp(JumpID, HelpFile)
|
||
|
|
{$ENDIF}
|
||
|
|
else
|
||
|
|
MessageDlg('Failed to use IDE HelpSystem', mtError, [mbOk], 0);
|
||
|
|
{$ELSE}
|
||
|
|
OldFile := Application.HelpFile;
|
||
|
|
try
|
||
|
|
Application.HelpFile := HelpFile;
|
||
|
|
Application.HelpJump(JumpID);
|
||
|
|
finally
|
||
|
|
Application.HelpFile := OldFile;
|
||
|
|
end;
|
||
|
|
{$ENDIF}
|
||
|
|
{$ENDIF}
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure OpenUrl(Url: string);
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
var
|
||
|
|
htmlDescription: string;
|
||
|
|
shellcommand: string;
|
||
|
|
i: integer;
|
||
|
|
Path: {$IFDEF WIN32}array[0..MAX_PATH] of char{$ELSE}string{$ENDIF};
|
||
|
|
Filename: string;
|
||
|
|
{$ENDIF}
|
||
|
|
begin
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
Filename := '';
|
||
|
|
with TRegistry.Create do begin
|
||
|
|
RootKey := HKEY_CLASSES_ROOT;
|
||
|
|
if OpenKey('.htm', False) and KeyExists('') then begin
|
||
|
|
htmlDescription := ReadString('');
|
||
|
|
CloseKey;
|
||
|
|
if OpenKey(htmlDescription + '\shell\open\Command', False) and KeyExists('') then begin
|
||
|
|
shellcommand := ReadString('');
|
||
|
|
for i := Length(shellcommand) downto 1 do
|
||
|
|
if shellcommand[i] = ' ' then begin
|
||
|
|
FileName := Copy(shellcommand, 2, i - 3);
|
||
|
|
if not FileExists(Filename) then
|
||
|
|
Filename := '';
|
||
|
|
break;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
if Filename = '' then begin
|
||
|
|
{$IFDEF WIN32}
|
||
|
|
SHGetSpecialFolderPath(0, Path, $26{CSIDL_PROGRAM_FILES}, False);
|
||
|
|
{$ELSE}
|
||
|
|
Path := Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);
|
||
|
|
{$ENDIF}
|
||
|
|
FileName := Path + '\Internet Explorer\iexplore.exe';
|
||
|
|
end;
|
||
|
|
{$IFDEF WIN32}
|
||
|
|
ShellExecute(0, 'open', PChar(Filename), PChar(Url), '', SW_SHOW);
|
||
|
|
{$ELSE}
|
||
|
|
ShellExecute(0, 'open', Filename, Url, '', SW_SHOW);
|
||
|
|
{$ENDIF}
|
||
|
|
{$ENDIF}
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure MailTo(Address: string);
|
||
|
|
begin
|
||
|
|
{$IFDEF MSWINDOWS}
|
||
|
|
ShellExecute(0, 'open', {$IFDEF WIN32}PChar('mailto:' + Address){$ELSE}'mailto:' + Address{$ENDIF},
|
||
|
|
'', '', SW_SHOW);
|
||
|
|
{$ENDIF}
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|