编辑VFP菜单常见问题的解决方法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编辑VFP菜单常见问题的解决方法--编程方法实现
2006-12-30 01:19
用微软的数据库开发工具VFP开发一些常见的应用系统,其中,编制功能完善的选单栏是VFP 应用开发中最常见的任务之一。

功能完善的选单栏是系统界面的重要组成部分,是应用程序设计是否友好的一个重要体现。

编辑选单中常见的问题有:设置访问键、分隔符、快捷键、标记、失效状态等,如图1所示。

下面笔者将介绍它们在VFP中的实现方法。

1.给选单定义访问键
访问键可使系统使用者用键盘操作选单中的命令。

要想给选单添加访问键,在选单编辑过程中给选单名称后加“(\<F)”就可以了,注意“F”是根据需要填写的,如图2所示。

2.给选单命令定义快捷键及添加提示信息
快捷键可完善选单的功能,提高系统操作时的速度。

提示信息使得系统使用人员更快地了解选单功能。

要想给选单项定义,可在选单编辑过程中,单击“选项”下的按钮,将弹出图3所示的对话框,在提示处按下要定义的键就可以了。

要添加提示信息则在其中的“信息(G):”右侧的框中填入要提示的信息并用字符串引号引起来即可。

3.给选项打或去掉“√”标记
mrkbar()是判断选单是否被打标记的一个函数,若已选返回值为真,否则为假。

配合使用命令setmarkof可把选单项打上或去掉标记。

4.给选单加分隔符
分隔线可增强选单的可读性,要想实现图1所示的加分隔线的效果,只要在选单编辑过程中给“选单名称”项中加入“\-”符号即可,如图2所示。

5.让某一个选单标题或选项暂时失效并恢复
在程序运行过程中有时需要让某一个选单暂时失效,失效后需要时还能恢复,实现方法有两种:
(1)使用命令setskipof
使图1中“文件”下的第二项暂时失效的命令为:
setskipofbar2of文件f.t.
(2)使用命令releasepopup
图1普通选单各部分名称
6.给选单添加系统选单选项
图2选单设计器
在VFP6.0中有许多现成的系统选单选项供开发者选用,使用它们可丰富选单的功能,从而完善系统的功能。

图3选单选项的快捷键设置
添加方法是在选单编辑时单击“插入栏…”按钮,就会弹出图4所示的对话框,在其中选择需要的系统选单选项即可。

VFP通用无限级菜单及彩色菜单原理!【转】
一、通用菜单代码模型,正在改进,这里是基本原理
表结构:
字段字段名类型宽度小数位索引排序Nulls 下一个步长
1 菜单编号字符型10 是
2 菜单标题字符型是
3 菜单标题文本字符型18 否
4 父菜单标题字符型10 是
5 下级逻辑型 1
菜单代码:
DEFINE MENU _mymenu
USE menu
SCAN
IF LEN(ALLTRIM(菜单编号))#0 .or. LEN(ALLTRIM(菜单编号))#.null.
IF LEN(ALLTRIM(父菜单标题))#0.or.len(alltrim(父菜单标题))#.null.
d='DEFINE BAR '+ALLTRIM(菜单编号)+' OF '+ALLTRIM(父菜单标题)+' PROMPT '+'"'+ALLTRIM(菜单标题文本)+'"'
&d
IF 下级=.t.
e='on bar '+ALLTRIM(菜单编号)+' of '+ALLTRIM(父菜单标题)+' ACTIVA TE POPUP '+ALLTRIM(菜单标题)
&e
f='DEFINE POPUP '+ALLTRIM(菜单标题)+' MARGIN RELATIVE'
&f
ENDIF
ELSE
e='DEFINE POPUP '+ALLTRIM(菜单标题文本)
&e
ENDIF
ELSE &&第1条记录
a='DEFINE PAD '+ALLTRIM(菜单标题)+' OF _mymenu PROMPT '+'"'+ALLTRIM(菜单标题文本)+'"'+' COLOR SCHEME 3'
&a
IF 下级=.t.
b='ON PAD '+alltrim(菜单标题)+' OF _mymenu ACTIV ATE POPUP '+alltrim(菜单标题)
&b
c='DEFINE POPUP '+ALLTRIM(菜单标题)+' MARGIN RELATIVE SHADOW'
&c
ENDIF
ENDIF
ENDSCAN
activate menu _mymenu nowait
*****************************************
二、更改VFP菜单背景颜色
更改菜单的颜色,曾经在一个软件中见到,好象是《唐试三百首》,用VFP做的。

书到用时方恨少啊,当年没有仔细琢磨,现在却是个坎。

看了很多的关于VFP的资料,对于配色方案?#93;仅仅是寥寥数语,没有更深刻的解释。

昨天在书店买了本书,仅有一个例子,更改快捷菜单颜色的。

仔细琢磨了一下,有以下体会:
对于VFP的菜单,如果用命令来建立的话,有一个子句:[Color Scheme nSchemeNumber | COLOR ColorPairList] ,而这个子句是什么意思呢?经翻译后的VFP帮助文件解释,是这样的:“Color Scheme nSchemeNumber :为单个菜单栏指定颜色。

COLOR ColorPairList:为单个菜单栏指定颜色。

默认情况下,菜单项的颜色由当前颜色集中配色方案2 决定。


这里,Scheme nSchemeNumber 和ColorPairList又是什么意思呢?经查询帮助,得到以下的解释:“Scheme nSchemeNumber 是VFP中配色方案的编号,在Visual FoxPro 中,配色方案13 到15 留作内部使用。

请不要使用这些配色方案。

配色方案中颜色对数目,最多为10 对。

”这些,就是我在VFP帮助文件中得到的所有有用的信息。

买来书上的例子是这样解决的:在表单的LOAD事件中利用SET COLOR OF SCHEME 命令定义配色方案,表单卸载后,恢复系统默认的配色方案。

在随书光盘中的示例中有明确的解释,原文如下:
* /菜单失效前景色和背景色\ /菜单前景色和背景色\ /菜单边线颜色\ /控制提示前景和背景\ /选中项的前景色和背景色\
set color of scheme 4 to rgb(0,0,0,83,169,255),rgb(123,0,255,8,55,255),rgb(110,110,192,0,98,177),rgb(252,222,26,83,169,255),,rgb(0,255, 255,0,98,177)
这个代码展开看可能更容易理解,解释如下:VFP9系统中配色方案从1到12是这样的:
1、用户窗口;
2、用户菜单;
3、菜单栏;
4、弹出式菜单;
5、对话框;
6、弹出式对话框;
7、警告;
8、窗口;
9、弹出窗口;
10、浏览;
11、报表;
12、弹出式警告
而这个命令,就是定义第4个配色方案中的1、2、3、4、6颜色对的配色,分别对应:菜单失效前景色和背景色、菜单前景色和背景色、菜单边线颜色、控制提示前景和背景、选中项的前景色和背景色。

到这里,应该比较明白了吧!
Scheme nSchemeNumber 中的nSchemeNumber就是指配色方案的编号,而COLOR ColorPairList中的ColorPairList就是指明是指定配色方案中的第几对配色!
菜单中调用工具栏按钮的单击事件:
ON SELECTION POPUP 菜单名表单名mandl.click()
如何使工具条按钮与菜单选择保持协调一致
一个协调工具条按钮和菜单选择的简单的方法是:在菜单的Skip子句中使用Enabled属性。

例如,你有一个名为oToolbar的工具条,其上有一个新建命令按钮叫cmdAdd同时你有一个记录菜单其中有
则新建菜单选项仅当oToolBar.cmdAdd可用时才是可用的。

记住Set Skip当它的值为.T.时,废止菜单选项,所以在上例中的NOT 操作符(!)或"= .F."是必不可少的。

if this.caption='屏蔽菜单项'
this.caption='激活屏蔽的菜单项'
bel1.caption='注意:[表单事例]中的[表单2]已屏蔽'
set skip of bar 2 of 表单事例 .t.
else
this.caption='屏蔽菜单项'
bel1.caption='注意:[表单事例]中的[表单2]已激活'
set skip of bar 2 of 表单事例 .f.
endi
[原创]在VFP中使用菜单和工具栏
一、前言
VFP对窗体定义有点复杂,是程序设计过程中始终要注意的问题,而菜单和工具栏看似是独立的问题,但却和窗体的类型密切相关,因此,掌握VFP中各种窗体类型特点是很重要的。

VFP的窗体有VFP主窗体、屏幕、顶层表单、顶层表单的子窗体四种。

VFP主窗体:内存变量引用是_screen,VFP的主窗体,默认情况下,你创建的窗体是位于VFP主窗体之内,即VFP的主窗体是一切屏幕窗体的父窗体。

默认情况下,菜单和工具栏是位于主窗体中的。

顶层表单:帮助中称为SDI单文档界面,脱离了VFP的主窗体,等同于VB中的窗体,可以在其上实现菜单和工具栏的添加。

屏幕:VFP主窗体之内的窗体。

不能在屏幕上实现菜单和工具栏。

顶层表单的子窗体:只能位于顶层表单中,特点同屏幕,也不能实现菜单和工具栏。

综上所述,实现菜单和工具栏的位置有VFP主窗体、顶层表单这两个地方。

二、在VFP中创建菜单
对于一个应用程序,菜单的作用是不可替代的。

拥有一个功能完善、外观酷爽的菜单是每一名程序员的追求。

菜单有主菜单和快捷菜单(右键菜单)两种,以下以讨论主菜单为主。

在VFP中,创建菜单有两条途径,一是通过菜单设计器来可视化的设计,二是用程序语言直接定义。

第一种方式的特点是方便,可以随时预览效果,第二种方式的特点是灵活、高效。

下面分述如何实现这两种方法
1、菜单设计器:具体使用方法可参照VFP6.0中文版帮助――使用Visual Foxpro――程序员指南―――第十一章设计菜单与工具栏。

重点:默认情况下,设计的菜单是用于VFP主窗口中的,当你要创建顶层表单中的菜单时,打开“菜单设计器”,从“显示”菜单中选择“常规选项”,并选择“顶层表单”。

若要将SDI 菜单附加到表单中,在“表单设计器”中,将表单的ShowWindow 属性设置为“2 –作为顶层表单”。

在表单的Init 事件中,调用该菜单。

例如,假设菜单名为SDIMENU.mpr,添加此代码:DO SDIMENU.mpr WITH THIS,.T.
如果是将主菜单添加到VfP主窗口中,在主程序中,添加此代码:do menu.mpr.
在设计器中也可以插入系统菜单项,可以修改其名称、图片等等。

只要在菜单项选择“子菜单”,然后创建,再“insert Bar…”,从中选择一个即可。

用菜单设计器设计快捷菜单时,一般都要插入一些系统菜单项,比如:编辑类的撤销、重做、剪切等。

为了和主菜单中的项协调,必须在菜单设计器中某一菜单项的option的skip of中输入:SKPBAR("编辑",_med_undo),其中“编辑”是指菜单栏,_med_undo是系统内部菜单名。

这样,主菜单和快捷菜单就协调一致了,可以使用的选项都是相同的。

2、程序语言设计:可以把系统菜单压入堆栈,然后弹出。

也可以自己自定义。

也可以二者混合。

单项”of 菜单栏,来删除一些不需要的子菜单项。

示例如下:
** 只保留系统菜单中的“编辑”菜单
SET SYSMENU TO _medit
** 删除以下“编辑”菜单中的子项,如_MED_PSTLK等。

只保留了撤销、重做、剪切、复制、粘贴、全选、清除等。

RELEASE PAD _MED_PSTLK OF _medit
RELEASE PAD _MED_SP300 OF _medit
RELEASE PAD _MED_FIND OF _medit
RELEASE PAD _MED_REPL OF _medit
RELEASE PAD _MED_GOTO OF _medit
RELEASE PAD _MED_SP400 OF _medit
RELEASE PAD _MED_LISTMEMBERS OF _medit
RELEASE PAD _MED_QUICKINFO OF _medit
RELEASE PAD _MED_SP500 OF _medit
RELEASE PAD _MED_BKMKS OF _medit
RELEASE PAD _MED_SP600 OF _medit
RELEASE PAD _MED_INSOB OF _medit
RELEASE PAD _MED_OBJ OF _medit
RELEASE PAD _MED_LINK OF _medit
RELEASE PAD _MED_SP700 OF _medit
RELEASE PAD _MED_PREF OF _medit
使一个用户自定义菜单栏失效,并将它从屏幕上移去,但并不从内存中删除菜单栏的定义。

使用命令DEACTIV ATE MENU MenuName1 [, MenuName2 ...] | ALL。

创建菜单使用命令步骤如下:
(a)在用户自定义菜单栏或Visual FoxPro 系统菜单栏上创建一个菜单标题。

DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
(b)指定菜单或菜单栏,当选择特定的菜单标题时激活它。

ON PAD MenuTitleName OF MenuBarName1 [ACTIVA TE POPUP MenuName | ACTIV A TE MENU MenuBarName2
(c)创建菜单。

DEFINE POPUP MenuName [FROM nRow1, nColumn1] [TO nRow2, nColumn2]
(d)在DEFINE POPUP 创建的菜单中创建一个菜单项。

DEFINE BAR nMenuItemNumber1 | SystemItemName OF MenuName
未完待续。

相关文档
最新文档