Scintilla教程(5): 选中

Selection and information

整体介绍

Scintilla保持一个在两个点(锚定点和当前位置)之间延伸的选择。如果定位点和当前位置相同,则没有选定的文本。文档中的位置范围从0(第一个字符之前)到文档大小(最后一个字符之后)。如果使用消息,则可以设置CRLF对中间的一个位置,或者在2字节字符的中间。但是,键盘命令不会将插入符号移动到此类位置。

SCI_GETTEXTLENGTH ,SCI_GETLENGTH

SCI_GETTEXTLENGTH → position SCI_GETLENGTH → position

这两条消息都返回文档的长度(字节)。

SCI_GETLINECOUNT

SCI_GETLINECOUNT → line

这将返回文档中的行数。空文档包含一行。仅包含行尾序列的文档有两行。

SCI_LINESONSCREEN

SCI_LINESONSCREEN → line

这将返回屏幕上可见的完整行数。对于恒定的行高度,这是可用的垂直空间除以线间距。除非将窗口的大小调整为整条线,否则视图底部可能有一条可见的局部线。

SCI_GETMODIFY

SCI_GETMODIFY → bool

如果文档已修改,则返回非零;如果未修改,则返回0。文档的修改状态由相对于保存点的撤消位置确定。保存点由SCI_SETSAVEPOINT设置,通常在将数据保存到文件时设置。

如果您需要在文档被修改时得到通知,Scintilla将通知容器它已进入或离开保存点,并显示SCN_SAVEPOINTREACHEDSCN_SAVEPOINTLEFT通知消息。

SCI_SETSEL

SCI_SETSEL(position anchor, position caret)

该消息设置锚点和当前位置。如果插入符号为负数,则表示选中至文档结尾。如果锚点为负值,则表示删除任何选择(即将锚点设置为与插入符号相同的位置)。执行此操作后,插入符号将滚动到视图中。

SCI_GOTOPOS

SCI_GOTOPOS(position caret)

该消息将删除所有选择,将插入符号设置为插入符号,并在必要时滚动视图以使插入符号可见。它相当于SCI_SETSEL(caret, caret)。锚定位置设置为与当前位置相同。

SCI_GOTOLINE

SCI_GOTOLINE(line line)

该消息将删除所有选择,并在行号行的开头设置插入符号,并滚动视图(如果需要)使其可见。锚点位置设置为与当前位置相同。如果行在文档中的行之外(第一行为0),则行集为第一行或最后一行。

SCI_SETCURRENTPOS

SCI_SETCURRENTPOS(position caret)

该消息将设置当前位置,并在定位点和当前位置之间创建选择。插入符号不会滚动到视图中。

SCI_GETCURRENTPOS

SCI_GETCURRENTPOS → position

该消息将返回当前位置。

SCI_SETANCHOR

SCI_SETANCHOR(position anchor)

这将设置锚点位置,并在锚点位置和当前位置之间创建选择。插入符号不会滚动到视图中。

SCI_GETANCHOR

SCI_GETANCHOR → position

该消息将返回当前锚点位置。

SCI_SETSELECTIONSTART,SCI_SETSELECTIONEND

SCI_SETSELECTIONSTART(position anchor) SCI_SETSELECTIONEND(position caret)

这些选项基于锚点位置小于当前位置的前置条件设置选择。它们不会使插入符号可见。该表显示了锚的位置和使用这些消息后的当前位置。

New value foranchorcaret
SCI_SETSELECTIONSTARTanchorMax(``anchor``, current)
SCI_SETSELECTIONENDMin(anchor, ``caret``)caret

SCI_GETSELECTIONSTART,SCI_GETSELECTIONEND

SCI_GETSELECTIONSTART → position SCI_GETSELECTIONEND → position

这两个消息返回选择的开始和结束,而不考虑哪一端是当前位置,哪一端是锚点。SCI_GETSELECTIONSTART返回当前位置或定位点位置中较小的一个。SCI_GETSELECTIONEND返回两个值中的较大值。

SCI_SETEMPTYSELECTION

SCI_SETEMPTYSELECTION(position caret)

这将删除所有选择并将插入符号设置为插入符号。插入符号不会滚动到视图中。

SCI_SELECTALL

SCI_SELECTALL

这将选择文档中的所有文本。当前位置不会滚动到视图中。

SCI_LINEFROMPOSITION

SCI_LINEFROMPOSITION(position pos) → line

此消息返回文档中包含位置pos的行。如果pos<=0,则返回值为0。如果pos超出文档末尾,则返回值是最后一行。

SCI_POSITIONFROMLINE

SCI_POSITIONFROMLINE(line line) → position

此消息返回文档中包含位置pos的行。如果pos<=0,则返回值为0。如果pos超出文档末尾,则返回值是最后一行。

SCI_POSITIONFROMLINE

SCI_POSITIONFROMLINE(line line) → position

这将返回与行首相对应的文档位置。如果行为负数,则返回保留选择开始的行的位置。如果行大于文档中的行,则返回值为-1。如果行数等于文档中的行数(即,超过最后一行1行),则返回值为文档的结尾。

SCI_GETLINEENDPOSITION

SCI_GETLINEENDPOSITION(line line) → position

这将返回任何行尾字符之前的行尾位置。如果行是文档中的最后一行(没有任何行尾字符)或更大,则结果是文档的大小。如果行为负数,则结果未定义。

SCI_LINELENGTH

SCI_LINELENGTH(line line) → position

这将返回行的长度,包括任何行尾字符。如果行为负数或超出文档中的最后一行,则结果为0。如果希望行长不包含任何行尾字符,请使用SCI_GETLINEENDPOSITION(line)-SCI_POSITIONFROMLINE(line)。

SCI_GETSELTEXT

SCI_GETSELTEXT(<unused>, char *text NUL-terminated) → position

这会将当前选定的文本和终止的0字节复制到文本缓冲区。缓冲区大小应通过使用文本参数SCI_GETSELTEXT(0,0)的空指针进行调用来确定。这允许矩形和不连续选择以及简单选择。有关如何复制多个和矩形选择以及虚拟空间的信息,请参见多个选择。

SCI_GETCURLINE

SCI_GETCURLINE(position length, char *text NUL-terminated) → position

这将检索包含插入符号的行的文本,并返回插入符号行内的位置。传入char*文本,指向一个足够大的缓冲区,以容纳要检索的文本和一个终止的0字符。将长度设置为缓冲区的长度,该长度必须至少为1才能容纳终止的0字符。如果文本参数为0,则返回应分配用于存储整个当前行的长度。

SCI_SELECTIONISRECTANGLE

SCI_SELECTIONISRECTANGLE → bool

如果当前选择处于矩形模式,则返回1,否则返回0。

SCI_SETSELECTIONMODE,SCI_GETSELECTIONMODE

SCI_SETSELECTIONMODE(int selectionMode) SCI_GETSELECTIONMODE → int

这两个消息设置并获得选择模式,可以是流(SC_SEL_STREAM=0)或矩形(SC_SEL_RECTANGLE=1),也可以是行(SC_SEL_LINES=2)或细矩形(SC_SEL_THIN=3)。在这些模式下设置时,常规插入符号移动将扩展或减少选择,直到使用相同值的调用或SCI_CANCEL取消模式。get函数返回当前模式,即使选择是通过鼠标或常规扩展移动进行的。SC_SEL_THIN是输入矩形选择后的模式,可确保未选择任何字符。

目前没验证到该消息的具体用法。

SCI_GETMOVEEXTENDSSELECTION

SCI_GETMOVEEXTENDSSELECTION → bool

如果常规插入符号移动将扩展或减少选择,则返回1,否则返回0。SCI_SETSELECTIONMODE在打开和关闭之间切换此设置。

SCI_GETLINESELSTARTPOSITION,SCI_GETLINESELENDPOSITION

SCI_GETLINESELSTARTPOSITION(line line) → position SCI_GETLINESELENDPOSITION(line line) → position

在给定行检索选择的开始和结束位置,如果此行没有选择,则返回INVALID_POSITION。

SCI_MOVECARETINSIDEVIEW

SCI_MOVECARETINSIDEVIEW

如果插入符号不在视图的顶部或底部,则会将其移动到其当前位置可见的最近直线上。任何选择都将丢失。

SCI_POSITIONBEFORE,SCI_POSITIONAFTER

SCI_POSITIONBEFORE(position pos) → position SCI_POSITIONAFTER(position pos) → position

这两个消息返回所设置位置的字符前一个字符位置与后一个字符位置。返回的最小位置为0,最大位置为文档中的最后一个位置。如果使用多字节字符内的位置调用,将返回该字符的开始/结束位置。

SCI_TEXTWIDTH

SCI_TEXTWIDTH(int style, const char *text) → int

这将返回以给定样式绘制的字符串的像素宽度,该宽度可用于确定行号边距的宽度,以显示给定数量的数字。

SCI_TEXTHEIGHT

SCI_TEXTHEIGHT(line line) → int

这将返回特定行的高度(以像素为单位)。目前所有线条的高度都相同。

SCI_GETCOLUMN

SCI_GETCOLUMN(position pos) → position

此消息返回文档中考虑了选项卡宽度的位置pos的列号。这将返回pos前一行上最后一个制表符的列号,加上最后一个制表符和pos之间的字符数。如果该行上没有制表符,则返回值为该行上该位置的字符数。在这两种情况下,双字节字符都算作单个字符。这可能只对单间距字体有用。

SCI_FINDCOLUMN

SCI_FINDCOLUMN(line line, position column) → position

此消息返回一行中列的位置,并考虑制表符的宽度。它将多字节字符视为一列。列编号,与行一样,从0开始。

SCI_POSITIONFROMPOINT,SCI_POSITIONFROMPOINTCLOSE

SCI_POSITIONFROMPOINT(int x, int y) → position SCI_POSITIONFROMPOINTCLOSE(int x, int y) → position

SCI_POSITIONFROMPOINT查找距离某个点最近的字符位置,SCI_POSITIONFROMPOINTCLOSE类似,但如果该点在窗口外或不靠近任何字符,则返回-1。

SCI_CHARPOSITIONFROMPOINT,SCI_CHARPOSITIONFROMPOINTCLOSE

SCI_CHARPOSITIONFROMPOINT(int x, int y) → position SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int y) → position

SCI_CHARPOSITIONFROMPOINT查找距离某个点最近的字符,SCI_CHARPOSITIONFROMPOINTCLOSE类似,但如果该点在窗口外或不靠近任何字符,则返回-1。这与前面的方法类似,但查找字符而不是字符间位置。

SCI_POINTXFROMPOSITION,SCI_POINTYFROMPOSITION

SCI_POINTXFROMPOSITION(<unused>, position pos) → int SCI_POINTYFROMPOSITION(<unused>, position pos) → int

这些消息返回文档中位置pos处文本的x和y显示像素位置。

SCI_HIDESELECTION

SCI_HIDESELECTION(bool hide)

正常状态是通过按照SCI_SETSELFORE和SCI_SETSELBACK的设置绘制选择,使其可见。但是,如果隐藏所选内容,则会将其绘制为普通文本。

SCI_CHOOSECARETX

SCI_CHOOSECARETX

Scintilla记忆用户明确水平移动到的最后一个位置的x值,然后在垂直移动时使用该值,例如使用上下键。此消息将插入符号的当前x位置设置为记忆值。

SCI_MOVESELECTEDLINESUP

SCI_MOVESELECTEDLINESUP

将选定的行上移一行,在选择后将行上移。所选内容将自动扩展到所选内容第一行的开头和最后一行的结尾。如果未选择任何内容,将选择光标当前所在的行。

SCI_MOVESELECTEDLINESDOWN

SCI_MOVESELECTEDLINESDOWN

将所选行下移一行,在选择之前下移一行。所选内容将自动扩展到所选内容第一行的开头和最后一行的结尾。如果未选择任何内容,将选择光标当前所在的行。

SCI_SETMOUSESELECTIONRECTANGULARSWITCH,SCI_GETMOUSESELECTIONRECTANGULARSWITCH

SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool mouseSelectionRectangularSwitch) SCI_GETMOUSESELECTIONRECTANGULARSWITCH → bool

启用或禁用在使用鼠标进行选择时切换到矩形选择模式的功能。启用此选项后,通过按相应的修改器键,可以将流模式中的鼠标选择切换到矩形模式。然后,即使再次释放修改器关键点,它们也会保持矩形模式。关闭此选项后,鼠标选择将始终保持在启动选择的模式。默认情况下,它处于关闭状态。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值