标题:程序调用自定义类怎么提示mytoolbar未定义?
只看楼主
lgsh001
Rank: 1
等 级:新手上路
帖 子:64
专家分:3
注 册:2014-8-26
结帖率:58.33%
已结贴  问题点数:20 回复次数:9 
程序调用自定义类怎么提示mytoolbar未定义?
SET DELETED ON
 SET EXCLUSIVE OFF
 SET EXACT ON
 SET ANSI ON
 SET CENTURY ON
 SET DATE YMD
 SET SAFETY OFF
 SET HELP OFF
 SET TALK OFF
 SET ESCAPE OFF
 SET STATUS OFF
 SET STATUS BAR OFF
 SET MULTILOCKS ON
 SET NULLDISPLAY TO ''
 SET OPTIMIZE ON
 PUBLIC GUSERNO , GUSERNM , GADMIN
 SET PATH TO Data
 GADMIN = .F.
 GUSERNO = ''
 GUSERNM = ' '
 USE data\hy\data\lk exclusive IN 0
 DELETE all
 pack
 USE IN lk
 ON SHUTDOWN quitsystem()  
 DO FORM form\dl.scx
 READ EVENTS     
 DO FORM form\zh.scx WITH 'll.mpr'  
 READ EVENTS  
 SET CLASS TO mytoolbar
 _screen.AddObject('opentoolbar','mytoolbar')
  READ EVENTS
 
搜索更多相关主题的帖子: PUBLIC 
2015-05-12 17:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:6 
以下是引用lgsh001在2015-5-12 17:36:12的发言:
 SET CLASS TO mytoolbar
 _screen.AddObject('opentoolbar','mytoolbar')

mytoolbar是一个自定义类, 看看有无这两个文件(类库):
mytoolbar.vcx
mytoolbar.vct
类库中要有定义mytoolbar这个类,从 _screen.AddObject('opentoolbar','mytoolbar') 看,类名和类库名一样,是不是搞错了?
 SET CLASS TO mytoolbar 打开类库
 _screen.AddObject('opentoolbar','类库中的类名') 创建类实例。
2015-05-12 19:29
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:2 
可能缺少mytoolbar.vcx  mytoolbar.vct 文件
2015-05-12 20:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:6 
SET CLASS TO mytoolbar                            && 这里的mytoolbar是类库文件名
 _screen.AddObject('opentoolbar','mytoolbar')     && 这里的mytoolbar是类名

现在关键的问题是你写的类名是否跟类库文件名相同。类名在类定义的Name屬性中定义,类库文件名是你存盘的文件名,两者不是同一个东西。set class to的意思,是从指定文件名的文件中加载类定义到内存中,而一个类库文件可以储存多个类定义,不是每一个类都是与文件名相同的。AddObject()使用的是已经调入内存中的类集合中的某个类,那就靠前面的指令加载。

[ 本帖最后由 TonyDeng 于 2015-5-12 20:36 编辑 ]

授人以渔,不授人以鱼。
2015-05-12 20:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:6 
你这个启动代码有点陷阱呢。set exclusive off是默認系统以共享数据库为主,但马上就来一个独占并清空数据表,你确定这个操作必定成功吗?你清空了这个表,别的用户写进去的东西是你可以清的吗?何况,你清空的方式也啰嗦了,直接zap即可,無需先delete all再pack。通常,共享的数据库不做pack和zap之类的操作,delete记录即可,delete过的记录,用不用在你,但执行pack或zap可不是那么自由的,也没必要,那带来的低效比保留delete记录更甚——如果真要省空间,可以回收delete过的记录重用,不必物理删除。记住:物理删除(包括排序sort指令)消耗的资源很可怕,它至少要磁盘文件的三倍空间,而且还必须独占资源,此时你要关闭其他用户使用这个表才能操作成功,还要防掉电。

授人以渔,不授人以鱼。
2015-05-12 20:52
lgsh001
Rank: 1
等 级:新手上路
帖 子:64
专家分:3
注 册:2014-8-26
得分:0 
多谢版主们的厚爱!小生定要潜心学习。
2015-05-13 07:17
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
如果真要省空间,可以回收delete过的记录重用,不必物理删除??
怎么回收?怎么重用,来个列子?
2015-05-13 13:41
lgsh001
Rank: 1
等 级:新手上路
帖 子:64
专家分:3
注 册:2014-8-26
得分:0 
我修改了主程序,虽然调用了类,但类的标题栏总赋存着,请给予指教!
文档.rar (5.51 KB)

***********
CLEAR ALL
SET DELETED ON
 SET EXCLUSIVE OFF
 SET EXACT ON
 SET ANSI ON
 SET CENTURY ON
 SET DATE YMD
 SET SAFETY OFF
 SET HELP OFF
 SET TALK OFF
 SET ESCAPE OFF
 SET STATUS OFF
 SET STATUS BAR OFF
 SET MULTILOCKS ON
 SET NULLDISPLAY TO ''
 SET OPTIMIZE ON
 PUBLIC GUSERNO , GUSERNM , GADMIN
_SCREEN.BACKCOLOR=RGB(0,128,128)
_SCREEN.LEFT=-10000
_SCREEN.CONTROLBOX=.T.
_SCREEN.VISIBLE=.T.
_SCREEN.CLOSABLE=.T.
_SCREEN.MAXBUTTON=.T.
_SCREEN.MINBUTTON=.T.
_SCREEN.MOVABLE=.T.
DO FORM dl.SCX
READ EVENTS
PUBLIC ZBD AS OBJECT
DEACTIVATE WINDOW 'PROJECT MANAGER'
SET CLASSLIB TO MYTOOLBAR
_SCREEN.BACKCOLOR=RGB(0,128,128)
DO ll.mpr
DO FORM ZBD
_SCREEN.LEFT=0
_SCREEN.top=0
_SCREEN.CAPTION='统计管理系统' &&窗口标题
ZOOM WINDOW SCREEN MAX
@SROWS()-5,SCOLS()-52 SAY "作者:李更生  技术支持:QQ1442513151" FONT '宋体',11 STYLE 'T' COLOR R+/B
READ EVENTS
ON SHUTDOWN DO quitsystem
WITH _SCREEN
.LEFT=0
.TOP=0
.MOVABLE=.T.
ENDWITH









2015-05-13 18:01
lgsh001
Rank: 1
等 级:新手上路
帖 子:64
专家分:3
注 册:2014-8-26
得分:0 
已解决!OK
2015-05-14 04:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445196-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.336203 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved