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

用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.xdnf.cn/news/17390.html

相关文章:

  • 数据结构--哈希表与排序、选择算法
  • 力扣-53.最大子数组和
  • 库函数版独立按键用位运算方式实现(STC8)
  • 解决阿里云盘不能分享压缩包【7-zip工具】(详细)
  • Linux多线程——生产者消费者模型
  • C/C++二维数组创建内存分配
  • 大模型——部署体验gpt-oss-20b
  • 云原生时代的 Linux:容器、虚拟化与分布式的基石
  • 复杂路况误报率↓78%!陌讯轻量化模型在车辆违停识别的边缘计算优化​
  • 抖音AI分身:帮助每个抖音创作者,打造自己的AI分身
  • Kotlin 数据容器 - MutableList(MutableList 概述、MutableList 增删改查、MutableList 遍历元素)
  • STM32学习笔记5-TIM定时器-1
  • cuda算子--softmax算子与优化
  • 如何将视频转为GIF格式,3大视频转为GIF工具
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第八天(Vue框架及其安装)(完结篇) 重点 ! ! !
  • AWS 云小白学习指南 (一)
  • 生产管理ERP系统|物联及生产管理ERP系统|基于SprinBoot+vue的制造装备物联及生产管理ERP系统设计与实现(源码+数据库+文档)
  • 【网络自动化】利用Python脚本与计划任务,实现H3C/HPE设备配置无人值守备份
  • 综合项目记录:自动化备份全网服务器数据平台
  • 多级缓存架构:新品咖啡上线引发的数据库压力风暴与高并发实战化解方案
  • 时序数据库-涛思数据库
  • hive-日期拆分为多行
  • 力扣热题100------287.寻找重复数
  • LeetCode快乐数问题
  • CSS:BFC
  • OpenAI 最新开源模型 gpt-oss (Windows + Ollama/ubuntu)本地部署详细教程
  • 安全引导功能及ATF的启动过程(四)
  • 论文阅读:AAAI 2024 ExpeL: LLM Agents Are Experiential Learners
  • 要写新项目了,运行老Django项目找找记忆先
  • 什么是 401(k) 账户?