主题:[转帖]VFP通用无限级菜单及彩色菜单原理!
[url]http://www.springood.com/boke.asp?xinjie.showtopic.13.html[/url]
****************************************
一、通用菜单代码模型,正在改进,这里是基本原理
表结构:
字段 字段名 类型 宽度 小数位 索引 排序 Nulls 下一个 步长
1 菜单编号 字符型 10 是
2 菜单标题 字符型 10 是
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(父菜单标题)+' ACTIVATE 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 ACTIVATE 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就是指明是指定配色方案中的第几对配色!