Componentes.Terceros.SDAC/internal/4.10.0.10/1/Source/Design/HelpUtils.pas
2007-10-05 14:48:18 +00:00

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.