ELT106——Firemonkey下文本核心
delphi吧
全部回复
仅看楼主
level 11
天道玄虚
楼主
终于成功地做出了一个简单的插图功能,再加上对响应选取操作的算法改进,和对整个结构的优化,终于做出了一个称得上具有实用性的文本核心了。
经典的滑稽。
目前插图功能还不完善,只能插入在行后,而且一行只能够插入一张图片,但是可以设置插图尺寸和对齐方式。增加了对西文单词的识别用以配合两端对齐和花体字母。
2017年01月12日 08点01分
1
level 11
天道玄虚
楼主
这里是源代码和演示程序的位置
[无效] http://pan.baidu.com/s/1csw0EE
。
由于这一次算是具有真正实用性的了(除了还不支持滚动条,其他的都还算好),所以玄虚决定顺便发布一份简要的接口使用说明。保存和读取的功能会等到结构确定之后加入其中,有兴趣的可以自己试下,也不算麻烦。
2017年01月12日 08点01分
2
天道玄虚
源代码文件位于ELT106.rar中,演示程序为ELT106Demo.exe。
2017年01月12日 08点01分
level 11
天道玄虚
楼主
需要使用的类只是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;
由绝对坐标获取选取位置,后一个参数是在移动的时候将忽略选取图片的行为,只考虑框选。
2017年01月12日 08点01分
3
吧务
level 14
BambooCaep
恭喜
2017年01月12日 11点01分
4
天道玄虚
谢谢
2017年01月12日 12点01分
1