| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2458 人关注过本帖
标题:这个算动态吗?
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:70 
这个算动态吗?
搞出了一个传参数 来实现按钮 动态增加 和 尺寸动态改变的方法
不知道可以吗 大牛们看看怎么样 还有好方法吗?
图片附件: 游客没有浏览图片的权限,请 登录注册

代码 有点不规范 不过比较短。。。
程序代码:
Clear All
Public ga_Struct[4]
ga_Struct[1] = CreateObject("St", 200, 100, "this is a" , .T., Rgb(234, 4, 6))
ga_Struct[2] = CreateObject("St", 100, 40, "this is b", .F. , Rgb(3, 45, 62))
ga_Struct[3] = CreateObject("St", 20, 80, "this is c" , .F., Rgb(23, 124, 6))
ga_Struct[4] = CreateObject("St", 250, 220, "this is d", .T., Rgb(214, 114, 96) )

Main()
Clear All
Return


Procedure Main()
    Local lo_MainForm

    lo_MainForm = NewObject("C_Form")
    lo_MainForm.Show
    Read Events
EndProc 


Define Class St as Custom
    a = 100
    b = 100
    s = "haha"
    q = .T.
    c = Rgb(0, 0, 0)
    Procedure Init(tn_a, tn_b, tc_s, tb_q, tc_c)
        With This
            .a = tn_a
            .b = tn_b
            .s = tc_s
            .q = tb_q
            .c = tc_c
         EndWith        

    EndProc      

EndDefine


Define Class Cbtn as Container
    k = ""
    SpecialEffect = 1
    BorderWidth = 3
   

    Procedure Init(St_k)
        With     This
                  .k = St_k
            .AddObject("lb", "Label")
            With this.lb
            .Caption = This.k.s
             .width = 80
             .Height = 40
             .Visible = .T.

             .Top = This.k.b / 2 - .Height / 2
             .BackColor = This.k.c
            EndWith

            .AddObject("tb", "TextBox")
            With this.tb
            .Value = 0
             .width = This.k.a
             .Left = 100
             .Height = This.k.b
             .Visible = .T.

            EndWith
            If  This.K.q == .T.
                    .AddObject("btn", "CommandButton")
                With this.btn
                .Caption = This.k.s
                 .width = 80
                 .Height = 40
                 .visible = .T.

                 .Left = This.tb.Left + This.tb.Width + 10
                 .Visible = .T.

                EndWith           

                 EndIf    

                 .Width = 440
                 .Height = .tb.Height   

                 .SetAll("Alignment", 1)     

        EndWith

    EndProc

EndDefine



Define Class C_Form as Form
    Width = 500
    Height = 500
    AutoCenter = .T.
    Caption = "Experiment"
   

    Procedure Init
        With This           

            For i = 1 to Alen(ga_Struct, 0)
            lc_Name = "xx_" + Padl(i, 2, '0')
            .AddObject(lc_Name, "Cbtn", ga_Struct[i])
            With This.&lc_Name
                .Left = 20
                If i == 1
                b1 = 50
                Else

                b1 = b1 + ga_Struct[i -1].b
                EndIf    

                .Top = b1
                .Visible = .T.
            EndWith

            EndFor

        EndWith

    EndProc

   

    Procedure destroy

        Clear Events       

    EndProc

EndDefine 

搜索更多相关主题的帖子: 动态 
2012-09-23 16:53
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
学习
2012-09-23 17:23
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用信箱有效在2012-9-23 17:23:11的发言:

学习
学习啥 说两句?
貌似你用Win32汇编在做东西吧 信哥哥?

梅尚程荀
马谭杨奚







                                                       
2012-09-23 17:47
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:3 
膜拜

实现自己既定的目标,必须能耐得住寂寞单干。
2012-09-23 19:00
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
动态有什么用处?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-09-23 19:22
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用hu9jj在2012-9-23 19:22:14的发言:

动态有什么用处?

感觉可以缩减一些冗长的重复代码。。。
估计我理解的这个动态和你们认识的不一样。。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 19:41
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
感觉楼主走的有点偏。表单是设计时建立的,不是用户建立的。可视化编程所有控件都可以在设计时完成,即使是用代码生成控件,编译后并不会减少可执行文件的长度。所以没有必要在所谓的减少代码长度上动脑筋。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-09-23 20:11
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我终于做出了身份证验证系统的单个校验的界面 大牛们帮看下代码有没问题 对以后的界面元素的调度会不会有影响?
大致的结构就是一个全局数组存储 各结构体值 然后通过他们向一个容器赋值 在容器中动态添加控件 最后在主FORM里
添加多个容器对象  
这个如果想改变某个输入项的大小和按钮个数 只要在全局数组里改变CreateObject()的参数就可以了。
程序代码:
Clear   All

Public gn_HalfWndHeight as Integer
Public gn_HalfWndWidth as Integer
Public gn_Space, tb_W, tb_H as Integer
gn_HalfWndHeight = 290
gn_HalfWndWidth = 400
gn_Space = 25
tb_W = 300
tb_H  = 50

Public ga_Ctnr[8] &&容器数组
ga_Ctnr[1] = CreateObject("C_Struct", "Number", "身份证号码:", tb_W , tb_H, .T., "检验")
ga_Ctnr[2] = CreateObject("C_Struct", "Province", "省(直辖市):", tb_W , tb_H, .T., "重新输入")
ga_Ctnr[3] = CreateObject("C_Struct", "Area", "地区:", tb_W , tb_H, .T., "批量检验")
ga_Ctnr[4] = CreateObject("C_Struct", "City", "市(县):", tb_W , tb_H, .T., "退出")
ga_Ctnr[5] = CreateObject("C_Struct", "Date", "出生年月日:", tb_W , tb_H, .T., "注意事项")
ga_Ctnr[6] = CreateObject("C_Struct", "Sex", "性别:", tb_W , tb_H, .T., "版本说明")
ga_Ctnr[7] = CreateObject("C_Struct", "Address", "户籍所在地:", tb_W + 100, tb_H, .F.,"33")
ga_Ctnr[8] = CreateObject("C_Struct", "Result", "检验结果:", tb_W + 200, tb_H * 2, .F.,"33")

On Error do errHandler with Error(), Message(), Message(1), Program(), Lineno()
Main()
On Error
Clear All
Return


Procedure errHandler(merror, mmess, mmess1, mprog, mlineno)
     MessageBox(Str(mlineno) + "表达式错误:" + mmess)
EndProc


Procedure Main()
           Local lo_MainForm
           lo_MainForm = NewObject("C_Form")
           lo_MainForm.show
           Read EVENTS
           Return

EndProc

Define Class C_Struct as Custom
    ID = ""
    lbl_Caption = ""
    chg_Width = 0
    chg_Height = 0
    ask_Button = .T.   

    btn_Caption = ""
    Procedure Init(tc_ID, tc_lbl_Caption, tn_chg_Width, tn_chg_Height, tb_ask_Button, tc_btn_Caption)
        With This
            .ID = tc_ID
            .lbl_Caption = tc_lbl_Caption
            .chg_Width = tn_chg_Width
            .chg_Height = tn_chg_Height
            .ask_Button = tb_ask_Button
            .btn_Caption = tc_btn_Caption
        EndWith        

    EndProc

EndDefine


Define Class C_Container as Container
            BorderWidth = 2
            SpecialEffect = 1

            Width = 2 * (gn_HalfWndWidth - gn_Space) 


            Key = ""
                    

            Procedure Init(t_Ctnr)
                Local ln_Space as Integer
                ln_Space = 20
            With This
                .Key = t_Ctnr
                .AddObject("Ctnr_Label","Label")
                With This.Ctnr_Label
                           .Caption = This.Key.lbl_Caption
                          .Height = 30
                          .Width = 200
                          .Left = 10
                          .Top = This.Key.chg_Height / 2 - .Height / 2                                             

                           EndWith    

                          

                           .AddObject("Ctnr_Text","TextBox")
                With This.Ctnr_Text

                          .Left = This.Ctnr_Label.Left + This.Ctnr_Label.Width + ln_Space
                                .Height = This.Key.chg_Height

                                .Width = This.Key.chg_Width

                           EndWith   

                      

                           If  .Key.ask_Button == .T.
                           .AddObject("Ctnr_Button","CommandButton")
                    With This.Ctnr_Button
                        .Height = 30
                          .Caption = This.Key.btn_Caption
                          .Left = This.Ctnr_Text.Left + This.Ctnr_Text.Width + ln_Space
                          .Top = This.Key.chg_Height / 2 - .Height / 2                             

                                  .Width = 100
                               EndWith   

                           EndIf
                           .SetAll("Visible", .T.)
                           .SetAll("FontSize", 16)

                           .SetAll("Alignment", 2) 

                           .SetAll("FontBold", 1)
                           .Height = .Key.chg_Height           

            EndWith

        EndProc                                                                                                                     

EndDefine


Define Class C_Form as Form
    MaxButton = .F.
    Caption = "身份证号检验系统"
    AutoCenter = .T.

    ShowWindow = 2
    BorderStyle = 2
       

       Add Object lo_Caption as Label with Top = 10, Caption = "身份证号检验系统",;
        FontSize = 20, AutoSize = .T. , FontName = "楷体"

   

    Procedure Init
        With     This   

            .Top = 50
                       .Left = 100
                       .Height = gn_HalfWndHeight * 2
                       .Width = gn_HalfWndWidth * 2
            For i = 1 to Alen(ga_Ctnr, 0)
                lo_Name = "AddCtnr_" + Padl(i, 2, '0') 

                .AddObject(lo_Name, "C_Container", ga_Ctnr[i])
                    With This.&lo_Name
                        .Left = gn_Space
                        If i == 1
                            sp = This.lo_Caption.Top +  This.lo_Caption.Height + gn_Space
                        Else
                            sp = sp + ga_Ctnr[i-1].chg_Height + 5
                        EndIf

                        .Top = sp
                        .Visible = .T.
                    EndWith

            EndFor

        EndWith                    

    EndProc                                                                                                                                                                                                                                                           

                                                 

    Procedure lo_Caption.Init
           With This
                   .Left = gn_HalfWndWidth - .Width / 2
           EndWith

    EndProc

                                           

    Procedure Destroy
        Clear Events
    EndProc

EndDefine    
-----下面是界面图
图片附件: 游客没有浏览图片的权限,请 登录注册


梅尚程荀
马谭杨奚







                                                       
2012-09-23 20:14
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用hu9jj在2012-9-23 20:11:00的发言:

感觉楼主走的有点偏。表单是设计时建立的,不是用户建立的。可视化编程所有控件都可以在设计时完成,即使是用代码生成控件,编译后并不会减少可执行文件的长度。所以没有必要在所谓的减少代码长度上动脑筋。

如果不在一个程序里写 而是各个分开 对界面元素的调度会不会增加难度?
我直觉是界面也包含在程序prg里对整个项目有利 不知道你怎么看?

梅尚程荀
马谭杨奚







                                                       
2012-09-23 20:22
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:0 
受某些人的影响太深
悬崖勒马,尤未晚也
2012-09-23 20:23
快速回复:这个算动态吗?
数据加载中...
 
   



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

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