| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2030 人关注过本帖
标题:还是改成容器吧,编程的时候好处理一点
只看楼主 加入收藏
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


用容器类  是添加了  不过  这大小  不好控制啊   

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2016-01-02 17:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
大小不好控制是什麽意思?

授人以渔,不授人以鱼。
2016-01-03 21:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:98 
以下是引用不懂才问在2016-1-1 17:05:34的发言:

SET PROCEDURE TO "MyGet" ADDITIVE
SET PROCEDURE TO "MyGrid" ADDITIVE

这两个   放上来    参考一下    谢谢


MyGet.PRG
程序代码:
*----------------------
* 仿Get容器類
*----------------------
DEFINE CLASS MyGet AS Container 

    BorderWidth = 0
    BackStyle = 0
    
    CanArrange = .T.
    PROCEDURE Arrange
        LOCAL lnIndex
        This.Height = 0
        This.Width = 0
        FOR lnIndex = 1 TO This.ControlCount
            WITH This.Controls(lnIndex)
                .Top = 0
                IF .Height > This.Height
                    This.Height = .Height
                ENDIF 
                IF lnIndex > 1
                    .Left = This.Controls(lnIndex - 1).Left + This.Controls(lnIndex - 1).Width + 5
                ELSE 
                    .Left = 0
                ENDIF 
                This.Width = .Left + .Width
            ENDWITH 
        NEXT 
    ENDPROC 
    
ENDDEFINE 


MyGrid.PRG
程序代码:
*----------------------
* 自定義Grid容器類
*----------------------
DEFINE CLASS myGrid AS Grid 

    Themes     = .F.        && 禁用XP主題
    DeleteMark = .F.        && 不顯示刪除標記欄

    *---------------------------
    * 設置列內容
    * 參數:aColumns -- 列內容數組
    *       Column1  -- 欄標題
    *       Column2  -- 欄數據綁定源
    *       Column3  -- 欄寬度
    *       Column4  -- 顯示格式
    *       Column5  -- 輸入格式
    *---------------------------
    PROCEDURE Set_Columns(taColumns[], tcSource)
        LOCAL lnIndex 
        
        WITH This
            .RecordSourceType = 1
            .RecordSource = tcSource
            .ColumnCount = ALEN(taColumns, 1)
            FOR lnIndex = 1 TO .ColumnCount
                WITH .Columns(lnIndex)
                    WITH .Header1
                        .Caption = taColumns[lnIndex,1]
                        .FontBold = .T.
                        .Alignment = 2
                    ENDWITH 
                    .ControlSource = taColumns[lnIndex,2]
                    IF !EMPTY(taColumns[lnIndex,3])
                        .Width = taColumns[lnIndex,3]
                    ENDIF 
                    IF !EMPTY(taColumns[lnIndex,4])
                        .Format = taColumns[lnIndex,4]
                    ENDIF 
                    IF !EMPTY(taColumns[lnIndex,5])
                        .InputMask = taColumns[lnIndex,5]
                    ENDIF 
                ENDWITH 
            NEXT 
        ENDWITH 
        
    ENDPROC 
    
ENDDEFINE 

授人以渔,不授人以鱼。
2016-01-03 22:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
MyForm.PRG
程序代码:
DEFINE CLASS MyForm AS Form

    *-----------------------
    * 控件佈局方法
    * 用法:派生窗體的Arrange方法應先用DODEFAULT()調用父類方法
    *-----------------------
    PROCEDURE Arrange
        FOR EACH obj IN This.Controls FOXOBJECT 
            IF (VARTYPE(obj.CanArrange) == "L") .AND. obj.CanArrange
                obj.Arrange
            ENDIF 
        NEXT 
    ENDPROC 

    PROCEDURE Activate
        This.Arrange
    ENDPROC 
    
    PROCEDURE Resize
        This.Arrange
    ENDPROC 
    
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC 
    
ENDDEFINE 


注意我新加的註釋,再參考2樓程序中主窗體的Arrange方法:
程序代码:
    *-------------------------
    * 排列控件
    *-------------------------
    PROCEDURE Arrange
    
        DODEFAULT()        && 先調用父類方法

        WITH This.Label1
            .Left = (This.Width - .Width) / 2
        ENDWITH 
        
        WITH This.Check1
            .Top = This.Label1.Top + This.Label1.Height + 5
            .Left = 20
        ENDWITH 
        
        WITH This.BillID
            .Top = This.Check1.Top
            .Left = This.Width - .Width - 20
            gcBill_ID = "test"
        ENDWITH 
        
        WITH This.Line1
            .Top = This.BillID.Top + This.BillID.Height + 5
            .Left = 10
            .Width = This.Width - .Left - 10
        ENDWITH 
        
        WITH This.Provision
            .Top = This.Line1.Top + This.Line1.Height + 5
            .Left = 20
        ENDWITH 
        
        WITH This.ProcessDate
            .Top = This.Provision.Top
            .Left = This.Width - .Width - 20
        ENDWITH 
        
        WITH This.Line2
            .Top = This.Provision.Top + This.Provision.Height + 5
            .Left = 10
            .Width = This.Width - .Left - 10
        ENDWITH 
        
        WITH Top = This.Height - .Height - 5
            .Left = This.Width - .Width - 20
        ENDWITH 
        WITH This.Grid1
            .Top = This.Line2.Top + This.Line2.Height + 5
            .Left = 20
            .Height = Top - .Top - 5
            .Width = This.Width - .Left - 20
        ENDWITH 
        
    ENDPROC 


[此贴子已经被作者于2016-1-3 22:44编辑过]


授人以渔,不授人以鱼。
2016-01-03 22:42
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 13楼 TonyDeng
LOCAL lnIndex
        This.Height = 0
        This.Width = 0
        FOR lnIndex = 1 TO This.ControlCount


3Q,我去研究一下

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2016-01-04 12:22
快速回复:还是改成容器吧,编程的时候好处理一点
数据加载中...
 
   



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

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