| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1234 人关注过本帖
标题:求助:表单集中怎样让表单2停靠在表单1中?
只看楼主 加入收藏
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:0 
回复 10楼 yjfken
当局者迷,旁观者清。楼主这是何苦啊。悬崖勒马,回头是岸。
2012-04-01 12:34
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
回复楼主:抱歉:我忘了,你说的是在表单集中的2个表单的。我认为可能达不到楼主的要求吧。因为在表单集中,各表单都是自由独立的,很难互相限制。
2012-04-01 19:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实也是可以的,感应表单四个边角的变化,不允许其超越指定窗口边界。

授人以渔,不授人以鱼。
2012-04-01 21:10
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
提示: 该帖被管理员或版主屏蔽
2012-04-02 00:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
CLEAR ALL
Main()
CLEAR ALL
RETURN 

PROCEDURE Main()
    LOCAL loForms
    loForms = NEWOBJECT("C_Formset")
    loForms.Show
    READ EVENTS
ENDPROC 

DEFINE CLASS C_Formset AS FormSet
   
    ADD OBJECT Form1 AS Form WITH Width = 600, Height = 400, AutoCenter = .T.
    ADD OBJECT Form2 AS Form WITH Width = 300, Height = 200, AlwaysOnTop = .T.
   
    PROCEDURE Form1.Destroy
        RELEASE ThisFormset
    ENDPROC
   
    PROCEDURE Form2.Top_Assign(tnTop)
        IF tnTop < ThisFormset.Form1.Top + 32
            tnTop = ThisFormset.Form1.Top + 32
        ENDIF
        This.Top = tnTop
        IF This.Top + This.Height > ThisFormset.Form1.Top + ThisFormset.Form1.Height - 10
            This.Height = ThisFormset.Form1.Top + ThisFormset.Form1.Height - 10 - This.Top
        ENDIF
    ENDPROC
   
    PROCEDURE Form2.Left_Assign(tnLeft)
        IF tnLeft < ThisFormset.Form1.Left + 10
            tnLeft = ThisFormset.Form1.Left + 10
        ENDIF
        This.Left = tnLeft
        IF This.Left + This.Width > ThisFormset.Form1.Left + ThisFormset.Form1.Width - 10
            This.Width = ThisFormset.Form1.Left + ThisFormset.Form1.Width - 10 - This.Left
        ENDIF
    ENDPROC 

    PROCEDURE Form2.Width_Assign(tnWidth)
        IF This.Left + tnWidth > ThisFormset.Form1.Left + ThisFormset.Form1.Width - 10
            tnWidth = ThisFormset.Form1.Left + ThisFormset.Form1.Width - 10 - This.Left
        ENDIF
        This.Width = tnWidth
    ENDPROC
   
    PROCEDURE Form2.Height_Assign(tnHeight)
        IF This.Top + tnHeight > ThisFormset.Form1.Top + ThisFormset.Form1.Height - 10
            tnHeight = ThisFormset.Form1.Top + ThisFormset.Form1.Height - 10 - This.Top
        ENDIF
        This.Height = tnHeight
    ENDPROC 

    PROCEDURE Init
        WITH ThisFormset
            .Form2.Top = .Form1.Top + 50
            .Form2.Left = .Form1.Left + 50
        ENDWITH
    ENDPROC
   
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
   
ENDDEFINE

用VFP6的,可以考虑把代码中四个属性感应事件,改在Resize事件中综合处理,但对于只是移动窗体来说,没有对应的触发事件,可能要另想办法。以上代码,可以考虑加上变动Form1时,把Form2也带动,否则会漏出来。

注:由于Form2完全处于Form1之内,所以必须让Form2的AlwayOnTop属性永远为真,否则激活Form1时,Form2将被遮盖看不到。这是楼主特殊要求引起的,我不知道他到底希望怎么用,这样是否合意。

[ 本帖最后由 TonyDeng 于 2012-4-2 01:30 编辑 ]

授人以渔,不授人以鱼。
2012-04-02 00:16
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
....

[ 本帖最后由 qingfameng 于 2012-4-8 13:30 编辑 ]
2012-04-02 00:38
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:0 
我来做裁判怎么样啊
2012-04-02 01:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
我把代码贴在上面了,可能要用VFP8以上的版本,请用VFP6的朋友测试一下。
那个代码的完善,我就不做了,毕竟没有这种需求。有用的,自己参考着改吧。

[ 本帖最后由 TonyDeng 于 2012-4-2 01:42 编辑 ]

授人以渔,不授人以鱼。
2012-04-02 01:20
yjfken
Rank: 2
等 级:论坛游民
帖 子:19
专家分:17
注 册:2012-3-17
收藏
得分:0 
也太复杂了吧,那算了吧,还是把分平分给大家得了,不过,如果以哪位仁兄发现可以用简单的方法实现的话,记得告诉我一声,谢谢!
2012-04-02 19:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你当然想别人做好了让你一行命令就能用。

授人以渔,不授人以鱼。
2012-04-02 20:19
快速回复:求助:表单集中怎样让表单2停靠在表单1中?
数据加载中...
 
   



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

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