标题:分享五,分割条控件
只看楼主
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:2 
以下是引用laowan001在2021-12-15 09:58:16的发言:

自己用的分割条控件,分享出来,大家指正
说明在附件的demo里

十分感谢分享源码!做的很好。

如果两边控件数量多,不够用了,可以这样:
this.dividex1.controlright1 = this.grid1
this.dividex1.controlright2 = this.grid2
不用“controlright1”“controlright2”2个属性,用一个“controlright”,赋值时:“this.grid1|this.grid2|this.grid3”

类“dividex.Refresh”中
m._控件数 = GETWORDCOUNT(ALLTRIM(THIS.controlright), "|")
    FOR m._i = 1 TO m._控件数
        m._控件名 = GETWORDNUM(ALLTRIM(THIS.controlright), m._i, "|")

这样左右可以放很多控件了。以后做类似不确定控件数量的、日后有可能增加控件数量的模块儿时,尽量不要限制,做成循环。
2021-12-17 19:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用laowan001在2021-12-15 13:21:37的发言:

抱歉,没做上下分割条,如果需要的话,可自行修改,道理都是一样的
实际应用中,有些表字段较多,查看的时候受控件宽度限制,所以做了这个,目前还没感觉上下分割有太大的需求

感谢分享
思路很好,有左右必会有上下。从无到有,从粗到精,编程本来就是这样,无需太在乎左右上下的目光。
我就当分割容器用,只处理被分割的容器,其他放在容器里任由发挥。
2021-12-17 20:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用cssnet在2021-12-17 17:40:01的发言:

感谢无私分享!
抱歉,这个控件我压根就没必要去试!不过我可以提一个挺极端的问题,来“刁难”楼主:
您试试,左边放一个Richtextbox(或别的什么ActiveX控件),右边再放一个Richtextbox(或别的什么ActiveX控件),然后用您精心设计的这一个“分割条”控件去分割它们。
——我敢打赌,您一定会挺失落的!

所谓的分割只是调整控件的大小位置,ActiveX控件也应该无问题
2021-12-17 20:30
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用吹水佬在2021-12-17 20:30:25的发言:
所谓的分割只是调整控件的大小位置,ActiveX控件也应该无问题


因我们好多年前做过“分割条”控件,故而对于它的局限性有一些切身体会与了解。
其实并非“刁难”——本来就特意打了双引号,纯属开个小小玩笑,一认真你就输啦!——VFP的物件,是压不住ActiveX控件的;企图在ActiveX控件上方拖动分割条,你会发觉,只要一拖就被ActiveX控件遮挡住了。
文字表述半天,真没必要;其实你随便试一下就清楚啦。
2021-12-17 20:48
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 18楼 cssnet
既然“压根就没必要去试”,那又何来感谢呢?!压根就没必要感谢,您说是吧?!

我做的东东并不完美,只想用着方便就好,不能用的地方不用就是了,因为,如果不做这个控件,连现在能用的地方都没的用了
其实,我是喜欢与别人争论一些技术问题,各抒己见,百家争鸣,最后殊途同归,共同提高,挺好的。

这个控件用了很久,一直很满意,从来没有“失落”过,让您失望了,真是对不住
2021-12-17 21:09
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 21楼 kangss
感谢提示,非常好的思路,按您的提示确实可以不受限制了。

从实际应用角度来说,屏幕大小是有限的,左右两侧放的控件其实也是有限的,如果一侧上下控件多了,一个个小窄条,个人感觉并不美观,目前我的应用中多数都是每侧只有一到两个控件,个别有多于两个的时候,我会在其中一个受控的控件上的resize里把多出来的联动起来,其实也可以在控件中增加第3个或更多个,只是太少用到,就没做改动。

再次感谢提示!
2021-12-17 21:23
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
其实仅仅是提醒你试一下ActiveX控件而已。
想多了,年轻人。
不妨拿你的话回赠你:

你试都没试,无必要动怒。

事实上,“分割条”控件,我们一直未能找到完美的解决方案。
能想到的可能有效的方法是:

做一个无标题栏、无一切内容的光秃秃的“瘦长条表单”,拿它来取代你现在精心设计的“分割条”控件。
因为置顶的表单,才有机会压住ActiveX控件。

然而,真要具体实现起来,有些麻烦,主要是:
这个所谓的this.LeftObj和this.RightObj,与mySpliter1自身,并不处在同一容器内,而必然是分属于两个不同的表单,引用起来就有些啰里啰嗦的。
2021-12-17 21:29
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 27楼 cssnet
应该是我没说清楚,能用的地方就用,不能用的地方不用就是了
我不指望一个控件完美解决问题,水果刀切肉确实不太行
ActiveX不行就不行了,也没必要废掉用着挺好的控件
2021-12-17 21:53
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用laowan001在2021-12-17 21:53:21的发言:

应该是我没说清楚,能用的地方就用,不能用的地方不用就是了
我不指望一个控件完美解决问题,水果刀切肉确实不太行
ActiveX不行就不行了,也没必要废掉用着挺好的控件


没有没有,应该是我没说清楚。我应该这样子说的:

太棒啦!我试了VFP自带的各种控件,分割条都能完美地运作!大哥哥,太厉害啦!
有一个小问题:大哥哥,我想请教一下,为什么当我用您这完美的分割条,左右两边各放一个richtextbox时,拖动分割条,显示会有些不正常?
再一次谢谢大哥哥!
您是最棒的!
======================
不过,这话又说回来——这唠叨了半天,浪费了一堆的无谓口水,其实你还是未能屈尊亲自试一试你的分割条对于ActiveX控件的表现。
这从你的回帖可看得出来。
其实,遇ActiveX控件,你的分割条并非不可用,只不过在拖动时,无法像平时那样,显示出一根长条棒棒而已。
呵呵呵呵。
2021-12-17 22:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用cssnet在2021-12-17 20:48:08的发言:



因我们好多年前做过“分割条”控件,故而对于它的局限性有一些切身体会与了解。
其实并非“刁难”——本来就特意打了双引号,纯属开个小小玩笑,一认真你就输啦!——VFP的物件,是压不住ActiveX控件的;企图在ActiveX控件上方拖动分割条,你会发觉,只要一拖就被ActiveX控件遮挡住了。
文字表述半天,真没必要;其实你随便试一下就清楚啦。

粗粗地试了一下,感觉如果要求不高还是可行的。



程序代码:
of = CREATEOBJECT("form1")
of.show(1)
RETURN

DEFINE CLASS form1 As Form
    Height = 500
    Width  = 900
    lnX = 0
    ADD OBJECT RT As Olecontrol WITH OleClass="RICHTEXT.RichtextCtrl.1",Top=10,Left=10,Width=200,Height=400
    ADD OBJECT LN as line WITH top=10,left=211,width=0,height=400,borderstyle=3,mousepointer=9
    ADD OBJECT WB As Olecontrol WITH OleClass="Shell.Explorer.2",Top=10,Left=213,Width=680,Height=400

    PROCEDURE Init
        this.lnX = this.ln.left
        this.rt.text = "RichtextCtrl"
        this.WB.Silent = 1
        thisform.WB.navigate2("https://bbs.bccn.net")
    ENDPROC
    
    PROCEDURE LN.mousemove(nButton, nShift, nXCoord, nYCoord)
        IF (nButton == 1)
            xx = nXCoord - thisform.lnX
            rtWidth = thisform.rt.Width + xx
            wbLeft = thisform.wb.Left + xx
            wbWidth = thisform.wb.Width - xx
            IF (rtWidth > 20) AND (wbWidth > 20)
                thisform.lnX = nXCoord
                thisform.rt.Width = rtWidth
                this.Left = nXCoord
                thisform.wb.Left  = wbLeft
                thisform.wb.Width = wbWidth
            ENDIF
        ENDIF 
    ENDPROC
ENDDEFINE
2021-12-17 23:28



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




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

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