模拟手机短消息编辑器Word下载.docx

上传人:b****6 文档编号:18661626 上传时间:2022-12-31 格式:DOCX 页数:34 大小:477.72KB
下载 相关 举报
模拟手机短消息编辑器Word下载.docx_第1页
第1页 / 共34页
模拟手机短消息编辑器Word下载.docx_第2页
第2页 / 共34页
模拟手机短消息编辑器Word下载.docx_第3页
第3页 / 共34页
模拟手机短消息编辑器Word下载.docx_第4页
第4页 / 共34页
模拟手机短消息编辑器Word下载.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

模拟手机短消息编辑器Word下载.docx

《模拟手机短消息编辑器Word下载.docx》由会员分享,可在线阅读,更多相关《模拟手机短消息编辑器Word下载.docx(34页珍藏版)》请在冰豆网上搜索。

模拟手机短消息编辑器Word下载.docx

2.输入汉字时按照该字的拼音顺序单击相应的数字键

3.单击数字键“1”,可输入标点符号有:

“,。

、;

“”’…—《》”。

4.按键

用于实现确定、选择的功能。

按键

用于实现取消、删除的功能。

按键

用于实现向左和向上移动光标的功能。

用于实现向右和向下移动光标的功能。

用于实现关闭程序并保存所编辑的短消息的功能。

用于实现显示程序名及版本信息。

5.因为显示屏大小有限,拼音提示区和汉字提示区都要有滚动的功能。

在拼音提示区内滚动时,汉字提示区自动显示当前拼音的汉字。

⒍拼音提示区只列出已输入数字代表的字母可能组成的所有有效的拼音;

如果已输入的字母构不成有效拼音,但是继续输入可以产生有效的拼音,则汉子提示区显示可能生成的拼音中最靠前(以字母顺序)的拼音所对应的汉字;

如果已输入的字母构不成有效拼音,且再输入也不会产生有效的拼音,那么继续输入字母则会开始一个新的拼音。

⒎本程序只能使用鼠标鼠标单击按键进行操作,完全模拟手指对手机的操作。

①窗体模块中共有三个事件过程,如下:

Form_Load:

为程序的运行做准备,包括改变窗体形状、读入拼音文件、和为部分数组赋值、指定拼音区等。

imgButton_MouseDown:

加载手机按钮图片,实现按下按钮的动态效果。

imgButton_MouseUp:

用Index参数返回鼠标所点击的图像控件的序号,用SelectCase语句来执行相应的语句

Case10,11:

上下或左右移动光标

Case12,13:

确定或取消

Case0:

输入空格

Case1:

输入标点符号

Case2,3,4,5,6,7,8,9:

输入拼音

Case14:

显示程序名及版本信息

Case15:

退出程序并保存短消息

②标准模块中定义了所有的全局变量及数组,如下:

PY_LIST:

一个自定义的类型

PYList()

【类型PY_LIST】:

记录拼音与汉字的对照关系

PYNum【类型Integer】:

拼音的个数,即拼音文件的行数KeyIndex(0To9)【类型String】:

数字与字母的对应关系NumList【类型String】:

当前按下的数字序列

PYInput()

【类型String】:

当前输入的有效拼音

PYInputNum【类型Integer】:

当前输入的有效拼音个数

PYIndex【类型Integer】:

当前选定的拼音序号

PYTopIndex【类型Integer】:

当前显示的拼音序号

WZCurrent【类型String】:

当前拼音所对应的所有文字WZIndex【类型Integer】:

当前选定的文字序号

WZTopIndex【类型Integer】:

最上面的字

strContent【类型String】:

当前编辑内容

CNTindex【类型Integer】:

当前编辑的位置

CNTTopindex【类型Integer】:

当前内容的第一个字序号

pic(0To15)【类型NewStdPicture】:

保存按钮图片

focus【类型Integer】:

当前的输入焦点:

1拼音区2文字3正文区

③标准模块中有十一个全局过程,如下:

read_pylist:

确定拼音文件有多少个拼音,并将拼音与汉字对应起来

get_string:

得到当前输入的拼音所对应的汉字如果是部分拼音,则得到第一个相匹配拼音的汉字

isPinyin:

测试一个字母序列是否是一个有效的拼音

isPartofPinyin:

测试一个字母序列是否是一个有效拼音的开头部分

get_PYInput:

得到当前输入的数字序列所能组成的所有有效拼音

Search_py:

得到当前输入的数字序列所能组成的所有的字母组合

show_pinyin:

在拼音提示区显示当前所有的有效拼音

show_wenzi:

在汉字提示区显示当前选中的有效拼音所对应的汉字

show_content:

在编辑区显示编辑的内容

Show_about:

显示程序名及版本信息

API函数:

用于建立一个区域,创建非矩形窗口,并作用在窗体上

先建立窗体界面,在窗体上放置手机的图片,然后将十六个image控件数组放置在窗体上相应位置。

然后将矩形窗体改为非矩形窗体,调出系统的API函数,在标准模块中定义CreateRoundRectRgn和SetWindowRgn函数,在窗体Load事件中调用,不断的调整各点坐标,便可得到近似的手机形状的非矩形窗口(圆角矩形)。

按照要求安放好其余所需的控件,并调整好其属性,程序的窗体界面就做好了。

为了实现鼠标按下按键时的动态效果,使用Image图像控件将这些图片重叠在mphone.bmp图片上并产生一个小的位移,在这之前先将图片对象赋值到pic数组中并在窗体的imgButton_MouseDown事件中给相应的图像框加载图片即可。

由于手机上的2~9八个数字键代表了不止一个字母,故需要在标准模块中定义一个过程用于判断是否为有效拼音(isPinyin)或拼音的开头部分(isPartofpinyin),而在这之前,又需要先得到所按数字序列所能得到的所有字母组合(search_by),通过在标准模块中定义get_PYInput过程,并在该过程中调用上述过程即可达到目的。

在标准模块中定义一个自定义数据类型PY_List,其中含有两个成员,pinyin和wenzi,分别对应相应的拼音和汉字,其数据类型均为string。

在通用过程中将拼音文件py.dat打开,用循环语句Dowhileloop一行行的读取拼音文件里的内容,并用变量PYNum记录拼音文件的行数即拼音的个数,用函数EOF来判断拼音文件是否读取完毕。

若是,则结束循环,完成该过程。

此时,程序所需的数据已读入到程序中。

为了实现在三个图片框显示相应拼音或文字,故在标准模块中定义show_pinyin、show_wenzi、show_content三个通用过程同时定义PYIndex、PYTopIndex、WZIndex、WZTopIndex、CNTindex、CNTTopindex六个全局变量用于确定当前选定的拼音序号及当前显示的拼音序号、当前选定的文字序号以及最上面的字的序号和当前编辑的位置及当前内容的第一个字序号,通过使用这些变量可以实现相应框中内容的滚动。

这三个图片框,将它们设为无边框,背景色设为&

H00CDD5AD(与手机屏幕颜色一致)。

所有内容显示都是通过Print方法生成的。

光标的显示是使用Line方法绘制直线、矩形和填充矩形实现的。

此处参考书本6.1.2与6.1.3小节使用反色的绘图模式绘制光标,vbInvert为使用背景色的反色,vbCopype为默认值,使用画笔色。

再在窗体模块中,定义一个imgButton_MouseDown事件,用参数Index带回image数组的序号来确定鼠标所按下的按钮,再使用selectcaseindex语句来执行相应的语功能,在其中调用标准模块中定义的过程即可实现手机功能。

运行效果图如下:

拼音词组输入功能编辑过程

源程序标准模块已定义的search-py可以通过比对py.dat文件夹里的拼音的方法查找输入数字所对应的所有有效拼音。

我只需将pycz.dat里面的常用字编码插入到py.dat原内容后面,便可实现拼音词组输入功能,以下是我的部分编码示例。

(修改pycz.dat花费了大量时间)

ac暗藏

ad哀悼爱戴安定暗淡

af爱抚安放安徽安徽省

ag爱国爱国主义按规定

ah爱好爱护

aj安家安家落户安静安居乐业按键

al哀乐按劳取酬

am阿弥陀佛爱民爱莫能助爱慕按摩傲慢奥妙奥秘

ap安排

aq哀求爱情按期安全安全保密安全检查安全系数安然无恙案情

ay阿姨哎呀奥运会

ar爱人盎然(运行效果如下)

as哀伤哀思按时按时完成暗伤暗示昂首阔步

at哀叹

aw安慰

ax爱惜安息安详安心按需分配翱翔

ay案语

az癌症爱憎分明安葬安置安装按照肮脏

bb爸爸宝宝拜拜背包表白

bc不错保持保存补充

bd笨蛋不对XX表达

bf悲愤办法部分爆发播放

bg罢工报告变革表格饼干

bh不会保护变化保暖

bj比较北京班级毕竟背景

bk包括崩溃本科补课

bl芭蕾舞罢了本来菠萝变量

bm罢免帮忙部门报名避免

bn不能半年别扭保暖百年

bp奔跑爆破帮派被迫

bq表情并且抱歉霸气

br病人别人不然本人比如

bs标识表示比赛白色本身

bt半天白天补贴拜托

bw保卫把握部位

bx百姓步行保险表现

by毕业半夜

bz壁纸部长备注标准帮助保障爆炸布置

原文件内容

修改后文件内容

改变窗体形状编辑过程

我用到了书中给出的方法即4.1.4与6.1.7节所介绍的调用系统内核的API函数,来生成一个区域并作用于窗体上,从而生成一个非矩形窗口的方法。

第一步:

使用API浏览器将CreateRoundRectRgn函数的声明添加到工程中,该函数的的参数X1、Y1、和X2、Y2分别是区域左上角和右下角的坐标,X3、Y3分别是圆角椭圆的宽和高,这两个函数使用的坐标原点为窗体外框的左上角,坐标单位为像素。

返回的长整型值是一个指向所创建区域的“指针”,该长整型值可以作为参数来调用其他的API函数,代码如下:

PublicDeclareFunctionCreateRoundRectRgnLib"

gdi32"

(ByValX1AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong,ByValX3AsLong,ByValY3AsLong)AsLong

第二步:

使用SetWindowRgn函数将前两个函数所创建的区域施加到要改变形状的窗体上,区域以外的部分会被裁剪掉,剩下的是和区域形状相同的窗口部分。

该函数的hWnd参数是一个指向目标窗体的指针,可以使用窗体的hWnd属性值;

hRgn为区域参数,使用创建区域函数的返回值:

bRedraw参数制定设置区域后是否重绘窗体,设置为Ture即可,代码如下:

PublicDeclareFunctionSetWindowRgnLib"

user32"

(ByValhWndAsLong,ByValhRgnAsLong,ByValbRedrawAsBoolean)AsLong

第三步:

在窗体模块的Load事件过程中调用这两个函数即可,编写如下事件过程

DimiAsInteger

DimhRgnAsLong

hRgn=CreateRoundRectRgn(6,30,210,548,170,165)

CallSetWindowRgn(Me.hWnd,hRgn,True)

CreateRoundRectRgn函数的六个坐标参数都需要不断地测试以取得最佳值,左图所示是正在调试中的窗体运行状况,明显窗体形状不完美。

右图是全部调试完毕之后的完美的窗体的运行状况。

编辑区文字滚动功能设计过程

控制编辑区文字显示的几个重要按钮和标准模块的通用过程分别是case12(ok)按钮,和标准模块的show-content过程。

当点击确定按钮时激发case12按钮所对应的语句块,当焦点在文字区时即为向编辑区输入文字。

语句块为:

Case12'

OK按钮用于确定

SelectCasefocus

Case1'

在拼音区

Callshow_pinyin(picPinyin,0,False)

Callshow_wenzi(picWenzi,0,True)

focus=focus+1

Case2'

在文字区

IfstrContent="

"

Then

strContent=Mid(WZCurrent,WZIndex,1)

CNTindex=1

CNTTopindex=1

Callshow_content(picContent,0)

Else

strContent=Left(strContent,CNTindex)&

Mid(WZCurrent,WZIndex,1)&

Right(strContent,Len(strContent)-CNTindex)

'

CNTindex=CNTindex+1

Callshow_content(picContent,1)

EndIf

Case3'

在编辑区

EndSelect

在show-content的selectcase语句中case1表示将光标向后移动一位,并检测是否已将占满编辑区,并将整体向后滚动显示一位;

case-1表示将光标向前移动一位,并检测是否已将占满编辑区,并将整体向前滚动显示一位。

Case0

Case1

IfCNTindex<

Len(strContent)Then

IfCNTindex-CNTTopindex+1=LineNum*ColNumThen

CNTTopindex=CNTTopindex+1

EndIf

CNTindex=CNTindex+1

Case-1

IfCNTindex>

1Then

IfCNTindex=CNTTopindexThen

CNTTopindex=CNTTopindex-1

CNTindex=CNTindex-1

保存短信功能设计过程

短消息编辑器的保存短信功能为在退出程序时,提示是否保存短信或者取消操作,若选择是,则生成txt文件保存短信;

若选择否,直接退出;

若选择取消,则返回原界面。

此功能不仅可以保存一条短信,可以检测并保存短信1、2、3、4、5、6……

Case15

t=MsgBox("

是否保存短信"

35,"

提示"

35=3(vbYesNoCancel)+32(vbQuestion)

Ift=6Then

line1:

s=s+1

IfDir(App.Path&

"

\短信"

&

s)="

OpenApp.Path&

sForOutputAs#1

Print#1,strContent;

Close

UnloadMe

GoToline1

Ift=7ThenUnloadMe

用MsgBox提醒用户是否保存短信或取消操作并返回相应的数值附给变量t,并赋值变量s检测短信文件(短信1、2、3、4、5…)是否存在,当检测到一个不存在的文件时即创建此文件并保存短信内容。

此此处使用了if嵌套循环和GoTo语句实现检测并生成短信文件的功能。

下图为此功能的程序图:

1使用拼音词组输入功能中,当focus=2,即焦点在文字区时,光标仍只在一个文字上,且每次只能输入一个文字。

若想输入词语,必须按“确定—向右—确定”来实现,比较繁琐。

如果想做到一次性输入一个词语,则此时必须先判断词语大小,因为不只有二字词语,还有三字和四字词语,然后出现合适的光标大小,再按一次“确定”键输入整个词语,这一项功能并没有完成。

2编辑区的文字滚动功能有不足之处,不能边输入边向下滚动。

只能在输入完成之后,点击“取消”键将拼音区文字区都清空,焦点移动至编辑区,才可以上移或下移。

OptionExplicit

PrivateSubForm_Load()

DimhRgnAsLong'

hRgn为区域参数

CallSetWindowRgn(Me.hWnd,hRgn,True)

将窗体形状改为手机形状'

hWnd指向目标窗体的指针bRedraw=True重绘窗体

KeyIndex

(1)="

数字与按键字母对应关系

KeyIndex

(2)="

abc"

KeyIndex(3)="

def"

KeyIndex(4)="

ghi"

KeyIndex(5)="

jkl"

KeyIndex(6)="

mno"

KeyIndex(7)="

pqrs"

KeyIndex(8)="

tuv"

KeyIndex(9)="

wxyz"

KeyIndex(0)="

Fori=0To15

Setpic(i)=LoadPicture(App.Path&

\buttonpics\"

i&

.bmp"

用LoadPicture载入图片'

App.Path即运行程序的目录'

set为对象型赋值

Next

Callread_pylist'

打开拼音文件

focus=1'

首先指定拼音区

EndSub

PrivateSubimgButton_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)'

实现鼠标按下按键时的动态效果

IfButton=1Then'

Button=1即按左键,按钮按下

imgButton(Index).Picture=pic(Index)

image控件数组加载图片,实现动态效果

PrivateSubimgButton_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

DimtAsString

DimsAsInteger

IfButton=1Then

SelectCaseIndex

Case10'

<

-按钮实现光标向上和向左移动

Case1

Callshow_pinyin(picPinyin,-1,True)

显示拼音

Callshow_wenzi(picWenzi,0,False)

Case2

Callshow_wenzi(picWenzi,-1,True)

Case3

Callshow_content(picContent,-1)

Case11'

->

按钮实现光标向下和向右移动

Callshow_pinyin(picPinyin,1,True)

Callshow_wenzi(picWenzi,1,True)

focus=focus+1

焦点由拼音区移至文字区

Callshow_content(picContent,0)

本来是空白的,首次显示

更改'

Callshow_content(picContent,1)

非首次显示,向后移动一位

在编辑区

Case13'

cancel按钮取消

拼音区

IfNumList="

Then'

当前数字序列为0

focus=3

ErasePYInput

PYInputNum=0

WZCurrent="

Callshow_wenzi(picW

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1