Scintilla教程(7): 多选以及滚动

Multiple Selection and Virtual Space

整体介绍

一次可能有多个选择处于活动状态。按住Ctrl键并用鼠标拖动,可以进行更多选择。最新的选择是主选择,决定自动显示文档的哪个部分。除了主选择之外的任何选择都称为附加选择。上一节中的调用对主选项进行操作。始终至少有一个选择。可通过SCI_CANCEL将选择简化为仅主选择,SCI_CANCEL通常映射到Esc键。

矩形选择将作为多个选择处理,但会记住原始矩形范围,以便对矩形选择以不同方式处理后续操作。例如,粘贴矩形选择将每一块放置在垂直列中。

虚拟空间是每行末尾以外的空间。插入符号可以移动到虚拟空间,但在键入某些文本或使用其他文本插入命令之前,不会向文档中添加任何实际空间。

将不连续的选择复制到剪贴板时,每个选择都会按顺序添加到剪贴板文本中,不带分隔符。对于矩形选择,文档的行尾添加在每行文本之后。矩形选择总是从顶行复制到底行,而不是按选择的顺序。不会复制虚拟空间。

SCI_SETMULTIPLESELECTION,SCI_GETMULTIPLESELECTION

SCI_SETMULTIPLESELECTION(bool multipleSelection) SCI_GETMULTIPLESELECTION → bool**

启用或禁用多个选择。禁用“多重选择”时,在按住Ctrl键的同时用鼠标拖动,无法选择多个范围。

SCI_SETADDITIONALSELECTIONTYPING,SCI_GETADDITIONALSELECTIONTYPING

SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping) SCI_GETADDITIONALSELECTIONTYPING → bool

无论是打字、换行、光标左/右/上/下、退格、删除、主页还是结束工作,都可以同时进行多项选择。还允许选择和字行删除命令。

SCI_SETMULTIPASTE,SCI_GETMULTIPASTE

SCI_SETMULTIPASTE(int multiPaste) SCI_GETMULTIPASTE → int

当粘贴到多个选择中时,粘贴的文本可以进入SC_MULTIPASTE_ONCE=0的主选择中,或者进入SC_MULTIPASTE_EACH=1的每个选择中。SC_MULTIPASTE_ONCE是默认值。

SCI_SETVIRTUALSPACEOPTIONS,SCI_GETVIRTUALSPACEOPTIONS

SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions) SCI_GETVIRTUALSPACEOPTIONS → int

可以为矩形选择启用或禁用虚拟空间,也可以在其他情况下启用或禁用虚拟空间,或者在这两种情况下启用或禁用虚拟空间。有三个位标志SCVS_RECTANGULARSELECTION=1、SCVS_USERACCESSIBLE=2和SCVS_NOWRAPLINESTART=4,可以单独设置。默认情况下,SCVS_NONE=0将禁用所有虚拟空间的使用。

SCVS_NOWRAPLINESTART防止左箭头移动和选择换行到上一行。这通常与虚拟空间结合使用,但这是一个独立的设置,因此在没有虚拟空间的情况下也可以工作。

SCI_SETRECTANGULARSELECTIONMODIFIER,SCI_GETRECTANGULARSELECTIONMODIFIER

SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier) SCI_GETRECTANGULARSELECTIONMODIFIER → int

在GTK和Qt上,可以设置用于指示在与鼠标拖动组合时应创建矩形选择的键。这三个可能的值是SCMOD_CTRL=2、SCMOD_ALT=4(默认值)或SCMOD_SUPER=8。由于窗口管理器可能已经使用了SCMOD_ALT,因此窗口管理器可能需要配置以允许此选择。SCMOD_SUPER通常是一个依赖于系统的修改键,如Windows键盘上的左Windows键或Mac上的命令键。

SCI_GETSELECTIONS

SCI_GETSELECTIONS → int

返回当前活动的选择数。始终至少有一个选择。

SCI_GETSELECTIONEMPTY

SCI_GETSELECTIONEMPTY → bool

如果每个选定范围都为空,则返回1,否则返回0。

SCI_CLEARSELECTIONS

SCI_CLEARSELECTIONS

清空所有选择。

SCI_SETSELECTION

SCI_SETSELECTION(position caret, position anchor)

将从锚点到插入符号的单个选择设置为唯一选择。

SCI_ADDSELECTION

SCI_ADDSELECTION(position caret, position anchor)

将一个新选择从锚点添加到插入符号,作为主选择,保留所有其他选择作为附加选择。由于始终至少有一个选择,要设置选择列表,应使用SCI_SETSELECTION添加第一个选择,然后使用SCI_ADDSELECTION添加后续选择

SCI_DROPSELECTIONN

SCI_DROPSELECTIONN(int selection)

如果有多个选择,请删除指示的选择。如果这是主选择,则将上一个选择作为主选择,如果是第一个选择,则最后一个选择成为主选择。如果只有一个选择,或者没有选择,则没有效果。

SCI_SETMAINSELECTION,SCI_GETMAINSELECTION

SCI_SETMAINSELECTION(int selection) SCI_GETMAINSELECTION → int

其中一个选项是主选项,用于确定自动可见的文本范围。主选项可以以不同的颜色显示,也可以使用不同样式的插入符号。只有已经存在的选择才能成为主选择。

SCI_SETSELECTIONNCARET,SCI_GETSELECTIONNCARET,SCI_SETSELECTIONNCARETVIRTUALSPACE,SCI_GETSELECTIONNCARETVIRTUALSPACE,SCI_SETSELECTIONNANCHOR,SCI_GETSELECTIONNANCHOR,SCI_SETSELECTIONNANCHORVIRTUALSPACE,SCI_GETSELECTIONNANCHORVIRTUALSPACE

SCI_SETSELECTIONNCARET(int selection, position caret) SCI_GETSELECTIONNCARET(int selection) → position SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, position space) SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection) → position SCI_SETSELECTIONNANCHOR(int selection, position anchor) SCI_GETSELECTIONNANCHOR(int selection) → position SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, position space) SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection) → position

设置或查询每个已存在选择的插入符号和定位符号的位置和虚拟空间量。

SCI_SETRECTANGULARSELECTIONCARET,SCI_GETRECTANGULARSELECTIONCARET,SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE,SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE,SCI_SETRECTANGULARSELECTIONANCHOR,SCI_GETRECTANGULARSELECTIONANCHOR,SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE,SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE

SCI_SETRECTANGULARSELECTIONCARET(position caret) SCI_GETRECTANGULARSELECTIONCARET → position SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(position space) SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE → position SCI_SETRECTANGULARSELECTIONANCHOR(position anchor) SCI_GETRECTANGULARSELECTIONANCHOR → position SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(position space) SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE → position

设置或查询矩形选择的插入符号和定位符号的虚拟空间的位置和数量。设置矩形选择后,将其分解为多个选择,每行一个。

SC_ELEMENT_SELECTION_ADDITIONAL_TEXT,SC_ELEMENT_SELECTION_ADDITIONAL_BACK,SCI_SETADDITIONALSELALPHASCI_GETADDITIONALSELALPHASCI_SETADDITIONALSELFORESCI_SETADDITIONALSELBACK

SC_ELEMENT_SELECTION_ADDITIONAL_TEXT : colouralpha SC_ELEMENT_SELECTION_ADDITIONAL_BACK : colouralpha SCI_SETADDITIONALSELALPHA(alpha alpha) SCI_GETADDITIONALSELALPHA → int SCI_SETADDITIONALSELFORE(colour fore) SCI_SETADDITIONALSELBACK(colour back)

修改其他选择的外观,使其与主选择区分开来,主选择的外观设置为SC_ELEMENT_SELECTION_TEXT, SC_ELEMENT_SELECTION_BACK, SCI_SETSELALPHA, SCI_GETSELALPHA, SCI_SETSELFORE, and SCI_SETSELBACK.。首选元素API,不建议使用以下消息。附加选择背景绘制在SCI_SETSELECTIONLAYER为所有选择背景定义的图层上。SCI_SETADDITIONALSELFORE和SCI_SETADDITIONALSELBACK调用在调用SCI_SETSELFORE和SCI_SETSELBACK并将useSetting值设置为true之前无效。对SCI_SETSELFORE和SCI_SETSELBACK的后续调用将覆盖SCI_SETADDITIONALSEL*函数设置的值。

SC_ELEMENT_CARET_ADDITIONAL,SCI_SETADDITIONALCARETFORE,SCI_GETADDITIONALCARETFORE,SCI_SETADDITIONALCARETSBLINK,SCI_GETADDITIONALCARETSBLINK

SC_ELEMENT_CARET_ADDITIONAL : colouralpha SCI_SETADDITIONALCARETFORE(colour fore) SCI_GETADDITIONALCARETFORE → colour SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink) SCI_GETADDITIONALCARETSBLINK → bool

修改附加插入符号的外观,使其与主插入符号区分开来,主插入符号的外观设置为SC_ELEMENT_CARET、SCI_SETCARETFORE、SCI_GETCARETFORE、SCI_SETCARETPERIOD和SCI_GETCARETPERIOD。

SCI_SETADDITIONALCARETSVISIBLE,SCI_GETADDITIONALCARETSVISIBLE

SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible) SCI_GETADDITIONALCARETSVISIBLE → bool

确定是否显示其他插入符号(默认为true)。

SCI_SWAPMAINANCHORCARET,SCI_ROTATESELECTION,SCI_MULTIPLESELECTADDNEXT,SCI_MULTIPLESELECTADDEACH

SCI_SWAPMAINANCHORCARET SCI_ROTATESELECTION SCI_MULTIPLESELECTADDNEXT SCI_MULTIPLESELECTADDEACH

可以将这些命令指定给关键点,以便能够操纵多个选择。SCI_SWAPMAINANCHORCARET将插入符号移动到主选择的另一端。SCI_ROTATESELECTION使下一个选择成为主选择。

SCI_MULTIPLESELECTADDNEXT将目标中主选择的下一次出现添加到选择集作为主选择。如果当前所选内容为空,则选择插入符号周围的单词。使用当前的搜索标志,以便应用程序可以选择区分大小写和单词搜索选项。

SCI_MULTIPLESELECTADDEACH与SCI_MULTIPLESELECTADDNEXT类似,但添加多个实例,而不是仅添加一个。

Scrolling and automatic scrolling

整体介绍

用于控制滚动条。

SCI_SETFIRSTVISIBLELINE,SCI_GETFIRSTVISIBLELINE

SCI_SETFIRSTVISIBLELINE(line displayLine) SCI_GETFIRSTVISIBLELINE → line

这些消息检索并设置Scintilla视图中第一条可见行的行号。文档中的第一行编号为0。执行该消息后滚动条自动移动使所设置行号为第一行,但是光标位置不变。

SCI_SETXOFFSET,SCI_GETXOFFSET

SCI_SETXOFFSET(int xOffset) SCI_GETXOFFSET → int

xOffset是文本视图开头的水平滚动位置(以像素为单位)。值0是视图左侧第一个文本列可见的正常位置。

SCI_LINESCROLL

SCI_LINESCROLL(position columns, line lines)

这将尝试按指定的列数和行数滚动显示。正行值增加屏幕顶部的行号(即,它们将文本向上移动到用户所关心的位置),负行值则相反。

列度量是默认样式中空间的宽度。正值会增加视图左边缘的列(即,它们会将文本向左移动,直到用户关注为止)。负值则相反。

SCI_SCROLLCARET

SCI_SCROLLCARET

如果当前位置(如果没有选择,则为插入符号)不可见,则根据当前插入符号策略滚动视图以使其可见。注:可见行在尾部显示。

SCI_SCROLLRANGE

SCI_SCROLLRANGE(position secondary, position primary)

将参数位置和它们之间的范围滚动到视图中,使主位置优先于次位置。该行为类似于SCI_SCROLLCARET,使用的是主位置而不是插入符号。然后努力确保辅助位置和范围也可见。这可用于使搜索匹配可见。

SCI_SETXCARETPOLICY,SCI_SETYCARETPOLICY

SCI_SETXCARETPOLICY(int caretPolicy, int caretSlop) SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)

这些设置了插入符号策略。caretPolicy的值包括CARET_SLOP, CARET_STRICT, CARET_JUMPS 和 CARET_EVEN。

描述
CARET_SLOPIf set, we can define a slop value: caretSlop. This value defines an unwanted zone (UZ) where the caret is... unwanted. This zone is defined as a number of pixels near the vertical margins, and as a number of lines near the horizontal margins. By keeping the caret away from the edges, it is seen within its context. This makes it likely that the identifier that the caret is on can be completely seen, and that the current line is seen with some of the lines following it, which are often dependent on that line.
CARET_STRICTIf set, the policy set by CARET_SLOP is enforced... strictly. The caret is centred on the display if caretSlop is not set, and cannot go in the UZ if caretSlop is set.
CARET_JUMPSIf set, the display is moved more energetically so the caret can move in the same direction longer before the policy is applied again. '3UZ' notation is used to indicate three time the size of the UZ as a distance to the margin.
CARET_EVENIf not set, instead of having symmetrical UZs, the left and bottom UZs are extended up to right and top UZs respectively. This way, we favour the displaying of useful information: the beginning of lines, where most code reside, and the lines after the caret, for example, the body of a function.
slopstrictjumpsevenCaret can go to the marginOn reaching limit (going out of visibility or going into the UZ) display is...
0000Yesmoved to put caret on top/on right
0001Yesmoved by one position
0010Yesmoved to put caret on top/on right
0011Yescentred on the caret
01-0Caret is always on top/on right of display-
01-1No, caret is always centred-
1000Yesmoved to put caret out of the asymmetrical UZ
1001Yesmoved to put caret out of the UZ
1010Yesmoved to put caret at 3UZ of the top or right margin
1011Yesmoved to put caret at 3UZ of the margin
11-0Caret is always at UZ of top/right margin-
1101No, kept out of UZmoved by one position
1110No, kept out of UZmoved to put caret at 3UZ of the margin

注:这两个消息没查到使用方法。

SCI_SETVISIBLEPOLICY

SCI_SETVISIBLEPOLICY(int visiblePolicy, int visibleSlop)

这决定了在调用SCI_ENSUREVISIBLEENFORCEPOLICY时如何确定垂直定位。visiblePolicy参数采用VisibleSlop和VisibleStrict标志。它在操作上类似于SCI_SETYCARETPOLICY(int caretPolicy,int caretSlop)。

SCI_SETHSCROLLBAR,SCI_GETHSCROLLBAR

SCI_SETHSCROLLBAR(bool visible) SCI_GETHSCROLLBAR → bool

水平滚动条仅在超过宽度需要时显示。如果不想看到水平滚动条,可以设值SCI_SETHSCROLLBAR(0)。使用SCI_SETHSCROLLBAR(1) 再次启用。SCI_GETHSCROLLBAR返回当前状态。默认状态是在需要时显示它。

SCI_SETVSCROLLBAR,SCI_GETVSCROLLBAR

SCI_SETVSCROLLBAR(bool visible) SCI_GETVSCROLLBAR → bool

垂直滚动条仅在超过宽度需要时显示。如果不想看到垂直滚动条,可以设值SCI_SETVSCROLLBAR(0)。使用SCI_SETVSCROLLBAR(1) 再次启用。SCI_GETVSCROLLBAR返回当前状态。默认状态是在需要时显示它。

SCI_SETSCROLLWIDTH,SCI_GETSCROLLWIDTH

SCI_SETSCROLLWIDTH(int pixelWidth) SCI_GETSCROLLWIDTH → int

为了提高性能,Scintilla 不会测量文档的显示宽度来确定水平滚动条的属性。而是使用假定的宽度。这些消息设置并获取Scantilla假定的文档宽度(以像素为单位)。默认值为2000。要确保当前可见行的宽度可以滚动,可以使用SCI_SETSCROLLWIDTHTRACKING

SCI_SETSCROLLWIDTHTRACKING,SCI_GETSCROLLWIDTHTRACKING

SCI_SETSCROLLWIDTHTRACKING(bool tracking) SCI_GETSCROLLWIDTHTRACKING → bool

如果启用了滚动宽度跟踪,则会调整滚动宽度,以确保当前显示的所有行都可以完全滚动。此模式从不将滚动宽度调整为更窄。

SCI_SETENDATLASTLINE,SCI_GETENDATLASTLINE

SCI_SETENDATLASTLINE(bool endAtLastLine) SCI_GETENDATLASTLINE → bool

SCI_SETENDATLASTLINE设置滚动范围,以便最大滚动位置的最后一行位于视图底部(默认)。将此设置为false允许在最后一行下方滚动一些空白,方便查看。

White space

整体介绍

用于控制空格以及制表符的显示。

SCI_SETVIEWWS,SCI_GETVIEWWS

SCI_SETVIEWWS(int viewWS) SCI_GETVIEWWS → int

可以使空白变得可见,这对于空白非常重要的语言(如Python)可能很有用。空格字符显示为小圆点,制表符显示为指向右侧的光箭头。还有一些方法可以控制行尾字符的显示。这两条消息设置并获取空白显示模式。viewWS参数可以是以下参数之一:

类型描述
SCWS_INVISIBLE0默认设置,不显示空白符
SCWS_VISIBLEALWAYS1所有空格显示为圆点,制表符显示为直线箭头
SCWS_VISIBLEAFTERINDENT2除了缩进的空白,其他空格显示为圆点,制表符显示为直线箭头
SCWS_VISIBLEONLYININDENT3缩进的空白显示为圆点,制表符显示为直线箭头

SC_ELEMENT_WHITE_SPACE,SC_ELEMENT_WHITE_SPACE_BACK

SC_ELEMENT_WHITE_SPACE : colouralpha SC_ELEMENT_WHITE_SPACE_BACK : colouralpha

默认情况下,可见空白的颜色由正在使用的lexer决定。所有可见空白的前景色和/或背景色可以全局设置,使用SC_ELEMENT_WHITE_SPACE 和SC_ELEMENT_WHITE_SPACE_BACK 覆盖lexer的颜色。

SCI_SETWHITESPACESIZE,SCI_GETWHITESPACESIZE

SCI_SETWHITESPACESIZE(int size) SCI_GETWHITESPACESIZE → int

默认情况下,可见空白的颜色由正在使用的lexer决定。所有可见空白的前景色和/或背景色可以全局设置,使用SC_ELEMENT_WHITE_SPACE 和SC_ELEMENT_WHITE_SPACE_BACK 覆盖lexer的颜色。

SCI_SETWHITESPACESIZE设置用于标记空格字符的点的大小。SCI_GETWHITESPACESIZE消息检索当前大小。值0有效,使点不可见。

SCI_SETTABDRAWMODE,SCI_GETTABDRAWMODE

SCI_SETTABDRAWMODE(int tabDrawMode) SCI_GETTABDRAWMODE → int

这两条消息获取并设置当空白可见时如何绘制制表符。tabDrawMode参数可以是以下参数之一:

类型描述
SCTD_LONGARROW0箭头拉伸到tabstop的默认模式。
SCTD_STRIKEOUT1一条水平线,一直延伸到制表符停止。

SCI_SETEXTRAASCENT,SCI_GETEXTRAASCENT,SCI_SETEXTRADESCENT,SCI_GETEXTRADESCENT

SCI_SETEXTRAASCENT(int extraAscent) SCI_GETEXTRAASCENT → int SCI_SETEXTRADESCENT(int extraDescent) SCI_GETEXTRADESCENT → int

控制行距,SCI_SETEXTRAASCENT为行距上部,SCI_SETEXTRADESCENT为行距下部。

Cursor

整体介绍

用于控制光标状态。

SCI_SETCURSOR,SCI_GETCURSOR

SCI_SETCURSOR(int cursorType) SCI_GETCURSOR → int

执行慢速操作时,可以将更改为等待光标。您可以使用SCI_SETCURSOR设置光标类型。cursorType参数可以是:

类型描述
SC_CURSORNORMAL-1常规光标
SC_CURSORWAIT4当鼠标移入编辑器时,光标显示为等待光标

游标值1到7定义了游标,但只有SC_CURSORWAIT可用。cursorType的其他值会导致显示指针。SCI_GETCURSOR消息返回上次设置的光标类型,如果未设置光标类型,则返回SC_CURSORNORMAL(-1)。

Mouse capture

整体介绍

用于控制光标状态。

SCI_SETCURSOR,SCI_GETCURSOR

SCI_SETCURSOR(int cursorType) SCI_GETCURSOR → int

执行慢速操作时,可以将更改为等待光标。您可以使用SCI_SETCURSOR设置光标类型。cursorType参数可以是:

类型描述
SC_CURSORNORMAL-1常规光标
SC_CURSORWAIT4当鼠标移入编辑器时,光标显示为等待光标

游标值1到7定义了游标,但只有SC_CURSORWAIT可用。cursorType的其他值会导致显示指针。SCI_GETCURSOR消息返回上次设置的光标类型,如果未设置光标类型,则返回SC_CURSORNORMAL(-1)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastColoredTextBox 是一个用于 WinForm 开发的开源控件,它提供了一个高性能的文本编辑框,适用于需要在应用程序中嵌入文本编辑功能的场景。FastColoredTextBox 支持语法高亮、文本选中、复制、粘贴和撤销操作等常用编辑功能,并提供了丰富的 API 用于控制文本显示和编辑行为。 Scintilla 是一个跨平台的文本编辑组件,它由 C++ 编写,并以静态库的形式发布。Scintilla 提供了丰富的功能和定制选项,包括语法高亮、自动补全、代码折叠、括号匹配等。Scintilla 还支持多个语言的编辑环境,如 C、C++、C#、Python 等,并且可以通过插件进行扩展。 FastColoredTextBox 和 Scintilla 在功能和用途上类似,都是用于文本编辑的控件。它们都支持语法高亮,但 FastColoredTextBox 更适合 WinForm 应用程序的开发,而 Scintilla 则更适合跨平台的开发,因为它的底层代码是用 C++ 编写的。 FastColoredTextBox 和 Scintilla 在用法上也有一些差异。FastColoredTextBox 使用起来相对简单,只需要把控件拖放到窗体上即可使用,并且提供了一些常用的属性和方法用于控制编辑行为。而 Scintilla 的使用稍微复杂一些,需要编写一些代码来配置和控制编辑器的行为,但它的定制性更高,可以根据需求进行深度定制。 总之,FastColoredTextBox 和 Scintilla 都是用于文本编辑的控件,具有丰富的功能和定制选项,可根据实际需求选择使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值