| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 781 人关注过本帖
标题:我想做个带屏幕键盘的文本编辑器。(RMB求帮做)
只看楼主 加入收藏
ganniko
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
我想做个带屏幕键盘的文本编辑器。(RMB求帮做)
我想做个带屏幕键盘的文本编辑器,大家给我思路,谢谢!

如题,具体想实现的功能是:

1.软件界面分两个部分,一左一右,左边是编辑区,右边是按钮区。

2.编辑区需要可以实现普通文本编辑(其实就是记事本的功能),只有数字或者字母,符号只有"-"和“.”,还有空格(TAB的长空格)。

3.编辑区可以自定义用不同的颜色来显示某组字母的组合,比如自定义”Love"这组字母为粉红色。数字为绿色、、、。

4.按钮区主要就是0-9的数字按钮和字母的按钮,这些按钮按下去的时候会在编辑区显示按下的数字或者字母。

5.按钮区还有个特殊的按钮,就是关闭按钮。按了这个按钮后软件就保存编辑区的内容并且退出软件(如果编辑区内容没有修改过就不执行保存动作直接退出)。

6.当设定TXT文件用该编辑器做默认打开软件的时候,双击txt文件的时候软件就自动打开并且将txt文档的内容显示在编辑区(或者直接拖动TXT文件到编辑器里打开)。(就是记事本的功能)

7.软件没有菜单栏,当然也没有任何的工具条,也不能新建等等操作,标题上也没有最小化和最大化还有关闭的按钮,打开就默认是全屏显示。

8.不需要支持物理硬盘的输入,只要鼠标点击按钮区就能输入。


说明:其实就是将系统上的记事本功能和屏幕键盘的功能合并和去除多余的功能。

小弟刚学VB不久,不知道怎么入手做这个编辑器,各位大侠帮帮忙给个思路,感激不尽!

晕我,我做不出来。
那位大哥帮根据要求帮我做一个,让我好学习一下。(支付RMB报酬)
软件界面大致如附件所示。请联系我QQ:331282961


图片附件: 游客没有浏览图片的权限,请 登录注册






[ 本帖最后由 ganniko 于 2010-8-29 05:07 编辑 ]
搜索更多相关主题的帖子: 键盘 RMB 屏幕 文本编辑 
2010-08-27 15:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
1、 显示部分使用  RichTextBox  来控制 。
2、 定义一个单字符变色 函数 ,每插入一个字符(非空格)时,均调用此函数,用来把最后一个字符插进去。
3、 定义一个单词变色函数, 每插入一个空格时,调用此函数, 用来把光标前到前一个空格 之间的字符 与 变色表比较,有相同的,按变色表规定设置颜色 。
4、 按钮区,建议使用 按钮数组, 然后 用 Select Case 语句组来判断是哪个字符。同时标记文件被修改。
5、 程序启动时,访问 Command 对象,取得命令行参数,达到 你的第六点要求的后半部分。前半部分是修改 注册表,让你的程序与 Txt 文件进行关联。
6、 程序读入文件后,先整个调用单字符变色函数,把所有的字符全部标记一下颜色 后,再整个调用 单词变色函数, 把所有的符合条件的 单词变色。最后,标记文件未修改。


我想到的大概就是这么多,你慢慢做吧。

授人于鱼,不如授人于渔
早已停用QQ了
2010-08-27 17:08
ganniko
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-27
收藏
得分:0 
谢谢版主大人
有没有类似的代码可以参考?
2010-08-27 17:23
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
这是一个 RichTextBox 整体加颜色的函数。传入 普通文本,返回  Rich文本
BUG: 以 \ 开头的会造成出现一个空行,并且导致 显示一个标志。

程序代码:
Public Function 彩色化(cs As String) As String

Dim i As Long, j As String
Dim js() As String
j = cs & vbCrLf
j = Replace(j, "\", "\\")           '单\换成双\\
js = Split(cs, vbCrLf)

If UBound(js) > 1000 Then
    If MsgBox("脚本非常长,进行命令标记需要很长的时间,是否继续?", vbInformation + vbOKCancel + vbDefaultButton2, 标题) = vbCancel Then
        彩色化 = cs
        Exit Function
    End If
End If

For i = 0 To UBound(js)
    If Left(Trim(js(i)), 1) = ";" Then
        j = Replace(j, js(i), "\cf1" & js(i) & "\cf0")
    'ElseIf Left(Trim(js(i)), 1) = "#" Then
    '    j = Replace(j, js(i), "\cf2" & js(i) & "\cf0")
    ElseIf Left(Trim(js(i)), 2) = "[~" Then
        j = Replace(j, Mid(js(i), 2, Len(js(i)) - 2), "\cf4" & Mid(js(i), 2, Len(js(i)) - 2) & "\cf0")
    End If
Next i

'j = Replace(j, js(i), "\cf1" & js(i) & "\cf0")
For i = 0 To UBound(命令)
    With 命令(i)
    If Len(.命令) > 2 Then
    Select Case Left(.命令, 1)
        Case "#"
            j = Replace(j, .命令, "\cf2 " & .命令 & "\cf0 ")
        Case "\"

        Case "."

        Case Else
            If InStr(1, j, .命令 & " ") > 0 Then
                j = Replace(j, .命令 & " ", "\cf3 " & .命令 & " \cf0 ", , , vbTextCompare)
            End If
    End Select
    End If
    End With
Next i

    Call 取标记(txtbox.Text)

On Error GoTo err1:
For i = 0 To UBound(标记)
    With 标记(i)
            j = Replace(j, "[@" & .标记名称 & "]", "[\cf4 @" & .标记名称 & "\cf0 ]")
            j = Replace(j, " @" & .标记名称 & " ", " \cf4 @" & .标记名称 & " \cf0 ")
            j = Replace(j, "@" & .标记名称 & ">", "\cf4 @" & .标记名称 & "\cf0 >")
    End With
Next i

err2:
On Error GoTo 0
    j = Replace(j, vbCrLf, vbCrLf & "\par ")        '换回车符
    j = Replace(j, "\par \cf", "\par\cf")         '换掉标记中间的空格
   
    j = "\viewkind4\uc1\pard\lang2052\f0\fs21" & j     '加头,倒次序加,显示头,颜色表,RTF头
    j = "{\colortbl ;\red0\green128\blue64;\red128\green0\blue64;\red0\green0\blue128;\red128\green0\blue255;}" & vbCrLf & j
    j = "{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}" & vbCrLf & j
    j = j & "}"                                     '加结尾
   
    彩色化 = j
    Exit Function
err1:
    GoTo err2:
End Function

授人于鱼,不如授人于渔
早已停用QQ了
2010-08-27 18:09
ganniko
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-27
收藏
得分:0 
晕我,我做不出来。
那位大哥帮根据要求帮我做一个,让我好学习一下。(支付RMB报酬)
软件界面大致如附件所示。请联系我QQ:331282961
2010-08-29 05:03
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
要不要支持画表格?
2010-08-29 18:56
ganniko
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-27
收藏
得分:0 
不需要做什么表格的,只要满足上面的要求就好了,字母也不多也就几个字母而已,就上面的界面那几个按钮而已
2010-08-29 21:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
二个关键的函数.

着色函数,传入 RichTextBox 控件进去
程序代码:
Public Sub 着色(obj As RichTextBox)

Const RTF头 = "{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}"   '宋体
Const 颜色头 = "{\colortbl "
Const 字号 = "\viewkind4\uc1\pard\lang2052\f0\fs24"

Dim s As String
s = LCase(obj.Text)

Dim 颜色表 As String


Dim i As Long
Dim j As Long


For i = 0 To UBound(colorset)
    颜色表 = 颜色表 & ";" & colorset(i).Color

    For j = 0 To UBound(colorset(i).list)
        If Len(Trim(colorset(i).list(j))) > 0 Then      '关键字不为空,那么就着色
            s = Replace(s, " " & colorset(i).list(j) & " ", "\cf" & i + 1 & " " & colorset(i).list(j) & "\cf0 ")
            s = Replace(s, " " & colorset(i).list(j) & vbCrLf, "\cf" & i + 1 & " " & colorset(i).list(j) & "\cf0" & vbCrLf)
            s = Replace(s, vbCrLf & colorset(i).list(j) & " ", vbCrLf & "\cf" & i + 1 & " " & colorset(i).list(j) & "\cf0 ")
            s = Replace(s, vbCrLf & colorset(i).list(j) & vbCrLf, vbCrLf & "\cf" & i + 1 & " " & colorset(i).list(j) & "\cf0" & vbCrLf, , 1)
        End If
    Next j
Next i
    s = Replace(s, vbCrLf, "\par" & vbCrLf)
颜色表 = 颜色头 & 颜色表 & ";}"
s = RTF头 & vbCrLf & 颜色表 & 字号 & s & "}"
obj.TextRTF = s

End Sub

  读设置函数.前面的定义需要放到 模块文件中,因为这个结构是前面那个函数也用到了.设置文件见下面.
程序代码:
Public Type 结构类型
    Color  As String
    list() As String
End Type

Public colorset() As 结构类型

Const setfile = "data.txt"

Public Sub 读颜色设置()

Const 头 = "[color="

Dim fj As Long
fj = FreeFile

Dim i As Long
Dim j As Long
Dim t As String
Dim m As String
Dim byt() As String

'读设置总块数
i = -1
Open setfile For Input As fj
Do While Not EOF(fj)
    Line Input #fj, t
    t = Trim(LCase(t))
    If InStr(1, t, 头) = 1 Then         '需要计数
        i = i + 1
    End If
Loop
Close fj

ReDim colorset(i)

'读每块设置总行数
i = -1: j = -1
Open setfile For Input As fj
Do While Not EOF(fj)
    Line Input #fj, t
    t = Trim(LCase(t))
    If InStr(1, t, 头) = 1 Then         '需要计数
        If i >= 0 Then
            ReDim colorset(i).list(j)
            j = -1
            byt = Split(m, " ")
            colorset(i).Color = "\red" & byt(0) & "\green" & byt(1) & "\blue" & byt(2)
        End If
        i = i + 1
        m = Mid(t, Len(头) + 1)
        m = Left(m, Len(m) - 1)
    Else
        j = j + 1
    End If
Loop
    ReDim colorset(i).list(j)
    byt = Split(m, " ")
    colorset(i).Color = "\red" & byt(0) & "\green" & byt(1) & "\blue" & byt(2)
Close fj

'读每行内容
i = -1: j = -1
Open setfile For Input As fj
Do While Not EOF(fj)
    Line Input #fj, t
    t = Trim(LCase(t))
    If InStr(1, t, 头) = 1 Then         '需要计数
        If i >= 0 Then
            j = -1
        End If
        i = i + 1
    Else
        j = j + 1
        colorset(i).list(j) = Trim(LCase(t))
    End If
Loop
Close fj
End Sub

设置文件举例
[Color=0 0 255]
Error
GoTo
On
Replace
Exit
Function
End
With
Next
For
UBound
To
Select
Case
Else
If
Then
ElseIf
Left
Trim

[Color=255 0 0]
"

[Color=0 255 0]
=
'

调用举例
程序代码:
Private Sub Command1_Click()
    Call 着色(RichTextBox1)
End Sub

Private Sub Form_Load()
Call 读颜色设置
End Sub



授人于鱼,不如授人于渔
早已停用QQ了
2010-08-31 16:31
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
生成的 RTF 如下:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;\red0\green255\blue0;}\viewkind4\uc1\pard\lang2052\f0\fs24[color=0 0 255]\par
\cf1 error\cf0\par
\cf1 goto\cf0\par
\cf1 on\cf0\par
\cf1 replace\cf0\par
\cf1 exit\cf0\par
\cf1 function\cf0\par
\cf1 end\cf0\par
\cf1 with\cf0\par
\cf1 next\cf0\par
\cf1 for\cf0\par
\cf1 ubound\cf0\par
\cf1 to\cf0\par
\cf1 select\cf0\par
\cf1 case\cf0\par
\cf1 else\cf0\par
\cf1 if\cf0\par
\cf1 then\cf0\par
\cf1 elseif\cf0\par
\cf1 left\cf0\par
\cf1 trim\cf0\par
\par
[color=255 0 0]\par
\cf2 "\cf0\par
\par
[color=0 255 0]\par
\cf3 =\cf0\par
\cf3 '\cf0\par
}

显示 系统的RTF 文本如下:

{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;\red0\green255\blue0;}
\viewkind4\uc1\pard\f0\fs24 [color=0 0 255]
\par \cf1 error\cf0
\par \cf1 goto\cf0
\par \cf1 on\cf0
\par \cf1 replace\cf0
\par \cf1 exit\cf0
\par \cf1 function\cf0
\par \cf1 end\cf0
\par \cf1 with\cf0
\par \cf1 next\cf0
\par \cf1 for\cf0
\par \cf1 ubound\cf0
\par \cf1 to\cf0
\par \cf1 select\cf0
\par \cf1 case\cf0
\par \cf1 else\cf0
\par \cf1 if\cf0
\par \cf1 then\cf0
\par \cf1 elseif\cf0
\par \cf1 left\cf0
\par \cf1 trim\cf0
\par
\par [color=255 0 0]
\par \cf2 "\cf0
\par
\par [color=0 255 0]
\par \cf3 =\cf0
\par \cf3 '\cf0
\par }

唯一的区别就是 我把 换行符 放到每行的后面,而系统把每换行符放到第二行的前面.

[ 本帖最后由 风吹过b 于 2010-8-31 16:42 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2010-08-31 16:40
快速回复:我想做个带屏幕键盘的文本编辑器。(RMB求帮做)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035135 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved