| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 861 人关注过本帖
标题:请教是否能获取编辑框中某个指定文字的距离左侧和顶部的像素?
只看楼主 加入收藏
wxzd123
Rank: 2
等 级:论坛游民
帖 子:454
专家分:96
注 册:2012-9-6
收藏
得分:0 
谢谢csyx ,没有vfp代码示例



[此贴子已经被作者于2025-9-12 05:34编辑过]

3 天前 21:16
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:801
专家分:3205
注 册:2018-3-13
收藏
得分:0 
粘贴下列代码到 Edit1.click 事件中,运行时可以看到点击位置的字符和坐标位置(相对于表单客户区原点)
只要明白了 GetCaretPos 的作用,取第二个“节”字的坐标也就易如反掌

程序代码:
Declare Long GetCaretPos in win32api String @

pt = BinToC(0,'rs') + BinToC(0,'rs')
GetCaretPos(@ pt)
x = CToBin(Substr(pt,1,4), 'rs')
y = CToBin(Substr(pt,5,4), 'rs')

cc = Substr(This.Text, This.SelStart+1, 1)
Do case
Case IsLeadByte(cc)
    cc = ["] + Substr(This.Text, This.SelStart+1, 2) + ["]
Case Asc(cc) < 33
    cc = Textmerge('CHR(<<Asc(cc)>>)')
Otherwise
    cc = ["] + cc + ["]
EndCase
cc = Textmerge('char=<<cc>>,x=<<x>>,y=<<y>>')
Wait windows cc nowait noclear

这家伙很懒,啥也没留下
昨天 08:19
wxzd123
Rank: 2
等 级:论坛游民
帖 子:454
专家分:96
注 册:2012-9-6
收藏
得分:0 
以下是引用csyx在2025-9-13 08:19:39的发言:

粘贴下列代码到 Edit1.click 事件中,运行时可以看到点击位置的字符和坐标位置(相对于表单客户区原点)
只要明白了 GetCaretPos 的作用,取第二个“节”字的坐标也就易如反掌

Declare Long GetCaretPos in win32api String @

pt = BinToC(0,'rs') + BinToC(0,'rs')
GetCaretPos(@ pt)
x = CToBin(Substr(pt,1,4), 'rs')
y = CToBin(Substr(pt,5,4), 'rs')

cc = Substr(This.Text, This.SelStart+1, 1)
Do case
Case IsLeadByte(cc)
    cc = ["] + Substr(This.Text, This.SelStart+1, 2) + ["]
Case Asc(cc) < 33
    cc = Textmerge('CHR(<<Asc(cc)>>)')
Otherwise
    cc = ["] + cc + ["]
EndCase
cc = Textmerge('char=<<cc>>,x=<<x>>,y=<<y>>')
Wait windows cc nowait noclear

谢谢老师,这个太好了!
昨天 11:02
wxzd123
Rank: 2
等 级:论坛游民
帖 子:454
专家分:96
注 册:2012-9-6
收藏
得分:0 
再次请教csyx老师,如何把这段代码修改成:把编辑框的内容从头到尾把所有'_'的x,y坐标保存到表中?谢谢,辛苦了!
昨天 14:34
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10722
专家分:43300
注 册:2014-5-20
收藏
得分:0 
回复 5楼 wxzd123
是不是这效果?
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
of = CREATEOBJECT("form1")
of.show(1)
CLEAR ALL 
RETURN
DEFINE CLASS form1 as Form
    width       = 500
    height      = 400
    AllowOutput = .f.
    AutoCenter  = .t.
    FontSize    = 18
    word        = ""
    ADD OBJECT label1 as label WITH left= 50,top=300,width=50,height=28,fontsize=18,caption="填"
    ADD OBJECT label2 as label WITH left=110,top=300,width=50,height=28,fontsize=18,caption="空"
    ADD OBJECT label3 as label WITH left=170,top=300,width=50,height=28,fontsize=18,caption="选"
    ADD OBJECT label4 as label WITH left=230,top=300,width=50,height=28,fontsize=18,caption="择"
    PROCEDURE label1.click
        thisform.selWord(this)
    ENDPROC 
    PROCEDURE label2.click
        thisform.selWord(this) 
    ENDPROC 
    PROCEDURE label3.click
        thisform.selWord(this) 
    ENDPROC 
    PROCEDURE label4.click
        thisform.selWord(this) 
    ENDPROC 
    FUNCTION selWord(obj)
        this.word = obj.Caption 
        obj.ForeColor = 0x000000FF
        INKEY(0.1)
        obj.ForeColor = 0x00FF0000
    ENDFUNC 
    PROCEDURE init
        txt = "请先 _ 点击下面 _ 选择要填空的内容,然后 _ 再点击上面 _ 要填空的下划线 _ 的空位置"
        DIMENSION aLowLine[OCCURS("_",txt),2]
        lowline = 0
        this.CurrentX = 10
        this.CurrentY = 10
        FOR i=1 TO LENC(txt)
            word = SUBSTRC(txt, i, 1)
            IF word == "_"
                lowline = lowline + 1
                aLowLine[lowline,1] = this.CurrentX + this.TextWidth ("_")/2 
                aLowLine[lowline,2] = this.CurrentY + this.TextHeight("_")/2
            ENDIF 
            this.Print(word)
            IF this.CurrentX > this.Width - 50
                this.CurrentX = 10
                this.CurrentY = this.CurrentY + this.TextHeight(SUBSTRC(txt, i+1, 1)) + 10
            ENDIF
        ENDFOR
    ENDPROC 
    PROCEDURE click
        this.printf(this.word)
    ENDPROC
    FUNCTION printf(word)
        AMOUSEOBJ(arr)
        this.CurrentX = arr[3]-this.TextWidth (word)/2
        this.CurrentY = arr[4]-this.TextHeight(word)/2
        **可以判断当前点击的(x,y)与aLowLine数组保存的各"_"(x,y)是否有匹配才决定下一步。
        this.Print(word)
    ENDFUNC
ENDDEFINE
2 小时前
快速回复:请教是否能获取编辑框中某个指定文字的距离左侧和顶部的像素?
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.707861 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved