VB MDI 文本编辑器
来源:互联网 发布:天蝎网络第三季 编辑:程序博客网 时间:2024/06/05 15:26
简单的 VB MDI 文本编辑器总结
最近兴致来潮,用VB做了一款MDI文本编辑器,在博主的资源页可以下载,在这里把思路和遇到的问题总结一下。界面如下
1.设计思路
一个MDI窗体,一个子窗体,一个查找替换窗体,共三个窗体
在MDI窗体设置菜单,子窗体不设置菜单
在MDI窗体放置commondialog控件来实现 打开文件 保存文件 以及 设置字体的功能,该部件需要手动添加Microsoft Common Dialog Control 6.0(sp6)
在子窗体放置richtextbox控件,作为文本框,需要根据窗体大小而改变大小,适中布满整个子窗体。该空间需要手动添加Microsoft Rich Textbox Control 6.0 (sp6)
子窗体中放置2个Label控件,分别位于左下角和右下角,用于显示是否保存以及当前光标的起始位置、选中文本长度,这两个标签需要随窗体的大小变化而调整自己的位置
需要设置在子窗体的richtextbox控件上的右键菜单
查找替换窗体需要设置保持最上层状态
夜间模式的颜色调整
以该编辑器为打开方式时的cmd参数传递
其他小功能
2.遇到的问题总结
1.直接保存与另存为的判断
每次保存都调用commondialog来实现固然编码方便,但是这会让做出来的文本编辑器用起来太麻烦。
博主采取的方式是每当打开文件或者保存好当前文件时,就让当前子窗体的caption为文件的路径,这样的话每次保存的时候,若当前子窗体的caption属性是文件路径的话,就直接覆盖写入该路径的文件,否则调用commondialog来 另存为。
2.另存为时候的覆盖保存问题
另存为 时,若用户输入的文件路径已存在,则提示是否覆盖保存
3.关闭文件时的是否保存判断
在子窗体中使用左下角的标签来记录当前文件的保存状态,若“未保存”,则提示是否保存
4.richtextbox 以及2个label控件的动态变化
在子窗体的risize事件中,改变richtextbox的大小以及label的top,left属性即可
5.richtextbox上的右键菜单
在richtextbox的mouseup事件事件中判断是否是右键,是的话用popupmenu方法弹出编辑菜单
6.撤销功能
使用API函数来完成
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const EM_UNDO = &HC7Private Const EM_CANUNDO = &HC6Private Sub MenuUndo_Click() If SendMessage(FrmMDINotepad.ActiveForm.ActiveControl.hwnd, EM_CANUNDO, 0, 0) Then Call SendMessage(FrmMDINotepad.ActiveForm.ActiveControl.hwnd, EM_UNDO, 0, 0) End IfEnd Sub
7.日期戳时间戳
直接对当前窗体的当前控件的选中文本赋值即可
例如
FrmMDINotepad.ActiveForm.ActiveControl.SelText = Date
8.查找替换窗体的始终最上层显示
调用API函数来完成
Private Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)Private Sub Form_Load() Dim myval myval = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)End Sub
9.单字符查找时的bug
博主在写查找功能的代码时,为了避免对有重复块部分的查找时的遗漏(比如ababa ,查找aba时,会找到2个才对),测试时发现这样写会有单字符查找的bug。直接把单字符查询特殊处理了
10.cmd命令的引号问题
生成exe后,将txt的默认打开方式设置为自己写好的文本编辑器,之后双击一个txt文档,这个时候如果程序中没有对cmd命令的判断的话,就算原txt文档是有内容的,打开后也会是空。
处理方法是在MDI的formload事件中写好对cmd命令的判断
Dim cmd As Stringcmd = Command() '获取cmd命令传来的参数
这样cmd就是系统传来的文件路径信息,博主在测试时有遇到引号的问题,比如我们双击打开D盘中的1.txt,cmd可能会是 [ “D:\1.txt” ],或者[ D:\1.txt ] ,很显然,第一种情况下需要对引号进行处理,才可以打开正确的路径。博主没有弄清楚什么时候cmd命令给的路径是带引号什么时候不带,所以直接在程序中加入判断,如果带引号就去掉。高人请不吝赐教~
到这就总结完啦,下面再说一下博主刚开始做这个文本编辑器时折腾的一点东西
这是看同学自己做了个文本编辑器用,蛮好的,所以自己也想做一个自己用。既然是自己用的东西,所以就要添加一些自己的特征啦,自己的习惯啦。然后博主就加了个夜间模式。。。。虽然开启夜间模式后标题栏还是亮的。。。
结束
- VB MDI 文本编辑器
- [C#]MDI窗体之rtf文本编辑器
- MDI编辑器
- [VB.NET]MDI窗体
- vb.net 教程 12-6 webbrowser 文本编辑器 1
- vb.net 教程 12-6 webbrowser 文本编辑器 2
- vb MDI背景自动拉伸
- vb.net详解MDI窗体操作方法
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- 文本编辑器
- C++字符数组排序
- GTKmm環境架設筆記
- 不忘初心。
- CSS优先级
- UE4AI和行为树(C++)
- VB MDI 文本编辑器
- Android ListView Item含有RadioButton、CheckBox、RatingBar、EditText
- Hive性能优化(新手重新标注版)
- zookeeper
- POJ 2001 字典树
- UE4AI和行为树(Blueprint)
- 关于session的深入理解
- 模拟实现strlen函数
- (提高篇)第二十讲 项目 二分法解方程等