1
0
Files
aarre
applications
bindings
components
Comba_Animation
aboutcomponent
acs
beepfp
callite
chelper
chemtext
cmdline
cmdlinecfg
colorpalette
cryptini
csvdocument
epiktimer
extrasyn
fpexif
fpsound
fpspreadsheet
fractions
freetypepascal
geckoport
gradcontrols
grid_semaphor
industrialstuff
iosdesigner
iphonelazext
jujiboutils
jvcllaz
kcontrols
lazautoupdate
lazbarcodes
lclextensions
longtimer
manualdock
mbColorLib
mplayer
multithreadprocs
nvidia-widgets
onguard
orpheus
playsoundpackage
poweredby
powerpdf
rgbgraphics
richmemo
richview
rtfview
rx
scrolltext
smnetgradient
spktoolbar
svn
systools
tdi
thtmlport
tparadoxdataset
tvplanit
xdev_toolkit
CFHelpers.pas
CvtHelp.pas
HelpUtil.pas
PrefsUtil.pas
PropListUtil.pas
ReadMe.txt
RtfDoc.pas
TestRtfDoc.pas
ViewDoc.pas
ViewWith.pas
XDevStatus.html
create_app_mac.sh
dfmtolfm.ini
dfmtolfm.pas
filelist.txt
makepasx.pas
makever.pas
zlibar
zmsql
examples
image_sources
lclbindings
wst
lazarus-ccr/components/xdev_toolkit/HelpUtil.pas

157 lines
4.6 KiB
ObjectPascal

unit HelpUtil;
{
Isolates platform-specific help access for Lazarus LCL.
Assumes Application.HelpFile is set.
Create THelpUtilManager object in main form's FormCreate handler and
call its Free method in main form's FormDestroy handler.
Display help topic by calling Application.HelpContext.
Author: Phil Hess.
Copyright: Copyright (C) 2007 Phil Hess. All rights reserved.
License: Modified LGPL. This means you can link your code to this
compiled unit (statically in a standalone executable or
dynamically in a library) without releasing your code. Only
changes to this unit need to be made publicly available.
}
interface
uses
SysUtils,
{$IFDEF MSWINDOWS}
Windows,
{$ELSE}
Unix,
{$ENDIF}
{$IFDEF LINUX}
FileUtil,
{$ENDIF}
Forms,
Dialogs,
HelpIntfs;
type
THelpUtilManager = class(THelpManager)
destructor Destroy; override;
procedure ShowError( ShowResult : TShowHelpResult;
const ErrMsg : string); override;
function ShowHelpForQuery( Query : THelpQuery;
AutoFreeQuery : Boolean;
var ErrMsg : string): TShowHelpResult; override;
end;
implementation
const
HELP_CONTEXT = 1;
HELP_QUIT = 2;
{$IFDEF MSWINDOWS} {LCL doesn't have TApplication.HelpCommand, so call Win API}
function DoHelpCommand(Command : Word;
Data : LongInt) : Boolean;
begin
Result := WinHelp(Application.MainForm.Handle,
PChar(Application.HelpFile),
Command, Data);
end; {DoHelpCommand}
{$ENDIF}
{THelpUtilManager}
destructor THelpUtilManager.Destroy;
begin
{$IFDEF MSWINDOWS}
DoHelpCommand(HELP_QUIT, 0);
{Shut down help application if running and not in use
by another instance of program}
{$ENDIF}
inherited Destroy;
end;
procedure THelpUtilManager.ShowError( ShowResult : TShowHelpResult;
const ErrMsg : string);
begin
if ShowResult = shrHelpNotFound then
MessageDlg('Help not implemented.', mtError, [mbOK], 0)
else if ShowResult = shrViewerNotFound then
MessageDlg('Help viewer not found.', mtError, [mbOK], 0)
else if ShowResult = shrViewerError then
MessageDlg('Unable to start help viewer.', mtError, [mbOK], 0)
else if ShowResult <> shrSuccess then
MessageDlg(ErrMsg, mtError, [mbOK], 0);
end;
function THelpUtilManager.ShowHelpForQuery( Query : THelpQuery;
AutoFreeQuery : Boolean;
var ErrMsg : string): TShowHelpResult;
{$IFDEF LINUX}
function SearchForBrowser(const BrowserFileName : string) : string;
begin
Result :=
SearchFileInPath(BrowserFileName, '', GetEnvironmentVariable('PATH'),
PathSeparator, [sffDontSearchInBasePath]);
end;
function GetBrowserPath : string;
begin
Result := SearchForBrowser('firefox');
if Result = '' then
Result := SearchForBrowser('konqueror'); {KDE browser}
if Result = '' then
Result := SearchForBrowser('epiphany'); {GNOME browser}
if Result = '' then
Result := SearchForBrowser('mozilla');
if Result = '' then
Result := SearchForBrowser('opera');
end;
{$ENDIF}
begin
if Query is THelpQueryContext then {Is a help context request?}
begin
{$IFDEF MSWINDOWS}
DoHelpCommand(HELP_CONTEXT, THelpQueryContext(Query).Context);
Result := shrSuccess;
{$ELSE}
{$IFDEF DARWIN}
if fpSystem('Open -a "HelpViewer" "' + Application.HelpFile + '"') = 127 then
// Note: Renamed from Help Viewer.app to HelpViewer.app with 10.5.
//
// Note: With OS X earlier than 10.4 (Tiger), if connected to network
// but not connected to Internet, takes Help Viewer 1-2 minutes to
// recover and turn off rotating ball! Can comment out previous Shell
// and uncomment next line to use default browser instead.
// if Shell('Open "' + Application.HelpFile + '"') = 127 then
Result := shrViewerError
else
Result := shrSuccess;
{$ELSE} {For now, shell to first browser found, passing help file name}
if GetBrowserPath <> '' then {Found a browser?}
begin
if fpSystem(GetBrowserPath + ' ' + Application.HelpFile) = 127 then
Result := shrViewerError
else
Result := shrSuccess;
end
else
Result := shrViewerNotFound;
{$ENDIF}
{$ENDIF}
end
else {Not a help context request?}
Result := inherited ShowHelpForQuery(Query, AutoFreeQuery, ErrMsg);
end; {THelpUtilManager.ShowHelpForQuery}
end.