当前位置: 首页 > news >正文

用browse实现菜单功能的方法

用browse实现菜单功能的方法

dbase或fox,特别是fox的菜单功能很强,但使用起来并不简单。所以在我之前的博文《dbaseIII或foxplus的简化的弹出菜单实现方式》中介绍了借助外部力量实现弹出菜单的功能,简单的目的是达到了,但:一是只能在dos或win31的msdos方式或者dosbox中运行;二是菜单有效的功能项数不能超过22项,对于更多项数功能的要求就有些捉襟见肘了。

早在1998年,当时在用foxpro25写一个用断面法或等高线法计算土石方工程量的程序,就遇到选择项数(如一级的“工程项目”数、二级的“断面”数)很多的情况,怎么解决呢?就是利用browse。

在dbaseIV中,browse的命令可以是:

browse freeze <> [field<>] nomenu noappend noedit nodelete noclear

在foxplus中,browse命令是:

browse freeze <> [field<>] nomenu noappend nomodify nodelete

两者之间有些差别,但不大,可以实现相同的功能。

我的做法是,在建立工程或断面时的browse菜单(这里姑且叫做“菜单”)是开放式的,可以增加、编辑、删除“工程项目”或“断面”;在“工程项目”信息确定后,要选择一个“工程项目”进行下一步操作时,这时的“工程项目”browse选单 (即菜单)除了“选中”这个逻辑字段外,其他都是不能修改的,即用“browse freeze 选中nomenu noappend nodelete”实现,当时设计时,“选中”字段既可以键盘操作修改逻辑值,也可用鼠标单击改变(在foxpro中)。

为简化起见,下面给出一个小例子:数据表名称为 menumain.dbf,其中有两个字段,分别为choose、menu_item,前者为逻辑型,后者为字符型,长度为8,menu_item字段的内容分别为:录入、编辑、查询、打印、帮助、退出,共6条记录。相应的菜单演示程序为:

clear

on escape

on error

set echo off

set talk off

set bell off

do while .t.

   sele 1

   use menumain

   defi window main from 5,25 to 15,55

   brow free choose noap node nome field choose,menu_item/20/r wind main

   go top

   loca all for choose

   job=menu_item

   repl all choose with .f.

      if trim(job)=[退出]

      exit

   else

      @ 20,38 say job

*  do &job..prg

   endif

enddo

sele 1

use

retu

(程序中直接假定用第2个字段值作为子程序名,程序在dbaseIV2.0中文版中调试通过)

可以看出,这个小例子演示的菜单的实现很简单。

还可以更简单吗?答案时肯定的。上面的方法设置了一个逻辑字段来判断用户的选择(准确地说,是最先的选项有效)。其实可以直接用当前记录号来确定用户的选择,因为在dbase或fox中,无论是browse,还是edit、change命令,当结束这些命令,关闭相关的屏幕时,记录号是不变的。由记录号得到用户的选择,就知道程序的下一步该做什么了 !

也就是说,在browse命令运行时,按几下上、下键,按Esc或Ctrl+W或Ctrl+Q,用户的选择就确定了......

http://www.lryc.cn/news/614283.html

相关文章:

  • 《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》
  • 一文可视化分析2025年6月计算机视觉顶刊IJCV前沿热点
  • 数据结构(16)排序(上)
  • 代理模式在C++中的实现及面向对象设计原则的满足
  • vscode无法跳转到定义引用
  • 以下是使用这款ePub编辑器将指定章节转换为TXT文本文档的操作方法
  • JAVA基础-NIO
  • flutter TLS protocol versions: (TLSv1.2, TLSv1.3)
  • 【数据结构】排序(sort) -- 计数排序
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • 软件包管理、缓存、自定义 YUM 源
  • Vulnhub drippingblues 靶场复现 详细攻略
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 自适应反步控制:理论与设计
  • 分布式微服务--GateWay的断言以及如何自定义一个断言
  • MySQL 配置性能优化赛:核心策略与实战技巧
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • 前端后端之争?JavaScript和Java的特性与应用场景解析
  • Microsoft Dynamics AX 性能优化解决方案
  • 用JOIN替代子查询的查询性能优化
  • 深入解析基于Zookeeper分布式锁在高并发场景下的性能优化实践指南
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • AI漫画翻译器-上传图片自动翻译,支持多语言
  • 分享超图提供的、很不错的WebGIS学习资源
  • 从安卓兼容性困境到腾讯Bugly的救赎:全链路崩溃监控解决方案-卓伊凡|bigniu
  • 什么是局放?局放在线智能传感器,敏锐洞察电气设备中的隐形故障!
  • bytearray和bytes
  • 进程管理、系统高负载、cpu超过800%等实战问题处理
  • 【Mybatis入门】配置Mybatis(IDEA)
  • scratch笔记和练习-第11课:穿越峡谷