导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2017/1/12 16:58:11
标题:
【ELT106】Firemonkey下文本核心
浏览:2168
加入我的收藏
楼主:
终于成功地做出了一个简单的插图功能,再加上对响应选取操作的算法改进,和对整个结构的优化,终于做出了一个称得上具有实用性的文本核心了。 目前插图功能还不完善,只能插入在行后,而且一行只能够插入一张图片,但是可以设置插图尺寸和对齐方式。增加了对西文单词的识别用以配合两端对齐和花体字母。 这里是源代码和演示程序 的位置 由于这一次算是具有真正实用性的了(除了还不支持滚动条,其他的都还算好),所以玄虚决定顺便发布一份简要的接口使用说明。保存和读取的功能会等到结构确定之后加入其中,有兴趣的可以自己试下,也不算麻烦。 需要使用的类只是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; 由绝对坐标获取选取位置,后一个参数是在移动的时候将忽略选取图片的行为,只考虑框选。
此帖子包含附件: 大小: 152.9K
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/12 17:28:33
1楼:
强!
----------------------------------------------
-
作者:
2017/1/12 21:05:56
3楼:
源代码和演示程序需要点击那一行:这里是源代码和演示程序的位置中的"源代码和演示程序"。 哈哈哈
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/12 21:33:18
4楼:
支持原创
----------------------------------------------
-
作者:
2017/1/13 9:35:39
5楼:
支持,强
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
2017/1/13 10:45:31
6楼:
楼主,还建议你增加一个导出HTML格式的功能,并能在浏览器上显示的效果相似。如果能有这个功能,那牛逼了,我愿意付费购买。
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
2017/1/13 10:51:24
7楼:
说实在的,RichView 公司 太懒,否则,他们开发一个 FMX 版本,马上火。
----------------------------------------------
(C)(P)Flying Wang
作者:
2017/1/14 7:15:42
9楼:
谢谢楼上的建议,玄虚尽力吧 [滑稽]
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/14 8:40:58
10楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
2017/1/14 8:47:32
11楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
2017/1/14 18:31:54
12楼:
回复十楼 如果允许插图侧边输入文字,那么算法势必变得很复杂,背景图片可以考虑,但是背景图片恐怕会和底色冲突。 你说的tag我就不是很懂了,难道指格式?
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/14 21:49:39
13楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
2017/1/14 23:38:41
14楼:
回复楼上。 我是想如果允许图片侧边输入文字,没有理由不允许同一行输入多幅插图,或者不同行输入的插图存在交叠。那么对于空隙的判定就会变得非常麻烦。虽然我设计好了算法,但是还没有想过把这个算法变成代码。 如果规定在水平方向上不允许存在两幅图片,那么或许好一些,只需要进行一次空隙判定。我只是把相应的文字位置延后,我称之为避让算法。 或许我再研究一下避让算法的避让规则,能够想出更好的。 另外,阁下觉得其余部分如何?
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/15 8:26:59
15楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
2017/1/15 8:32:32
16楼:
可能是我悟性不够,不是很懂你的意思;也可能是我表达不好,说不清楚我的意思。 我刚才研究了一下css html,转换势必造成一定的格式丢失,不过理论上可以实现。比如说网页好像不支持首行的最左端比后续文字左端多。 就像附件所示。 如果是网页的话,确实大部分情况下当行不会有更多的图片,除了可以看成特殊“文字”的表情以外。 我会好好想想的。谢谢了。
此帖子包含附件: 大小: 76.7K
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/15 8:41:54
17楼:
回复十五楼,可能是由于数学感觉的缘故,总是想太多了。如果按照阁下所说的表格构造,的确很容易解决了图侧边插入文字的问题。 我们的出发点不一样,我想到的是即便是按照表格的构造,如果一行被多幅图片分割成若干的部分,那么在段落属性为两端对齐的时候,确定字符间距就是一件很麻烦的事情了吧?因为必须要对每一部分进行计算。 HTML的话,的确缺少了一些文字格式,如果忽略掉这些,还是比较容易实现的。
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
2017/1/15 13:37:07
18楼:
这个效果怎样?
此帖子包含附件: 大小: 389.5K
----------------------------------------------
--O, ye Magnificient Deity's Miracle! --I'm yet Reniastyc de El Magnifico.
作者:
biznow (biznow)
★☆☆☆☆
-
盒子活跃会员
2017/1/15 23:30:34
19楼:
有点意思,支持一下
----------------------------------------------
-
作者:
2017/1/16 10:06:54
20楼:
支持,看好你
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
2017/1/17 15:17:20
21楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
siaosa (siaosa)
★☆☆☆☆
-
盒子活跃会员
2017/2/9 10:33:25
22楼:
支持做成导出/导入HTML的功能, 以后编辑HTML做WEB界面就方便了.
----------------------------------------------
-
作者:
2017/2/9 10:49:12
23楼:
楼上的这个需求,你直接用嵌入式的浏览器组件不就好了,非想要折腾这种干嘛
----------------------------------------------
一个热爱delphi的人,Golang GUI库 。 --我的博客--