回 帖 发 新 帖 刷新版面

主题:[转帖]VFP通用无限级菜单及彩色菜单原理!

xinjie 发表于:2006-2-16 20:31:00 
[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就是指明是指定配色方案中的第几对配色! 

回复列表 (共15个回复)

11 楼

LZ 辛苦了,先喝杯水(自己倒啊!)

12 楼

顶一下,学习并收藏了.

13 楼

先顶后看

14 楼

先顶一下
    好思路,认真研究一下,我想应该加上执行的表单或程序,菜单权限锁定.这样会更适用

15 楼

不错,顶一下

我来回复

您尚未登录,请登录后再回复。点此登录或注册