码迷,mamicode.com
首页 > 其他好文 > 详细

代码编辑器(一)-TSynCompletionProposal用法

时间:2016-02-11 22:35:39      阅读:593      评论:0      收藏:0      [点我收藏+]

标签:

注意,本系列均转载自http://blog.163.com/zom1995@126/

 

网上有人给我一个SynEdit这个东西,因为我很喜欢自己编个代码编辑器,但要是用Delphi直接弄的,就我现在这样,肯定弄不出来。还好的是,这里面有Demo,不过全是英文的...

技术分享
回到正题,其实我在百度搜了这个的用法——没有满意的,所以我就在这里说一下。
如果Delphi能加载SynEdit之类的东西,很好,现在找到这个:SynEdit里面的TSynCompletionProposal。
因为我的程序里面用了两个TSynCompletionProposal。
由于默认名太长,我分别重新命名:ScpVB和ScpHTML。
常用属性如下:
clBackground属性:背景色。
clSelect属性:被选择的前景色。仅对DefaultType为ctCode时有效。
clSelectText属性:被选中的文字颜色。仅对DefaultType为ctCode时有效。
clTitleBackground属性:标题背景色。仅对DefaultType为ctCode时有效。
DefaultType属性:决定SynCompletionProposal以什么样式显示。
Editor属性:用于哪个SynEdit还是SynMemo
EndOfTokenChr属性:默认是()[].   就是,当输入前面其中之一的,就会关闭SynCompletionProposal。仅对DefaultType为ctCode时有效。
TriggerChars属性:默认是“.”    当输入的字符是.弹出SynCompletionProposal
InsertList属性:输入填充的文字
ItemList属性:用于显示提示,注意要和InsertList对应
NbLinesInWindow属性:显示的行数,默认为8(因为没有Height属性)。仅对DefaultType为ctCode时有效。
Resizeable属性:决定SynCompletionProposal的大小是否可以调整。仅对DefaultType为ctCode时有效。
ShortCut属性:设置快捷键(默认是Ctrl+空格,但是会跟切换输入法发生冲突)。
TimerInterval属性:同Timer的Interval属性。
Title属性:在SynCompletionProposal显示标题,仅对DefaultType为ctCode时有效。
Width属性:调整SynCompletionProposal的宽度,仅对DefaultType为ctCode时有效。
Option属性:
scoCaseSensitive:区分大小写。仅对DefaultType为ctCode时有效。
scoLimitToMatchedText:自动过滤符合的文字。如果为False则选择第一个。仅对DefaultType为ctCode时有效。
scoTitleIsCentered:标题居中。仅对DefaultType为ctCode时有效。
scoUseInsertList:使用InsertList的内容。如果为False则使用ItemList的内容。仅对DefaultType为ctCode时有效。
scoUsePrettyText:允许使用\color{clBlue}等格式化文字。如果为False则直接输出文字,不格式化。但是当DefaultType为ctHint和ctParam即使是False也仍然有效。
scoUseBuiltInTimer:使用Timer,否则按TriggerChar里面的字符将不会弹出SynCompletionProposal
scoEndCharCompletion:按下EndToken中的其中一个字符(空格和回车除外)完成CodeCompletion。仅对DefaultType为ctCode时有效。
scoCompleteWithTab:使用Tab键关闭SynCompletionProposal。仅对DefaultType为ctCode时有效。
scoCompleteWithEnter:使用Enter键关闭SynCompletionProposal。仅对DefaultType为ctCode时有效。

例:模拟vb6的自动列出成员的操作。

在窗体添加一个SynMemo,一个SynVBSyn,一个SynCompletionProposal。
SynMemo1的Highlighter属性设置为SynVBSyn1;SynCompletionProposal的Name改为ScpVB,ShortCut改为None,TimerInterval改为50,Editor设置为SynMemo1
Option属性里面的scoUseInsertList, scoUsePrettyText, scoUseBuiltInTimer改成True。
EndOfTokenChr改为()‘"=. (注意“.”后面有空格)
TriggerChar默认为“.”不用管
找到Columns,单击“...”再单击Add New,关闭。
然后在InsertList写需要填充的文字,在ItemList写提示性文字,格式如下
    比如输入Function Sin(x) As Double,要想把前面的Sub的颜色改为深蓝色,后面的Sin(x)改为加粗文本,可以这样写:
\color{clNavy}Function \column{}\style{+B}\color{0}Sin(x) \style{-B} As Single
技术分享
 直接写成这样的也可以,但没有上面的效果好,具体见我的相册
技术分享
输入代码后,运行程序,当按“.”后,如图所示:
技术分享
不过有的人会问,我把TriggerChars改成了其他字符,为什么不弹出来这个框框,但按了相应的快捷键可以弹出?尝试把InserList里面的每一行内容前面加上TriggerChars里面输入的字符试试。如果不行的话,先一个空格,然后再按相应的按键。不过这种情况多见于不成对匹配的符号(除了小数点,但包括西文引号)。如下图:
技术分享
 下图是在前面加上了& 。但如果前面是文本不是符号可能不会弹出SynCompletionProposal。
技术分享
技术分享
 
DefaultType的用法,这里是以不同形式显示的SynCompletionProposal,默认为ctCode,也就是上图。另外两个是ctHint和ctParam,其中:
ctHint:以提示显示,会显示在鼠标指针所在的位置,但按任意键或者单击不再显示,图:
技术分享
ctParam:将所有的都显示出来,但是得手动输入字符。这种情况多用于输入函数参数时提示。图:
技术分享
不过,如果SynCompletionProposal里面的东西很多的话,用ctHint和ctParam,会全部显示SynCompletionProposal里面的内容,会有一部分看不到的。
这些东西可以不用手动添加代码就可以使用,不过需要引用一些东西:
SynEdit,SynMemo: SynEdit, SynMemo
SynCompletionProposal: SynCompletionProposal
语法高亮:SynEditHighlighter, SynHighlighterxxx(xxx代表编程语言或者程序,如cpp, vb, pas等)

已知问题:

在Windows 7(32位和64位)和Windows 8.1(64位)系统测试此控件,在调用SynCompletionProposal之后下次调用会导致SynCompletionProposal变长,Windows XP系统暂时没有发现问题。这也就是我为什么推荐大家把Resizeable改为True的原因。

解决方法:

在SynCompletionProposal的OnClose事件中修改nbLinesInWindow的值。
procedure TForm8.SynCompletionProposal1Close(Sender: TObject);
begin
  SynCompletionProposal1.NbLinesInWindow := 5;   //可以是任意一个整数,但是下次调用显示的是7个...
end;
这样可以避免下次调用SynCompletionProposal变长。

找到这个:SynEdit里面的TSynCompletionProposal。因为我的程序里面用了两个TSynCompletionProposal。由于默认名太长,我分别重新命名:ScpVBScpHTML

常用属性如下(Windows 7下测试):

clBackground属性:背景色。

clSelect属性:被选择的前景色。仅当DefaultTypectCode时有效。

clSelectText属性:被选中的文字颜色。仅当DefaultTypectCode时有效。

clTitleBackground属性:标题背景色。仅当DefaultTypectCode时有效。

 

DefaultType属性:决定SynCompletionProposal以什么样式显示。

Editor属性:用于哪个SynEdit还是SynMemo

EndOfTokenChr属性:默认是()[].   就是,当输入前面其中之一的,就会关闭SynCompletionProposal。仅当DefaultTypectCode时有效。

TriggerChars属性:默认是“.”    当输入的字符是.弹出SynCompletionProposal

InsertList属性:输入填充的文字

ItemList属性:用于显示提示,注意要和InsertList对应

NbLinesInWindow属性:显示的行数,默认为8(因为没有Height属性)。仅当DefaultTypectCode时有效。

Resizeable属性:决定SynCompletionProposal的大小是否可以调整。仅当DefaultTypectCode时有效。

ShortCut属性:设置快捷键(默认是Ctrl+空格,但是会跟切换输入法发生冲突)。

TimerInterval属性:同TimerInterval属性。

Title属性:在SynCompletionProposal显示标题,仅当DefaultTypectCode时有效。

Width属性:调整SynCompletionProposal的宽度,仅当DefaultTypectCode时有效。

Option属性:

scoCaseSensitive:区分大小写。仅当DefaultTypectCode时有效。

scoLimitToMatchedText:自动过滤符合的文字。如果为False则选择第一个。仅当DefaultTypectCode时有效。

scoTitleIsCentered:标题居中。仅当DefaultTypectCode时有效。

scoUseInsertList:使用InsertList的内容。如果为False则使用ItemList的内容。仅当DefaultTypectCode时有效。

scoUsePrettyText:允许使用\color{clBlue}等格式化文字。如果为False则直接输出文字,不格式化。但是当DefaultTypectHintctParam即使是False也仍然有效。

scoUseBuiltInTimer:使用Timer,否则按TriggerChar里面的字符将不会弹出SynCompletionProposal

scoEndCharCompletion:按下EndToken中的其中一个字符(空格和回车除外)完成CodeCompletion。仅当DefaultTypectCode时有效。

scoCompleteWithTab:使用Tab键关闭SynCompletionProposal。仅当DefaultTypectCode时有效。

scoCompleteWithEnter:使用Enter键关闭SynCompletionProposal。仅当DefaultTypectCode时有效。

 

例:模拟vb6的自动列出成员的操作。

在窗体添加一个SynMemo,一个SynVBSyn,一个SynCompletionProposal

SynMemo1Highlighter属性设置为SynVBSyn1

SynCompletionProposalName改为ScpVB

ShortCut改为NoneTimerInterval改为50Editor设置为SynMemo1

Option属性里面的scoUseInsertList, scoUsePrettyText, scoUseBuiltInTimer改成True

EndOfTokenChr改为()‘"=. (注意“.”后面有空格)

TriggerChar默认为“.”不用管

找到Columns,单击“...”再单击Add New,关闭。

然后在InsertList写需要填充的文字,在ItemList写提示性文字,格式如下

    比如输入Function Sin(x) As Double,要想把前面的Sub的颜色改为深蓝色,后面的Sin(x)改为加粗文本,可以这样写:

\color{clNavy}Function \column{}\style{+B}\color{0}Sin(x) \style{-B} As Single

技术分享

 直接写成这样的也可以,但没有上面的效果好,具体见我的相册

输入代码后,运行程序,当按“.”后,如图所示:

技术分享

不过有的人会问,我把TriggerChars改成了其他字符,为什么不弹出来这个框框,但按了相应的快捷键可以弹出?尝试把InserList里面的每一行内容前面加上TriggerChars里面输入的字符试试。如果不行的话,先一个空格,然后再按相应的按键。不过这种情况多见于不成对匹配的符号(除了小数点,但包括西文引号)。如下图:

 下图是在前面加上了&

但如果前面是文本不是符号可能不会弹出SynCompletionProposal

技术分享

DefaultType的用法,这里是以不同形式显示的SynCompletionProposal,默认为ctCode,也就是上图。另外两个是ctHintctParam,其中:

ctHint:以提示显示,会显示在鼠标指针所在的位置,但按任意键或者单击不再显示,图:

技术分享

ctParam:将所有的都显示出来,但是得手动输入字符。这种情况多用于输入函数参数时提示。图:

技术分享

不过,如果SynCompletionProposal里面的东西很多的话,用ctHintctParam,会全部显示SynCompletionProposal里面的内容,会有一部分看不到的。

这些东西可以不用手动添加代码就可以使用,不过需要引用一些东西:

SynEditSynMemo: SynEdit, SynMemo

SynCompletionProposal: SynCompletionProposal

语法高亮:SynEditHighlighter, SynHighlighterxxxxxx代表编程语言或者程序)

 

已知问题:

Windows 732位和64位)和Windows 8.164位)系统测试此控件,在调用SynCompletionProposal之后下次调用会导致SynCompletionProposal变长,Windows XP系统暂时没有发现问题。这也就是我为什么推荐大家把Resizeable改为True的原因。

解决方法:

SynCompletionProposalOnClose事件中修改nbLinesInWindow的值。

procedure TForm8.SynCompletionProposal1Close(Sender: TObject);

begin

  SynCompletionProposal1.NbLinesInWindow := 5;   //可以是任意一个整数,但是下次调用显示的是7...

end;

这样可以避免下次调用SynCompletionProposal变长。

代码编辑器(一)-TSynCompletionProposal用法

标签:

原文地址:http://www.cnblogs.com/Zory/p/5186677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!