📄 readme.txt
字号:
oApp = CREATEOBJECT("Application")
此对象创建时发生以下行为:
(1) 产生 Init 事件,与此事件关联的代码创建一个环境对象并保存其他环境设置:
THIS.AddObject("oEnvironment","Environment")
THIS.oEnvironment.Set()
(2) 用 GetPrivString 读取 IT.INI 文件中的默认节,以此确定初始显示屏是否显示,
(3) 如果已在 .INI 中指定,则显示IntroForm (初始显示屏)
(4) 调用此类的Login() 方法
(5) Login() 调用此类的方法 DoFromRetVal()
(6) DoFormRetVal() 从 Login 中获取参数
(7) 在用户登录时,返回用户的访问级别,并作为应用程序对象的 cUserLevel 属性保存。
6. 调用本应用程序对象中的 Do() 方法:
oApp.Do()
在方法 Do() 中的代码作如下操作:
THIS.DoMenu()
过程文件
UTILITY.PRG是IT的过程文件,其中包含以下过程及函数:
IsTag() 接收一个索引名和一个别名(可选)作为参数,如果索引名在别名中存在则回 .T. 如果未传递别名就使用当前工作区
FormIsObject() 如果当前激活的表单的基类是"Form",且它的类型是对象型则返回 .T. .
ToolBarEnabled() 返回 Toolbar 对象的值
OnShutdown() 系统关闭时,通知用户.
TOPY() 将中文串转换成相应的拼音串
DOLLAR() 将一个数值型的数据转换为中文的大写金额
五. 技术说明
类 Login 的说明:
隐藏登录口令可以通过设置口令文本框的 PasswordChar 属性为星号" * "实现。
它包含的自定义属性可以让用户指定:
1. 存贮口令的表(cTable)
2. 存贮用户名的字段(cFieldName)
3. 存贮用户口令的字段(cPassword)
4. 搜索表的标记名(cTagName)
此表单的 Refresh() 方法在下拉式列表的InteractiveChange 事件代码中调用,Refresh() 方法搜索 cTable 指定的表以便重定位记录指针。
方法 GetUserLevel() 在“确定”按钮的 Click 事件代码中调用,从 User_Level 表中返回员工的用户级别,此表单的返回值(存贮在属性 uRetVal 中)是一个含Employee_ID(员工标识号)和用户级别的字符串。
GENERAL.VCX 中 Application 类的 Login() 方法代码调用 DoFormRetVal(),并将返回值存入局部字符变量,此变量经分析后可设置应用程序属性 cEmployeeID 和 cUserLevel。
该类的 Init 事件代码对员工列表进行填充,生成一个 SQL SELECT 语句并将它指定给组合框的 RowSource 属性,然后调用此组合框的 Requery()方法执行此查询。
LOCAL lcFieldName
lcFieldName = THISFORM.cFieldName
THISFORM.cboName.RowSource = "SELECT " + ;
lcFieldName + ;
" FROM " + THIS.cTable + ;
" ORDER BY " + lcFieldName + ;
" INTO CURSOR cNames"
THISFORM.cboName.Requery()
每次从下拉式列表中选定一个员工时,便调用此表单的Refresh() 事件方法。此事件的代码搜索表单中 cTable属性所指定的表以便重定位记录指针,这样表单的其它内容便可以填入了。
类 IntroForm 的说明:
启动时显示介绍表单,使用 INI 文件是一项保存应用程序设置的简便技术。INI 易用 Windows API 函数创建和维护, 当用户改变了“启动时显示此表单”复选框的设置时, 此值即被写到IT.INI 文件[Defaults] 节中的ShowIntroForm 设置中, 0 表示此介绍表单在后续会话期内将不显示。此值在 GENERAL.VCX 中 Application 类的 Init 事件代码中被检查。
MAIN.PRG 中的 DECLARE 语句允许应用程序直接使用Windows API 的函数,就象使用VFP 语言一样
DECLARE INTEGER GetPrivateProfileString IN Win32API AS GetPrivStr String cSection, ;
String cKey, String cDefault,String @cBuffer, Integer nBufferSize, String cINIFile
DECLARE INTEGER WritePrivateProfileString IN ;
Win32API AS WritePrivStr String cSection, String cKey, String cValue,String cINIFile
介绍表单是 BASECTRL.VCX 中 IntroForm 类的一个实例, IntroForm 类则是 BASECTRL.VCX 中itFormRetVal 的一个子类, 其中 itFormRetVal是所有返回值的表单的父类。 清除"启动时显示此表单" 复选框可以在每一次运行IT时不显示此表单。设置表单的 Picture 属性为包含在 IT日志中的位图文件名可确定此表单上的图片, 表单上的文本使用三个标签控制, 它们的 BackStyle 属性都设为 0-Transparent 。表单底部的三个命令按钮允许您继续运行 IT 应用程序(继续), 或退回到命令窗口(退出), 或激活一个表单(幕后内容)。“继续”和“退出”命令按钮的Click() 事件方法代码中, 表单的 uRetValue 属性和 Visible 属性均设为.F., 此表单的 uRetValue 属性存贮一个整数, 它向调用程序表明按了哪一个按钮。
“关于”表单的说明:
BASECTRL.VCX 中的 AboutBox 在事件 Init 中接收参数作为标题文本和徽标位图,此类使用 API 从 Windows3.x 的 WIN.INI 中,或其它系统注册资源中提取信息,并显示用户系统的有关信息。BASECTRL.VCX 中的 IntroForm 是一个初始显示屏,此类中 chkShowAtStartUp 控制的 Click 事件代码将一个值写到 IT.INI 文件,指定此显示屏在以后运行IT时是否显示。
AboutForm 类是一个可重用类,用来显示有关应用程序的信息,并可调用 Windows API 显示环境信息。此程序首先从 Windows 目录下 WIN.INI 文件的“MS USERINFO”节中读取默认的用户名和公司名,然后,从WIN.INI 文件中的“MICROSOFT SYSTEM INFO”节中读取一个文件名,此文件名即为用户单击表单上的“系统信息”按钮时要运行的程序名。对于 Windows 95 和Windows NT,可从系统注册数据库中提取相同的信息。
“修改口令”表单的说明:
“修改口令”表单是基于 BASECTRL.VCX 中 itBaseForm的一模式表单,用于修改员工在 Employee 表中的口令,提示文本框显示了当前员工的口令,所以您不必记它。当您键入旧口令时,它由 InteractiveChange 事件代码按照属性 THISFORM.cOldPassword 中的内容一个字符对一个字符地比较,此属性在表单的 Load 事件代码中用当前注册的员工的口令初始化,如果旧的口令正确,“输入新口令”和“确认新口令”文本框将被启用。
启用新口令和确认新口令文本框在表单的 Load 事件代码中,员工的旧口令保存在表单的属性 cOldPassword 中, InteractiveChange 事件代码对这个值和用户现在在此文本框中键入的口令进行比较,当两口令匹配时,“新口令”和“确认”文本框的 Enabled 属性就被设置为 .T.。
因为“确定”按钮的 Default 属性设置为 .T.,所以只要用户在表单中按回车,此按钮的 Click 事件代码就将执行。“确定”按钮的 Click 事件代码将调用表单的自定义方法 Validate()。
Validate() 自定义方法确保:
1. 原口令已键入
2. 已键入了一个新的口令
3. “确认新口令”文本框的值与“新口令”文本框中的值相等
此表单的 Load() 事件代码在 Employee 表中寻找当前员工的标识号,它存贮在全局对象 Application 的一个属性中( oApp.cEmployeeID),员工的旧口令保存在表单的属性 cOldPassword 中。然后选定表 Employee 。此表单使用一个私有工作期以避免与其他表的潜在冲突,这个目标可由设计时设置属性 DataSession 为2-Private Data Session 完成。
“药品”表单的说明:
“药品”表单维护所有产品目录,它由 BASECTRL.VCX 中的itMaintForm 类创建,此表单的大部分功能在itMaintForm 类及其父类 itBaseForm 中定义。
“员工”表单的说明:
“员工”表单维护所有员工信息,此表单的父类是BASECTRL.VCX 中的 itMaintForm ,此表单的大部分功能在itMainForm 类及其父类 itBaseForm中定义。当用户添加一个新员工时,默认的口令为“IT”,此值在表定义时指定为 Password (口令) 字段的默认值。必须以此新员工的身份登录修改此口令。注意,当此应用程序运行时,如果当前记录是当前登录员工的信息,则此表单的 Refresh() 事件代码将表单的IAllowDelete 属性设置为 .F.,废止“文件”菜单中的“删除”菜单项。
“供货商”表单的说明:
“供货商”表单维护所有供货商信息, 其父类是 BASECTRL.VCX 中的 itMaintForm 类, 此表单的大部分功能在 itMaintForm 类或其父类 itBaseForm 中定义。
文件 MYAPP.H 的说明:
在包含文件 MYAPP.H 中定义了三个系统最常使用的常量:
#DEFINE INIFILE "IT.INI"
#DEFINE APP_LOC "药品销售管理"
#DEFINE INTRO_LOC " 使用药品销售管理系统,你可以方便地管理,查询,统计,打印你在药品销售过程中的各种数据......"
之所以定义这三个常量,是考虑到用户有可能要将该系统进行扩充和修改,生成自己的管理系统。因此应用程序的标题和说明必须要让用户能够定制。
类 BASECTRL 的说明:
BASECTRL 类库包含了本应用程序中用到的 VFP 每一个基类的子类,这些子类定义在一文件中可以让应用程序有一个标准的视觉感受,并且在必要时很容易进行调整。例如,本示例程序中,只需修改 itTextBox 类中的属性FontSize 就可以修改整个程序的字体大小,程序中基于itTextBox 类的所有文本框控制会立即继承这一修改。以下是BASECTRL 类库中的各子类的说明
==============================
it3dShape
it3dShape 是形状控制的类,主要用于强调或封装一个表单的部件。
属性设置:
--------------------------
SpecialEffect = 0-3D
**************************
itBaseForm
itBaseForm 是 IT 程序中大部分表单的父类。
属性设置:
--------------------------
AutoCenter = .T.
BackColor = (128,128,128)
BorderStyle = 2-Double wide
BufferMode = 2-Optimistic
FontSize = 8
MDIForm = .T.
MaxButton = .F.
MinButton = .F.
自定义属性:
---------------------------
aerrormsg[3] = 错误信息数组。这种机制将允许您在父类中编写一个通用的错误处理代码, 并在每一个子类中自
定义错误信息, 以下的默认值就定义在特定表单的 Init事件代码中:
aerrormsg[1] = "插入触发器失败!"
aerrormsg[2] = "更新触发器失败!"
aerrormsg[3] = "删除触发器失败!"
cToolBar: 表单运行时存储要运行的工具栏的名称。
lAllowEdits: 是否可以编辑当前记录。
lAllowDelete: 是否可以删除当前记录。
lAllowNew: 是否允许用户添加新记录。
与事件相联的功能:
--------------------------------------------------
Init:
1. 恢复以前窗口的位置。
2. 将表单的标题添加到菜单。
3. 显示定位工具栏。
4. 初始化自定义错误信息数组, aerrormsg[ ]。
Activate:
1. 选定表单数据环境中 InitialSelectedAlias 属性所
指定的别名 。
2. 刷新定位工具栏。
3. 刷新菜单。
4. 设置状态栏的消息为表单的 Caption 属性。
Error: 定义所有表单的通用错误处理代码。
Destroy:
1. 从菜单中移去表单的标题。
2. 在IT.INI 中保存窗口的位置。
QueryUnload: 检查数据是否已修改, 如有必要, 提示用户保存所作修改。
Unload: 清除状态行。
自定义方法:
-------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -