如何在 Lua 中实现重做
2012-6-5 19:3:50
收藏:0
阅读:242
评论:1
我刚接触LUA语言,正在开始我的第一个项目。然而,我现在面临的最大挑战是如何实现或制作撤销和重做。
然而,为了明确问题,该项目是自定义文本编辑器,因此在此需要进行撤销/重做以编辑任何输入文本。我已经成功处理了一些问题,如剪切、复制、清除、查找单词、更改字体、文本颜色、插入表格和图像等,所有这些都使用LUA语言处理。显然,有几个自定义文本编辑器,我相信为许多人提供服务的努力将为未来的进步或改进铺平道路。但撤销/重做操作正在让我感到痛苦,这甚至是现有大多数自定义文本编辑器缺乏的功能。
我在几个论坛上搜索,它们似乎都给出了使用关联类型的表来加载信息并从中检索的提示。令人难以置信的是,我认为一些这些网站只是在分享他们从其他网站获得的知识而没有任何技术观点或其他。这是因为,我看到的大多数建议在所有方面看起来都是相同的。对于我访问的大约十个站点,没有一个用户尝试发布示例,但我看到的都是同样的抱怨,即大多数LUA用户的问题。毫无疑问,这对于这个论坛中一些受尊敬的大师来说可能会很容易。
我似乎没有得到建议的真实图片。 有人能给我一个例子吗?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
撤销/重做是命令模式的完美应用。
首先,你需要单独编写一些文本操作功能,只考虑 "做",而不必考虑 "撤销" 或 "重做"。 这本身就是一项很大的工作。
然后你会有一堆用于操作文档的函数,如
insertText(),setFont(),insertJpgImage()等。技巧在于现在你需要将每个这些函数包装在所谓的命令 对象中。每个命令类必须有一个do()方法和一个undo()方法。现在,由于所有的文本操作都由命令对象表示,所以通过以下方式执行每个操作(例如加粗一些文本):
boldCommand = setTextPropertyCommand:new(document, selectedArea, textProperties.bold) boldCommand:do() --实际修改文本 table.insert(commandUndoStack, boldCommand) --保存命令以备可能的撤销当您要撤消某些文本加粗时,可以调用:
command = table.remove(commandUndoStack) command:undo()注意,如果您正在使用 Lua 中的某些 GUI 框架绑定,则可能会出现这个框架具有自己的撤消/重做功能的情况。例如 Qt(带有 qtlua 绑定)提供QUndoStack 类。