mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-24 13:59:20 +02:00
example: idehelp: fpc keywords
git-svn-id: trunk@35026 -
This commit is contained in:
parent
139a3f1c56
commit
5e7cd09324
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -3804,6 +3804,10 @@ examples/icons/project1.lpr svneol=native#text/plain
|
|||||||
examples/icons/project1.res -text
|
examples/icons/project1.res -text
|
||||||
examples/icons/unit1.lfm svneol=native#text/plain
|
examples/icons/unit1.lfm svneol=native#text/plain
|
||||||
examples/icons/unit1.pas svneol=native#text/pascal
|
examples/icons/unit1.pas svneol=native#text/pascal
|
||||||
|
examples/idehelp/demoidehelp.lpk svneol=native#text/plain
|
||||||
|
examples/idehelp/demoidehelp.pas svneol=native#text/plain
|
||||||
|
examples/idehelp/myidehelp.lfm svneol=native#text/plain
|
||||||
|
examples/idehelp/myidehelp.pas svneol=native#text/plain
|
||||||
examples/idequickfix/quickfixdemo1.pas svneol=native#text/plain
|
examples/idequickfix/quickfixdemo1.pas svneol=native#text/plain
|
||||||
examples/idequickfix/quickfixexample.lpk svneol=native#text/plain
|
examples/idequickfix/quickfixexample.lpk svneol=native#text/plain
|
||||||
examples/idequickfix/quickfixexample.pas svneol=native#text/plain
|
examples/idequickfix/quickfixexample.pas svneol=native#text/plain
|
||||||
|
37
examples/idehelp/demoidehelp.lpk
Normal file
37
examples/idehelp/demoidehelp.lpk
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<Package Version="4">
|
||||||
|
<Name Value="DemoIDEHelp"/>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Files Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Filename Value="myidehelp.pas"/>
|
||||||
|
<HasRegisterProc Value="True"/>
|
||||||
|
<UnitName Value="myidehelp"/>
|
||||||
|
</Item1>
|
||||||
|
</Files>
|
||||||
|
<Type Value="RunAndDesignTime"/>
|
||||||
|
<RequiredPkgs Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="IDEIntf"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPkgs>
|
||||||
|
<UsageOptions>
|
||||||
|
<UnitPath Value="$(PkgOutDir)"/>
|
||||||
|
</UsageOptions>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
</Package>
|
||||||
|
</CONFIG>
|
21
examples/idehelp/demoidehelp.pas
Normal file
21
examples/idehelp/demoidehelp.pas
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ This file was automatically created by Lazarus. Do not edit!
|
||||||
|
This source is only used to compile and install the package.
|
||||||
|
}
|
||||||
|
|
||||||
|
unit DemoIDEHelp;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
myidehelp, LazarusPackageIntf;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
begin
|
||||||
|
RegisterUnit('myidehelp', @myidehelp.Register);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterPackage('DemoIDEHelp', @Register);
|
||||||
|
end.
|
8
examples/idehelp/myidehelp.lfm
Normal file
8
examples/idehelp/myidehelp.lfm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
object MyHelpSetupDialog: TMyHelpSetupDialog
|
||||||
|
Left = 250
|
||||||
|
Height = 466
|
||||||
|
Top = 250
|
||||||
|
Width = 557
|
||||||
|
Caption = 'MyHelpSetupDialog'
|
||||||
|
LCLVersion = '0.9.31'
|
||||||
|
end
|
113
examples/idehelp/myidehelp.pas
Normal file
113
examples/idehelp/myidehelp.pas
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
unit myidehelp;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, LazHelpHTML,
|
||||||
|
LazHelpIntf, HelpIntfs, IDEHelpIntf, IDEDialogs;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TMyFPCKeywordHelpDatabase
|
||||||
|
Help for FPC keywords. }
|
||||||
|
|
||||||
|
TMyFPCKeywordHelpDatabase = class(THTMLHelpDatabase)
|
||||||
|
private
|
||||||
|
FKeywordPrefixNode: THelpNode;
|
||||||
|
public
|
||||||
|
KeywordToText: TStrings; // every line has the format: Keyword=Text
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function GetNodesForKeyword(const HelpKeyword: string;
|
||||||
|
var ListOfNodes: THelpNodeQueryList; var {%H-}ErrMsg: string
|
||||||
|
): TShowHelpResult; override;
|
||||||
|
function ShowHelp(Query: THelpQuery; {%H-}BaseNode, {%H-}NewNode: THelpNode;
|
||||||
|
{%H-}QueryItem: THelpQueryItem;
|
||||||
|
var {%H-}ErrMsg: string): TShowHelpResult; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
TMyHelpSetupDialog = class(TForm)
|
||||||
|
private
|
||||||
|
public
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
MyHelpSetupDialog: TMyHelpSetupDialog;
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure Register;
|
||||||
|
begin
|
||||||
|
HelpDatabases.CreateHelpDatabase('MyFPCKeyWordHelpDB',TMyFPCKeywordHelpDatabase,true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TMyFPCKeywordHelpDatabase }
|
||||||
|
|
||||||
|
constructor TMyFPCKeywordHelpDatabase.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
KeywordToText:=TStringList.Create;
|
||||||
|
KeywordToText.Add('procedure=Named code block');
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TMyFPCKeywordHelpDatabase.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(KeywordToText);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMyFPCKeywordHelpDatabase.GetNodesForKeyword(
|
||||||
|
const HelpKeyword: string; var ListOfNodes: THelpNodeQueryList;
|
||||||
|
var ErrMsg: string): TShowHelpResult;
|
||||||
|
var
|
||||||
|
KeyWord: String;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result:=shrHelpNotFound;
|
||||||
|
if (csDesigning in ComponentState) then exit;
|
||||||
|
if (FPCKeyWordHelpPrefix<>'')
|
||||||
|
and (LeftStr(HelpKeyword,length(FPCKeyWordHelpPrefix))=FPCKeyWordHelpPrefix) then begin
|
||||||
|
// HelpKeyword starts with KeywordPrefix
|
||||||
|
KeyWord:=copy(HelpKeyword,length(FPCKeyWordHelpPrefix)+1,length(HelpKeyword));
|
||||||
|
i:=KeywordToText.IndexOfName(lowercase(KeyWord));
|
||||||
|
if i>=0 then begin
|
||||||
|
// this help database knows this keyword
|
||||||
|
// => add a node, so that if there are several possibilities the IDE can
|
||||||
|
// show the user a dialog to choose
|
||||||
|
if FKeywordPrefixNode=nil then
|
||||||
|
FKeywordPrefixNode:=THelpNode.CreateURL(Self,'','');
|
||||||
|
FKeywordPrefixNode.Title:='Pascal keyword '+KeyWord;
|
||||||
|
CreateNodeQueryListAndAdd(FKeywordPrefixNode,nil,ListOfNodes,true);
|
||||||
|
Result:=shrSuccess;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMyFPCKeywordHelpDatabase.ShowHelp(Query: THelpQuery; BaseNode,
|
||||||
|
NewNode: THelpNode; QueryItem: THelpQueryItem; var ErrMsg: string
|
||||||
|
): TShowHelpResult;
|
||||||
|
var
|
||||||
|
KeywordQuery: THelpQueryKeyword;
|
||||||
|
KeyWord: String;
|
||||||
|
Txt: String;
|
||||||
|
begin
|
||||||
|
Result:=shrHelpNotFound;
|
||||||
|
if not (Query is THelpQueryKeyword) then exit;
|
||||||
|
KeywordQuery:=THelpQueryKeyword(Query);
|
||||||
|
KeyWord:=copy(KeywordQuery.Keyword,length(FPCKeyWordHelpPrefix)+1,length(KeywordQuery.Keyword));
|
||||||
|
Txt:=KeywordToText.Values[lowercase(KeyWord)];
|
||||||
|
IDEMessageDialog('My fpc keyword key',
|
||||||
|
'The keyword "'+KeyWord+'":'#13#13
|
||||||
|
+Txt,mtInformation,[mbOk]);
|
||||||
|
Result:=shrSuccess;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user