注意,本系列均转载自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 := ;   //可以是任意一个整数,但是下次调用显示的是7个...
end;
这样可以避免下次调用SynCompletionProposal变长。

【转】代码编辑器(一)-TSynCompletionProposal用法的更多相关文章

  1. Python 代码编辑器怎么选?PyCharm、VS Code、Jupyter Notebook 都各有特色

    Python 代码编辑器怎么选?PyCharm.VS Code.Jupyter Notebook 都各有特色,Jupyter 适合做数据分析这些需要可视化的操作,PyCharm 更适合做完整的 Pyt ...

  2. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载

    Sublime Text这款代码编辑器是Jeff 一直都在使用的,前段时间转用到版本3,因为感觉Sublime Text 3 启动速度更加快,运行更加流畅——虽然3 还是在Beta 阶段.下面就直接分 ...

  3. NanUI for Winform 使用示例【第一集】——山寨个代码编辑器

    NanUI for Winform从昨天写博客发布到现在获得了和多朋友的关注,首先感谢大家的关注和支持!请看昨天本人的博文<NanUI for Winform发布,让Winform界面设计拥有无 ...

  4. 轻量、强大的代码编辑器控件-WinForm完美版

    前段时间做个小项目需要用到一个代码编辑器控件,但网上搜了半天,居然没发现一个完全满意的编辑器.现有的一些编辑器有: FastedTextBox 优点:1.  轻量. 2. 样式美观. 3. DEMO完 ...

  5. 在线代码编辑器CodeMirror简介

    1.什么是Code Mirror 最近做一个项目需要在网页上实现一个代码编辑器,支持语法高亮.自动缩进.智能提示等功能.发现Code Mirror刚好满足所有需求.Code Mirror是由js写的一 ...

  6. (视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定

    本文是<快速创建网站>系列的第6篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  7. 微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器

    微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器 在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 预览 ...

  8. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    我用过的编辑器不少,真不少- 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号.它小巧绿色且速度非 ...

  9. 集成代码编辑器ACE的经验

    ACE是最流行的在线代码编辑器之一,在CanTK的集成开发环境GameBuilder里也使用了ACE.ACE的功能非常强大,但是由于使用方法不当,大家反映GameBuilder的代码编辑器不好用.最近 ...

随机推荐

  1. 视频相关android软件

    1. 视频解码工具:ffmpeg, http://www.ffmpeg.org/ 2. java有一个开源程序: yoyoPlayer, 可以到这个代码中去学习相关的音频知识.http://www.b ...

  2. TesCase-GUI(图形用户界面)测试

    GUI测试是功能测试的一种表现形式.不仅要考虑GUI本身的测试,也要考虑GUI所表现的系统功能的测试.   GUI应具有的要素 1.符合标准和规范 2.直观性 (1)用户界面是否洁净.不唐突.不拥挤? ...

  3. 单源最短路_SPFA_C++

    当我们需要求一个点到其它所有点的最短路时,我们可以采用SPFA算法 代码特别好写,而且可以有环,但是不能有负权环,时间复杂度是O(α(n)n),n为边数,α(n)为n的反阿克曼函数,一般小于等于4 模 ...

  4. C++静态代码分析工具推荐——PVS-Studio

    长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...

  5. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  6. Java垃圾收集器之--Garbage-First Collector

    简介       Garbage-First(G1)垃圾收集器全面支持JDK7 Upate 4及后续版本.G1收集器是一个服务器形式(server-style)的垃圾收集器,主要用于内存大.多处理器的 ...

  7. 业务gis 怎么让别的开发人员不需要懂gis就可以搞开发? (五)

    我们稍微搭建了一个比较简单的图形使用模板,flex端操作这里我就不说了,按大家喜好写,最后javascript部分可以通过jsduck工具生成一个开发文档给业务开发人员,前提注释部分要写好,要公开的注 ...

  8. NFS服务器

    NFS是网络文件系统(Network File System)的简称,可实现在多种网络上共享和装配远程文件系统.最大的功能是通过网络,让不同操作系统的计算机共享数据,所以它可以看成一个文件服务器. 1 ...

  9. Digest [IAB_SRI_Online_Advertising_Effectiveness]

    http://www.pwc.com/en_GX/gx/entertainment-media/pdf/IAB_SRI_Online_Advertising_Effectiveness_v3.pdf

  10. SQL常用日期转换

    0   或   100   (*)     默认值   mon   dd   yyyy   hh:miAM(或   PM)       1   101   美国   mm/dd/yyyy       ...