注册 登录
编程论坛 VFP论坛

VFP如何实现【即指即现】功能?

cluna2013 发布于 2018-06-21 12:17, 4265 次点击
请教各位,如何在软件开发中配上【即指即现】功能?即,当鼠标指向某个单词,屏幕上即显示出相关说明?
27 回复
#2
gs25367856782018-06-21 13:23
statusbartext
属性中设置
#3
厨师王德榜2018-06-21 14:16
假定你的文本在RichText中,以下分两种情况:
如果RichText中有被鼠标拖动选择的单词,则直接取这一部分送入字典模块,将返回的结果显示于一个TextBox中,
如果RichText中没有被选择的单词,则需要跟踪鼠标位置坐标(查一下API,这是常用API,不难找)
再根据坐标在RichText中前后搜索,直到遇到空格(因为文档中单词之间应该是空格分隔),
把取到的单词送入字典模块……
如果要实现金山词霸那样的效果,就不能用一个简单的TextBox来显示,需要做一个表单,把 播放器的OCX放进去。
#4
sdta2018-06-21 20:36
不知道楼主是在什么控件中把鼠标指向单词的。
#5
cluna20132018-06-21 23:16
回复 4楼 sdta
一个是文本框,还一个是标签。这个功能主要用来注释术语。

[此贴子已经被作者于2018-6-21 23:18编辑过]

#6
sdta2018-06-22 01:37
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN


DEFINE CLASS form1 AS form


    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"


    ADD OBJECT text1 AS textbox WITH ;
        Height = 20, ;
        Left = 72, ;
        Top = 60, ;
        Width = 100, ;
        Name = "Text1"


    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        Caption = "", ;
        Height = 16, ;
        Left = 192, ;
        Top = 60, ;
        Width = 2, ;
        Name = "Label1"


    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 120, ;
        Left = 72, ;
        Height = 25, ;
        Width = 60, ;
        Caption = "下一个", ;
        Name = "Command1"


    PROCEDURE Init
        create cursor tt (单词 c(10),中文 c(10))
        insert into tt values ("China","中国")
        insert into tt values ("people","人民")
        go top
        thisform.text1.value=单词
        thisform.label1.caption=中文
    ENDPROC


    PROCEDURE command1.Click
        select tt
        skip
        if not eof()
        else
            go top
        endif
        thisform.text1.value=单词
        thisform.label1.caption=中文
    ENDPROC


ENDDEFINE



[此贴子已经被作者于2018-6-22 01:39编辑过]

#7
cluna20132018-06-22 14:45
回复 5楼 cluna2013
忙了一上午,刚刚看到。谢谢!晚上抽空试试看。

[此贴子已经被作者于2018-6-22 14:46编辑过]

#8
丁春秋yxp2018-06-22 15:28
将表单的showtips设为真,然后在单词的tooltiptext属性上写上注释内容。表单运行时鼠标放到单词上注释内容就出来了。
#9
cluna20132018-06-22 20:53
以下是引用sdta在2018-6-22 01:37:34的发言:
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN
DEFINE CLASS form1 AS form
    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"
    ADD OBJECT text1 AS textbox WITH ;
        Height = 20, ;
        Left = 72, ;
        Top = 60, ;
        Width = 100, ;
        Name = "Text1"
    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        Caption = "", ;
        Height = 16, ;
        Left = 192, ;
        Top = 60, ;
        Width = 2, ;
        Name = "Label1"
    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 120, ;
        Left = 72, ;
        Height = 25, ;
        Width = 60, ;
        Caption = "下一个", ;
        Name = "Command1"
    PROCEDURE Init
        create cursor tt (单词 c(10),中文 c(10))
        insert into tt values ("China","中国")
        insert into tt values ("people","人民")
        go top
        thisform.text1.value=单词
        thisform.label1.caption=中文
    ENDPROC
    PROCEDURE command1.Click
        select tt
        skip
        if not eof()
        else
            go top
        endif
        thisform.text1.value=单词
        thisform.label1.caption=中文
    ENDPROC
ENDDEFINE

只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

我把这段代码放在表单中,结果是这样的。
#10
cluna20132018-06-22 20:57
回复 8楼 丁春秋yxp
我试了您提供的方法,可行。但是字太小,如何将其设定所需要的大小?
另外,我需要的注释,是一个变动的,也就是说,这个注释还必须能识别变化了的内容。是否可以通过DO CASE……ENDDO来实现这一功能?我接下来会试一试。

我已经试过了,可以用DO CASE……ENDDO来识别变化了的内容。现在问题是如何加大ToolTipText?

[此贴子已经被作者于2018-6-22 21:37编辑过]

#11
sdta2018-06-22 22:18
回复 9楼 cluna2013
建议楼主从VFP基础知识开始学,不要搞这么高难度的东东。
#12
gs25367856782018-06-23 06:47
同感,做一个DBF表,表中第一字段为楼主的英文单词,表中第二字段为注释
那可就方便多了。。。
#13
cluna20132018-06-23 08:55
回复 11楼 sdta
您说的不错。我一直是专注如何将某个想法编成计算机程序,碰到什么问题解决什么问题,从未系统学习过VFP。查了一下【帮助】,方知道您提供的代码不能用在表单上,改成.prg文件,立马就工作了。只是这段代码好像解决不了我的问题。
#14
cluna20132018-06-23 11:12
回复 8楼 丁春秋yxp
您是否有办法加大ToolTipText的窗口?
#15
mywisdom882018-06-23 12:34
回复 9楼 cluna2013
6楼的是程序,你把6楼的内容保存为 xxx.prg 文件, 然后运行
#16
吹水佬2018-06-23 15:08
以下是引用cluna2013在2018-6-21 12:17:50的发言:

请教各位,如何在软件开发中配上【即指即现】功能?即,当鼠标指向某个单词,屏幕上即显示出相关说明?

先把你的东西放上来看看,再说说鼠标指向哪里,显示出什么说明。
这样应该更容易解决问题
#17
gs25367856782018-06-23 16:57
吹水大师,一般的朋友只是来问问,不愿意上传作品的。
#18
cluna20132018-06-23 17:54
只有本站会员才能查看附件,请 登录

抱歉,原软件是一个关于六爻运算的程序,太大,不得不将需要改进的功能提取出来另建立程序
按照 8楼 丁春秋yxp的方法,也不是完全有效:数据变更之后,会给出错误信息。
此功能应该可以用在其他地方,供各位参考。谢谢!
#19
吹水佬2018-06-23 20:27
以下是引用gs2536785678在2018-6-23 16:57:21的发言:

吹水大师,一般的朋友只是来问问,不愿意上传作品的。

最好不要上传作品,作品要看明白也不容易,好难讨论。
用个简单示例,只要能反映出问题就可以。
#20
cluna20132018-06-23 20:35
回复 19楼 吹水佬
上传的这个程序,应该能看懂吧?该功能是想通过鼠标指向数据的同时,显示出其中所包含的天干地支,纳音内容。
我上传的这个程序,在RECNO()指向第一条时,显示的内容是正确的;但是随着RECNO()指向后面的数据,鼠标反馈的信息却不正确。
#21
吹水佬2018-06-23 22:33
简单参考示例
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#22
cluna20132018-06-24 05:42
回复 21楼 吹水佬
很感谢您提供帮助!遗憾的是文件下载打不开。结完贴也打不开。能否再发过?
#23
吹水佬2018-06-24 07:13
以下是引用cluna2013在2018-6-24 05:42:16的发言:

很感谢您提供帮助!遗憾的是文件下载打不开。结完贴也打不开。能否再发过?

刚试过,可以正常下载。
主要有两个文件:
表单:表单1
自定义类:myclass
参考用VFP的类浏览器导出的代码:全部放到test.prg运行
** test.prg
PUBLIC oform1
SET CLASSLIB TO c:\temp\即指即现\myclass.vcx ADDITIVE
oform1=NEWOBJECT("form1")
oform1.Show
RETURN


    **************************************************
*-- Form:         form1 (c:\temp\即指即现\表单1.scx)
*-- 父类:  form
*-- 基类:    form
*-- 时间戳:   06/23/18 10:30:07 PM
*
DEFINE CLASS form1 AS form


    Top = 11
    Left = 29
    Height = 308
    Width = 384
    ShowWindow = 2
    DoCreate = .T.
    ShowTips = .T.
    Caption = "Form1"
    Name = "Form1"


    ADD OBJECT list1 AS listbox WITH ;
        FontSize = 11, ;
        FirstElement = 1, ;
        Height = 144, ;
        Left = 12, ;
        NumberOfElements = 0, ;
        TabIndex = 3, ;
        Top = 144, ;
        Visible = .F., ;
        Width = 312, ;
        Name = "List1"


    ADD OBJECT mytextbox1 AS mytextbox WITH ;
        FontSize = 14, ;
        Height = 30, ;
        Left = 24, ;
        Top = 99, ;
        Width = 144, ;
        Name = "Mytextbox1"


    ADD OBJECT mytextbox2 AS mytextbox WITH ;
        FontSize = 14, ;
        Height = 30, ;
        Left = 24, ;
        Top = 60, ;
        Width = 144, ;
        Name = "Mytextbox2"


    ADD OBJECT mytextbox3 AS mytextbox WITH ;
        FontSize = 14, ;
        Height = 30, ;
        Left = 24, ;
        Top = 22, ;
        Width = 144, ;
        Name = "Mytextbox3"


    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        FontSize = 12, ;
        BorderStyle = 1, ;
        Caption = "Label1", ;
        Height = 20, ;
        Left = 216, ;
        Top = 36, ;
        Visible = .F., ;
        Width = 50, ;
        BackColor = RGB(233,234,191), ;
        Name = "Label1"


    PROCEDURE Load
        CREATE CURSOR tt (f1 I, f2 I, f3 I)
        FOR i=1 TO 10
            INSERT INTO tt VALUES (i, i*2, i*3)
        ENDFOR
    ENDPROC


    PROCEDURE Init
        WITH THISFORM.LIST1
            .COLUMNCOUNT=FCOUNT([tt])
            .COLUMNWIDTHS=[86,86,86]
            .ROWSOURCETYPE=6
            .ROWSOURCE=[tt.f3,f2,f1]
            .VISIBLE=.T.
            .REQUERY
        ENDWITH

        THISFORM.myTextbox3.ControlSource=[tt.f3]
        THISFORM.myTextbox2.ControlSource=[tt.f2]
        THISFORM.myTextbox1.ControlSource=[tt.f1]
    ENDPROC


    PROCEDURE list1.Click
        THISFORM.REFRESH
    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************


**************************************************
*-- 类:           mytextbox (c:\temp\即指即现\myclass.vcx)
*-- 父类:  textbox
*-- 基类:    textbox
*-- 时间戳:   06/23/18 10:25:01 PM
*
DEFINE CLASS mytextbox AS textbox

    BorderStyle = 0
    Height = 20
    ReadOnly = .T.
    Width = 100
    Name = "mytextbox"


    PROCEDURE MouseEnter
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        thisform.label1.top = nYCoord
        thisform.label1.left = nXCoord
        thisform.label1.Caption = ICASE(;
            This.Value%3==0, '甲子乙丑海中金',;
            This.Value%3==1, '甲寅乙卯大溪水',;
            This.Value%3==2, '甲辰乙巳覆灯火',"")
        thisform.label1.Visible = .T.
    ENDPROC


    PROCEDURE MouseLeave
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        thisform.label1.Visible = .F.
    ENDPROC


ENDDEFINE
*
*-- EndDefine: mytextbox
**************************************************


#24
cluna20132018-06-24 08:55
回复 22楼 cluna2013
是可以下载,但是打不开。
只有本站会员才能查看附件,请 登录
能否请您重新打包发过来?毕竟看现成的程序掌握起来更快。

[此贴子已经被作者于2018-6-24 08:57编辑过]

#25
吹水佬2018-06-24 10:32
回复 24楼 cluna2013
可能是解压工具软件不兼容或版本低
#26
cluna20132018-06-24 10:56
回复 25楼 吹水佬
只有本站会员才能查看附件,请 登录
换了一个解压缩软件,仍然打不开啊?
#27
吹水佬2018-06-24 15:07
回复 26楼 cluna2013
用 WinRAR v5.5 打包的,找个v5.5以上版本的WinRAR肯定可以吧。
也可以参考23楼的代码,自己写个表单和封装一个textbox类。主要代码就几行,顶多也就花几分钟。
#28
cluna20132018-06-24 19:34
回复 27楼 吹水佬
按照您说的安装新版本下载软件,果然打开了。您的东西正是我所要的。接下来我会去消化这个编程思路——不好意思,看教科书没有看程序来得快!
非常感谢!
1