分享

ELT106 Firemonkey下文本核心

 quasiceo 2017-01-15
标题:
【ELT106】Firemonkey下文本核心 浏览:425
加入我的收藏
楼主: 终于成功地做出了一个简单的插图功能,再加上对响应选取操作的算法改进,和对整个结构的优化,终于做出了一个称得上具有实用性的文本核心了。

目前插图功能还不完善,只能插入在行后,而且一行只能够插入一张图片,但是可以设置插图尺寸和对齐方式。增加了对西文单词的识别用以配合两端对齐和花体字母。

这里是源代码和演示程序的位置
由于这一次算是具有真正实用性的了(除了还不支持滚动条,其他的都还算好),所以玄虚决定顺便发布一份简要的接口使用说明。保存和读取的功能会等到结构确定之后加入其中,有兴趣的可以自己试下,也不算麻烦。

需要使用的类只是TElPassage类。下面是可用的属性和方法。


属性部分:
SelImage:Boolean,是否选中图片,只读属性。
Left:Single,类在窗口上的打印坐标。
Top:Single,坐标。
Width:Single,类的限制宽度。
Height:Single,只读属性,类的高度,由画图过程确定。
ParaIndex:Integer,当前所在的段落索引值。不推荐更改,但是可以这么做。
SelStruct:TsctUI,交互所用的格式信息。可以直接更改文字属性和段落属性还有插图属性,暂时还不支持同时修改多段的段落属性。
SelStart:Integer,选取开始位置,从0开始,每一段段末到下一段段首数值加一。
SelLength:Integer,选取长度,用来确定框选。
TextLength:Integer,总的字符数,这里没有加入对西文的识别。
Paras[Index:Integer]:string,每一段的纯文本。


方法部分
constructorCreate(Left, Top, Width: Single; ACanvas: TCanvas; ASelRec: TRectangle);
创建,需要提供用来绘制的Canvas,和用来作为光标的Rectangle。暂时还没有找到更好实现光标的方法。

destructorDestroy; override;
删除,没什么好说的。

procedureDrawToMap(Index: Integer);
将段落绘制到图像上,并获取必要信息。值得注意的是,如果一个段落从来没有被绘制过,或者修改了但是没有绘制,是很容易出问题的。但是一般外部操作不需要考虑这个问题,常用的外部操作都会自动附加这个操作。

procedure DrawPassage;
直接绘制全段落图像,这里不会修改段落的内容,只是绘制而已,如果没有执行绘制到图像这一步骤,这里不会得到刷新。

procedureDrawFromPara(Index: Integer);
绘制当前段落及之后的图像,这里也不会提供刷新。

procedureDrawParaWithoutChange(IFrom: Integer; ITo: Integer = -1);
直接绘制该段落图像,如果不填入ITo,则默认单段落,不提供刷新。

procedureInsertChar(AChar: Char);
在当前位置插入一个字符,响应输入的操作,自动删除已选取内容。

procedureInsertImage(FileName: string; Width: Single);
插图,需要设置宽度,如果设置为0则为图像宽度。所有的宽度都不会超过图像本身的宽度或限制宽度。

procedureDeleteChar;
当前位置删除一个字符

procedureDividePara;
在当前位置分段分段是为了响应回车,与插入字符并不相同。

procedureSetSelection(const P1, P2: Integer);
由两处选取位置获得选取开始及长度,只需要输入两处对应的选取开始位置即可,不需要考虑大小顺序。

functionSelect(X, Y: Single; Moving: Boolean = False): Integer;
由绝对坐标获取选取位置,后一个参数是在移动的时候将忽略选取图片的行为,只考虑框选。
此帖子包含附件:
PNG 图像
大小:152.9K
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多