回 帖 发 新 帖 刷新版面

主题:[原创]世界上首款竖排版的记事本源代码

大家知道微软的WORD可以竖排版,但记事本似乎还没有竖排版的先例。这个程序是笔者根据自己原创的一个用户控件进行了大幅修改而成的(原贴见http://bbs.pfan.cn/post-283746.html),这也许是世界上第一个具有实用价值的竖排版记事本,多有不完善之处,盼望与 VB 爱好者们共同改进。
  竖排版记事本还可以装入或粘贴图片,做到图文并茂,也可将内容保存为图片或文本文件。
  竖排版记事本具有文本文件浏览器功能。

  请注意两点:
1.竖排版记事本采用了图片框来显示字符。由于图片框的大小有限制,所以,当字体大小确定后,能显示的字符数量也随之确定,过长的文本将会被不可恢复地截断。
2.编辑时,被选中的字符以蓝色粗体字显示,因此文本字体不要设置成相同的。

  初学者可在竖排版记事本的代码中,学习到对字符操作、算法、鼠标和键盘事件的处理、滚动条的处理等方面的知识,对老鸟们也具有借鉴作用。

  声明:未经笔者允许,禁止将本代码转发到其它网站,否则将追究侵权责任。

一江秋水 2009.4.15

回复列表 (共17个回复)

11 楼

不支持。
这是因为鼠标拖动选择一段文字是没问题的,但这一段的颜色处理比较麻烦,代码要复杂很多。只有改变选中的文字色和字体最简单。

12 楼

从天天学习的发贴中得到启发:把被选中文本的前景色及其背景色同时改变,效果更好。只要作4处修改就行了:

1.增加一个全局变量:
  Dim CramColor As Long   '填充色

2.在Form_Load过程中增加一句:
  CramColor = Pic.BackColor

3.把PrintWord过程的2个Pic.Line语句中的颜色均改为CramColor(原来是Pic.BackColor)

4.Transform过程修改如下:
Dim C As Long
If BjAlter Then C = Pic.ForeColor: Pic.ForeColor = vbWhite: CramColor = vbBlue
CurrentPos = zStart: ComputeRange
For i = zStart To zEnd: PrintWord: Next
If BjAlter Then Pic.ForeColor = C: CramColor = Pic.BackColor: BjAlter = False

如此一来,就不须改变被选中字符的字体了

13 楼

似乎不能使用退格键?删除键呢?
--------------------------

sorry,我看帮助知道是PageUp代表退格,PageDown代表删除了.不过我觉得原来的DEL和BACKSPACE键也可以保留以照顾习惯吧.另外我觉得对我的电脑(PIII733)来说这个程序的输入处理速度比较慢是个最大的问题了,每输入一个字,CPU占用时接近50%.其它功能上还是挺完整的,操作方便性改进一下,速度要达到实用化就完美了.

14 楼

按大喊三的要求可作如下修改:

把Pic_KeyDown过程修改一下:

      Case 8, 33, 34, 46
        If zOpt = 3 Then 剪切_Click: Exit Sub
        If KeyCode = 34 Or KeyCode = 46 Then If CurrentPos > Subscript Then Exit Sub 
        If KeyCode = 33 Or KeyCode = 8 Then
      ......

另外,我在12楼提出的方案还要修改一处:
在“背景颜色_Click”过程的 Pic.BackColor = cc.rgbResult 语句后面要增加一句:
CramColor = Pic.BackColor

正如大喊三所说的,以后还要优化,提高速度

15 楼

哦,补充一下最近试用感受.在记事本输入区域的左边,也就是属于比较末端的列,响应非常快.没有延迟现象.在右边的区域即开始列输入则象上面我说的有点慢.不知这是为什么.

16 楼

谢谢试用。
因为打字是从右至左的,打字时要把当前位置以左的字全部重新显示一遍,所以越右速度就越慢些

17 楼

非常好的源码,对编程来说简直贡献非凡。

我来回复

您尚未登录,请登录后再回复。点此登录或注册