DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: alancassadaysf4
今日帖子: 11
在线用户: 2
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-12 16:58:11
标题:
【ELT106】Firemonkey下文本核心 浏览:877
加入我的收藏
楼主: 终于成功地做出了一个简单的插图功能,再加上对响应选取操作的算法改进,和对整个结构的优化,终于做出了一个称得上具有实用性的文本核心了。

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

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

需要使用的类只是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.
作者:
男 arhaha (lin) ▲▲▲▲▲ -
盒子活跃会员
2017-1-12 17:28:33
1楼: 强!
----------------------------------------------
-
作者:
男 starrysea (星海) ▲▲▲△△ -
注册会员
2017-1-12 20:26:10
2楼: 支持
----------------------------------------------
陪着Delphi走走, 接外包项目,可现场调试,QQ-53767940
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-12 21:05:56
3楼: 源代码和演示程序需要点击那一行:这里是源代码和演示程序的位置中的"源代码和演示程序"。
哈哈哈
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 crystalmoon (黑夜杀手) ▲▲▲▲▲ -
盒子活跃会员
2017-1-12 21:33:18
4楼: 支持原创
----------------------------------------------
-
作者:
男 mprjcf (mprjcf) ▲▲▲▲▲ -
普通会员
2017-1-13 9:35:39
5楼: 支持,强
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
男 mprjcf (mprjcf) ▲▲▲▲▲ -
普通会员
2017-1-13 10:45:31
6楼: 楼主,还建议你增加一个导出HTML格式的功能,并能在浏览器上显示的效果相似。如果能有这个功能,那牛逼了,我愿意付费购买。
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2017-1-13 10:51:24
7楼: 说实在的,RichView 公司 太懒,否则,他们开发一个 FMX 版本,马上火。
----------------------------------------------
作者:
男 hardnut (麦轲数据管家) ▲▲▲▲▲ -
普通会员
2017-1-13 12:18:36
8楼: 我估计他们是有评估的,或者已经在开发了,但这种通用控件,市场都是一两家垄断的,没有强大的实力,真是出不了利润
----------------------------------------------
麦轲数据管家--您最贴心的个人数据/知识管理工具
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-14 7:15:42
9楼: 谢谢楼上的建议,玄虚尽力吧
[滑稽]
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 lordaeron (Terry) ▲▲▲▲▲ -
注册会员
2017-1-14 8:40:58
10楼: 插圖可以很簡單, 也可以像WORD 哪樣, 複雜的.
圖可以插入後, 在它的左/右邊輸入文字.
而輸出HTML 比較簡單, 你將你的TAG 對應到HTML TAG 即可.
----------------------------------------------
-
作者:
男 lordaeron (Terry) ▲▲▲▲▲ -
注册会员
2017-1-14 8:47:32
11楼: 圖片還要有"背景圖片"的功能
----------------------------------------------
-
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-14 18:31:54
12楼: 回复十楼
如果允许插图侧边输入文字,那么算法势必变得很复杂,背景图片可以考虑,但是背景图片恐怕会和底色冲突。
你说的tag我就不是很懂了,难道指格式?
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 lordaeron (Terry) ▲▲▲▲▲ -
注册会员
2017-1-14 21:49:39
13楼: 圖側邊輸入文字這事情.
我沒看你是如何寫的, 但在我的經驗上, 只是RENDER 的問題而已.
如果你明白HTML 是如何SIMULATE這事情, 其實應該是不錯的方向.
參考看看
----------------------------------------------
-
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-14 23:38:41
14楼: 回复楼上。

我是想如果允许图片侧边输入文字,没有理由不允许同一行输入多幅插图,或者不同行输入的插图存在交叠。那么对于空隙的判定就会变得非常麻烦。虽然我设计好了算法,但是还没有想过把这个算法变成代码。
如果规定在水平方向上不允许存在两幅图片,那么或许好一些,只需要进行一次空隙判定。我只是把相应的文字位置延后,我称之为避让算法。

或许我再研究一下避让算法的避让规则,能够想出更好的。

另外,阁下觉得其余部分如何?
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 lordaeron (Terry) ▲▲▲▲▲ -
注册会员
2017-1-15 8:26:59
15楼: 回原PO, 停停停.
你只要能想想,做到HTML 做到的就很夠了.
基本上HTML 要能做到, 就是靠TABLE 這個TAG, 加上ROWSPAN.
致於你講的問題, 你就試著用HTML 生成一次就明白了.
----------------------------------------------
-
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-15 8:32:32
16楼: 可能是我悟性不够,不是很懂你的意思;也可能是我表达不好,说不清楚我的意思。

我刚才研究了一下css html,转换势必造成一定的格式丢失,不过理论上可以实现。比如说网页好像不支持首行的最左端比后续文字左端多。
就像附件所示。

如果是网页的话,确实大部分情况下当行不会有更多的图片,除了可以看成特殊“文字”的表情以外。

我会好好想想的。谢谢了。
此帖子包含附件:
PNG 图像
大小:76.7K
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-15 8:41:54
17楼: 回复十五楼,可能是由于数学感觉的缘故,总是想太多了。如果按照阁下所说的表格构造,的确很容易解决了图侧边插入文字的问题。

我们的出发点不一样,我想到的是即便是按照表格的构造,如果一行被多幅图片分割成若干的部分,那么在段落属性为两端对齐的时候,确定字符间距就是一件很麻烦的事情了吧?因为必须要对每一部分进行计算。

HTML的话,的确缺少了一些文字格式,如果忽略掉这些,还是比较容易实现的。
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2017-1-15 13:37:07
18楼: 这个效果怎样?
此帖子包含附件:
PNG 图像
大小:389.5K
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 biznow (biznow) ▲▲▲▲▲ -
盒子活跃会员
2017-1-15 23:30:34
19楼: 有点意思,支持一下
----------------------------------------------
-
作者:
男 mprjcf (mprjcf) ▲▲▲▲▲ -
普通会员
2017-1-16 10:06:54
20楼: 支持,看好你
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
男 lordaeron (Terry) ▲▲▲▲▲ -
注册会员
2017-1-17 15:17:20
21楼: 加油,真的沒什麼算法,就是text and then render。
----------------------------------------------
-
作者:
男 siaosa (siaosa) ▲▲▲▲▲ -
盒子活跃会员
2017-2-9 10:33:25
22楼: 支持做成导出/导入HTML的功能, 以后编辑HTML做WEB界面就方便了.
----------------------------------------------
-
作者:
男 ying32 (唯有此生) ▲▲▲△△ -
注册会员
2017-2-9 10:49:12
23楼: 楼上的这个需求,你直接用嵌入式的浏览器组件不就好了,非想要折腾这种干嘛
----------------------------------------------
一个热爱delphi的人,DDuilib有需要么?可以看看。 --我的博客--
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行154.2969毫秒 RSS