发布网友 发布时间:2022-05-29 05:23
共1个回答
热心网友 时间:2023-10-05 15:21
意思就是做个记事本吧 看下面的 用VB做一个记事本实在不很复杂, 们完全可以通过向导来很方便地做出来。但本文只打算讨论用手动方法制作记事本,旨在向VB初学者展示:学VB原来是如此容易! 通过阅读、研究本文并按本文所述进行尝试,初学者将学到很多东西,如怎样使用RICHTEXT控件来打开和保存文件,怎样制作菜单、工具栏和状态栏以及如何对其编写代码等。 第一章 让 们的记事本马上运行 急于求成是初学者共有的心愿。那好,请按如下三个步骤做, 们的愿望立即就可以实现! 步骤一:绘制界面。 新建一个标准EXE工程,将其CAPTION属性改为“超级记事本”,点击ICON属性给它找个合适的ICON图标。单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到MICROSOFT RICHTEXT BOX 6.0和公共对话框MICROSOFT COMMON DIALOG 6.0并选中它们,单击“确定”按钮。这时左边的工具栏上出现了 们刚才新添的两个控件了。在窗体上绘制RICHTEXT BOX和COMMN DIALOG,其中RICHTEXT BOX的大小和位置可不用理睬, 们将在代码中处理它,当然,有必要把它的SCROLLBAR属性设为2-RTFVERTICAL,这样在打开和编辑文件时垂直滚动条才可用。 步骤二:编辑菜单。 按CTRL+E调出菜单编辑器, 们来做如下几个菜单: 一.文件菜单: 文件(第一层) MNUFILE 新建(第二层) MNUNEW 打开(第二层) MNUOPEN 保存(第二层) MNUSAVE - (第二层) MNUFILESEP (分隔线) 退出(第二层) MNUEXIT 二.编辑菜单: 编辑(第一层) MNUEDIT 复制(第二层) MNUCOPY 剪切(第二层) MNUCUT 粘贴(第二层) MNUPASTE - (第二层) MNUEDITSEP (分隔线) 全选(第二层) MNUSELECALL 三.搜索菜单: 搜索(第一层) MNUSEARCH 查找(第二层) MNUFIND 查找下一个(第二层) MNUFINDON 四.帮助菜单: 帮助(第一层) MNUHELP 使用说明(第二层) MNUUSAGE 关于(第二层) MNUABOUT (注:各菜单项的快捷键请自行设置) 好了,其它的菜单项以后再根据需要添加。现在进入: 步骤三:编写代码。 '声明查找变量 DIM SFIND AS STRING '声明文件类型 DIM FILETYPE, FITYPE AS STRING '初始化程序 PRIVATE SUB FORM_LOAD() '设置程序启动时的大小 ME.HEIGHT = 6000 ME.WIDTH = 9000 END SUB '设置编辑框的位置和大小 PRIVATE SUB FORM_RESIZE() ON ERROR RESUME NEXT '出错处理 RICHTEXTBOX1.TOP=20 RICHTEXTBOX1.LEFT=20 RICHTEXTBOX1.HEIGHT = SCALEHEIGHT-40 RICHTEXTBOX1.WIDTH = SCALEWIDTH-40 END SUB '新建文件 PRIVATE SUB MNUNEW_CLICK() RICHTEXTBOX1.TEXT = "" '清空文本框 FILENAME = "未命名" ME.CAPTION = FILENAME END SUB '打开文件 PRIVATE SUB MNUOPEN_CLICK() COMMONDIALOG1.FILTER = "文本文档(*.TXT)|*.TXT|RTF文档(*.RTF)|*.RTF|所有文件(*.*)|*.*" COMMONDIALOG1.SHOWOPEN RICHTEXTBOX1.TEXT = "" '清空文本框 FILENAME = COMMONDIALOG1.FILENAME RICHTEXTBOX1.LOADFILE FILENAME ME.CAPTION = "超级记事本:" & FILENAME END SUB '保存文件 PRIVATE SUB MNUSAVE_CLICK() COMMONDIALOG1.FILTER = "文本文档(*.TXT)|*.TXT|RTF文档(*.RTF)|*.RTF|所有文件(*.*)|*.*" COMMONDIALOG1.SHOWSAVE FILETYPE = COMMONDIALOG1.FILETITLE FITYPE = LCASE(RIGHT(FILETYPE, 3)) FILENAME = COMMONDIALOG1.FILENAME SELECT CASE FITYPE CASE "TXT" RICHTEXTBOX1.SAVEFILE FILENAME, RTFTEXT CASE "RTF" RICHTEXTBOX1.SAVEFILE FILENAME, RTFRTF CASE "*.*" RICHTEXTBOX1.SAVEFILE FILENAME END SELECT ME.CAPTION = "超级记事本:" & FILENAME END SUB '退出 PRIVATE SUB MNUEXIT_CLICK() END END SUB '复制 PRIVATE SUB MNUCOPY_CLICK() CLIPBOARD.CLEAR CLIPBOARD.SETTEXT RICHTEXTBOX1.SELTEXT END SUB '剪切 PRIVATE SUB MNUCUT_CLICK() CLIPBOARD.CLEAR CLIPBOARD.SETTEXT RICHTEXTBOX1.SELTEXT RICHTEXTBOX1.SELTEXT = "" END SUB '全选 PRIVATE SUB MNUSELECTALL_CLICK() RICHTEXTBOX1.SELSTART = 0 RICHTEXTBOX1.SELLENGTH = LEN(RICHTEXTBOX1.TEXT) END SUB '粘贴 PRIVATE SUB MNUPASTE_CLICK() RICHTEXTBOX1.SELTEXT = CLIPBOARD.GETTEXT END SUB '查找 PRIVATE SUB MNUFIND_CLICK() SFIND = INPUTBOX("请输入要查找的字、词:", "查找内容", SFIND) RICHTEXTBOX1.FIND SFIND END SUB '继续查找 PRIVATE SUB MNUFINDON_CLICK() RICHTEXTBOX1.SELSTART = RICHTEXTBOX1.SELSTART + RICHTEXTBOX1.SELLENGTH + 1 RICHTEXTBOX1.FIND SFIND, , LEN(RICHTEXTBOX1) END SUB '使用说明 PRIVATE SUB MNUREADME_CLICK() ON ERROR GOTO HANDLER RICHTEXTBOX1.LOADFILE "README.TXT", RTFTEXT '请写好README.TXT文件并存入程序所在文件夹中 ME.CAPTION = "超级记事本:" & "使用说明" EXIT SUB HANDLER: MSGBOX "使用说明文档可能已经被移除,请与作者联系。", VBOKONLY, " 错误信息" END SUB '关于 PRIVATE SUB MNUABOUT_CLICK() MSGBOX "超级记事本 VER1.0 版权所有(C) 2001 土人",VBOKONLY,"关于" END SUB '设置弹出式菜单(即在编辑框中单击鼠标右键时弹出的动态菜单) PRIVATE SUB RICHTEXTBOX1_MOUSEDOWN(BUTTON AS INTEGER, SHIFT AS INTEGER, X AS SINGLE, Y AS SINGLE) IF BUTTON = 2 THEN POPUPMENU MNUEDIT, VBPOPUPMENULEFTALIGN ELSE EXIT SUB END IF END SUB '防止在切换输入法时字体自变(感谢王必成先生提供此方案) PRIVATE SUB RICHTEXTBOX1_KEYUP(KEYCODE AS INTEGER, SHIFT AS INTEGER) IF KEYCODE = VBKEYSPACE THEN RICHTEXTBOX1.SELFONTNAME = COMMONDIALOG1.FONTNAME END IF END SUB 至此, 们的记事本可以编译使用了。点击菜单“文件”-“生成XXX.EXE”,回到桌面运行 们的记事本看看,是不是颇有成就感? 当然,这样的记事本还比较粗糙, 们还需要做些工作,请看下一章。 第二章 美化程序界面 多数字处理软件都有工具栏和状态栏。工具栏和状态栏除了能美化 们的程序使其更具有专业性质外,还给用户带来操作上的便利。现在 们就来做一做这两样东西。 一.工具栏 (一)制作工具栏 单击“工程”-“部件”,选中MICROSOFT WINDOWS COMMON CONTROL 6.0并确定。这时, 们要用到的控件就出现在左边的工具栏上了。 要做工具栏,首先需要一个叫IMAGELIST的控件来装载图像。在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。图片可在C:\MICROSOFT VISUAL STUDIO\COMMON\GRAPHICS\BITMAPS\TLBR_W95下选择(这里假设你的VB安装在C盘下)。注意了:在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。如插入“新建”的图片, 们在“关键字”栏注明“NEW”。 图片有了,接下来在程序界面添加工具栏(TOOLBAR)。添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项: 1.“图像列表”:选择IMAGELIST1 2.“样式”:根据喜爱选择1-TRBSTANDARD或者2-TRBFLAT 继续点击“属性页”的“按钮”选项,插入若干按钮。按钮有多种样式,请根据需要设置。这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“NEW”(即IMAGELIST1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。 (二)编写工具栏的按钮代码 工具栏按钮的代码编辑很简单,可以按照下面的格式去编写: PRIVATE SUB TOOLBAR1_BUTTONCLICK(BYVAL BUTTON AS MSCOMCTLLIB.BUTTON) ON ERROR RESUME NEXT '出错处理 SELECT CASE BUTTON.KEY '按关键字选择 CASE "新建" MNUNEW_CLICK '等于菜单项“新建”被单击 CASE "打开" '等于菜单项“打开”被单击 MNUOPEN_CLICK '......(继续编写其它按钮的代码) END SELECT END SUB 完成后试运行一下 们的程序, 们发现,有了工具栏之后,程序变得漂亮多了,只是有一个问题:打开一个较长的文档后,编辑框的下拉滚动条向上的箭头不见了。原因是:工具条占用一定的空间。解决方法:将“设置编辑框的位置和大小”中的RICHTEXTBOX1.TOP = 20 和 RICHTEXTBOX1.HEIGHT = ME.SCALEHEIGHT - 40分别改为RICHTEXTBOX1.TOP = 380,RICHTEXTBOX1.HEIGHT = ME.SCALEHEIGHT - 400即可。 二.状态栏 (一)制作状态栏 状态栏的英文名字叫STATUSBAR,在窗体上添加它后会默认出现在窗体的最下方。用鼠标右键点击它,调出“属性页”对话框,单击“窗格”项,插入一些窗格,可以将各个窗格的“样式”设置为: 0-SBRTEXT 显示文本,需编写代码 1-SBRCAPS 显示大小写状态,无需编程 2-SBRNUM 显示NUMLOCK键开关状态,无需编程 3-SBRINS 显示INSERT键状态,无需编程 4-SBRSCR1 5-SBRTIME 显示时间,不编程时时间不会随系统时钟变化 6-SBRDATE 显示日期,无需编程 注意:加进状态栏后需将FORM_RESZE中的RICHTEXTBOX1.HEIGHT = ME.SCALEHEIGHT - 400改为RICHTEXTBOX1.HEIGHT = ME.SCALEHEIGHT - 600。 (二)状态栏根据其“样式”属性决定用不用编写代码(如上文所述)。下面举些例子,读者可以认真揣摩,从而达到举一反三的效果。 例一:用户选取了“新建”后,让第一个窗格显示:“目前状态:正在打开文件《……》”。请将下面代码写进“打开”菜单里面: STATUSBAR1.PANELS(1).TEXT = "目前状态:正在打开文件" & "《" &COMMONDIALOG1.FILETITLE & "》" 例二:让第三个窗格显示时间并让时间跟随系统时钟变化。 首先,给程序加一个TIMER控件,将其INTERVAL属性设为1000。然后: 在FORM_LOAD过程加入:STATUSBAR1.PANELS(1).TEXT = TIME;然后给TIMER控件编写代码: PRIVATE SUB TIMER1_TIMER() IF STATUSBAR1.PANELS(3).TEXT <> CSTR(TIME) THEN STATUSBAR1.PANELS(3).TEXT = TIME END IF END SUB 例三:当编辑框的文本发生变化时让第一个窗格显示:“正在编辑文档:文件名”。 PRIVATE SUB RICHTEXTBOX1_CHANG() STATUSBAR1.PANELS(1).TEXT = "正在编辑文档:" & COMMONDIALOG1.FILENAME END SUB 辛苦了那么久, 们现在已经拥有一个象模象样的记事本了。这个记事本由于用了RICHTEXT控件,理论上它能打开和编辑任意大的文档,使用起来的确比WINDOWS自带的记事本方便得多。当然,还有一些其它的功能需要添加和完善,这就靠你慢慢去完成了。 回答完毕!