| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2304 人关注过本帖
标题:这个方法错在呢?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
具體説,就是先設計一个標準窗體,把控件佈置好,長寛比例固定,然後在這基礎上設定一個字體基準値,當窗體尺寸變化時,所有控件的尺寸都隨之等比例變化,字體大小亦按大致的比例變化大概(不能確保)能不失真,要反覆調試才能取得這個基準値。

授人以渔,不授人以鱼。
2015-12-23 20:38
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
收藏
得分:5 
敢想敢做.赞!
2015-12-23 22:28
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 5楼 liuxingang28
乱了   现在脑袋都要爆了   过两天再弄    清醒清醒     

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-24 14:55
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
泉城飞狐老师说得好,其实你何必一定用Prog 来建立类和过程呢?直接设计Form来上手,先把主要矛盾解决,再来钻研细节,岂不是更好吗?Visual 的理念,就是为了把程序员从不必要的细节中解放出来。
2015-12-24 17:06
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:3 
看代码中经常出现close all或clear all,就说明基础尚不扎实。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-12-24 19:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
思路清晰,用什麽寫都可以;思路不清,怎麽寫都不可以。

授人以渔,不授人以鱼。
2015-12-24 22:06
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
比较同意泉城飞狐的意思。
2015-12-25 10:55
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
CLEAR ALL
CLOSE PROCEDURES
SET PROCEDURE TO "MyFormClass", "MyLoginForm"&&,"otherForm"
runShouliaoForm()

CLOSE PROCEDURES
&&CLOSE ALL
RETURN

PROCEDURE runShouliaoForm
    PUBLIC  shouliaoForm
    shouliaoForm=CREATEOBJECT("m1Form")   
    shouliaoForm.show
    READ EVENTS
    RETURN
ENDPROC

DEFINE CLASS m1Form as myForm
    showWindow=2
    caption="功能1——收料单"
    autoCenter=.t.
    windowType=1
    minWidth=this.Width
    minHeight=this.Height
    aspect=this.width/this.height        
    beforeWidth=this.width
    beforeHeight=this.Height
    formZoom=1
   
    ADD OBJECT referLabel as label&& WITH visible=.f.  &&参照控件,调试时可见
   
    ADD OBJECT titleLabel as label WITH caption="收 料 单",backColor=RGB(222,222,222)

    PROCEDURE Arrange
        IF this.width<>this.beforeWidth
            this.height=this.width/this.aspect
        ENDIF
        IF this.height<>this.beforeHeight
            this.width=this.height*this.aspect
        ENDIF
        this.formZoom=this.height/this.minHeight
        this.refresh
        this.beforeHeight=this.height
        this.beforeWidth=this.width
        
        WITH this.titleLabel
            .top=24*this.formZoom
            .left=(this.width-.width)/2
            .width=127*this.formZoom
            .height=29*this.formZoom
            &&.fontSize=thisform.fontReSize(.name,.height,.width,18,1)            
        ENDWITH
        
        IF this.height<>this.minHeight
            thisform.fontReSize(this.titleLabel.name,this.titleLabel.height,this.titleLabel.width,18,1)
        ELSE     
            this.titleLabel.fontSize=18
        ENDIF
        
    ENDPROC
   
    PROCEDURE fontReSize
        PARAMETERS nName,nHeight,nWidth,nFontSize,nClass
        IF nClass=1
            referControl="referLabel"
            this.&referControl..caption=this.&nName..caption
            this.&referControl..autoSize=.t.
        ENDIF
        LOCAL tempFontSize
        
        FOR tempFontSize=8 TO 72 STEP 1
            this.&referControl..fontSize=tempFontSize
            IF (this.&referControl..height>this.&nName..height).or.(this.&referControl..width>this.&nName..width)
                this.&nName..fontSize=tempFontSize-1
                RETURN
            ENDIF                        
        ENDFOR
*!*            IF tempFontSize>nFontSize
*!*                RETURN tempFontSize
*!*            ELSE
*!*                RETURN nFontSize
*!*            ENDIF         
    ENDPROC
   
    PROCEDURE Activate
        This.Arrange
    ENDPROC
   
    PROCEDURE Resize
        This.Arrange
    ENDPROC
   
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
      
ENDDEFINE


大致是这样了    锁定窗口纵横比    计算出缩放比例    根据缩放比调整控件大小

再把控件的参数丢进方法   

方法中循环测试参照控件上最大能放多大字号  才能不超参数

最后得到比较合适的字号  

最后  还是不得不用参照控件   试了半天不参照    搞不出来   。。。

另一个新生产的问题  

我想用方法返回值   当作.fontSize的值    总说类型不对

messagebox(type(nFontSize))是U型,这是什么数据类型啊  。。。。。怎么转成数值

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-25 14:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用不懂才问在2015-12-25 14:52:38的发言:
messagebox(type(nFontSize))是U型,这是什么数据类型啊  。。。。。怎么转成数值

说明nFontSize没定义
1、nFontSize是C型吗?
2、试试用messagebox(vartype(nFontSize))
2015-12-25 16:13
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
程序代码:
    ADD OBJECT titleLabel as label WITH caption="收 料 单"
    ADD OBJECT howLineLabel as label WITH caption="本单有几项材料?"

            WITH this.titleLabel
            .fontBold=.t.
            .top=24*this.formZoom
            .left=209*this.formZoom
            .width=127*this.formZoom
            .height=29*this.formZoom
            .fontSize=thisform.fontReSize(.name,.height,.width,18,1)            
        ENDWITH
        WITH this.howLineLabel
            .top=this.titleLabel.top+this.titleLabel.height/2-.height/2
            .left=this.width-(this.width-(this.width/2+.width/2))/4*3
            .width=108*this.formZoom
            .height=12*this.formZoom
            .fontSize=thisform.fontReSize(.name,.height,.width,9,1)
        ENDWITH




程序代码:
    PROCEDURE fontReSize
        PARAMETERS nName,nHeight,nWidth,nFontSize,nClass
        IF nClass=1
            referControl="referLabel"
            this.&referControl..caption=this.&nName..caption
            this.&referControl..autoSize=.t.
            this.&nName..backColor=RGB(222,222,222)
        ENDIF 
        LOCAL tempFontSize
        FOR tempFontSize=nFontSize TO 72 STEP 1
            this.&referControl..fontSize=tempFontSize
            IF (this.&referControl..height>this.&nName..height).or.(this.&referControl..width>this.&nName..width)
                &&MESSAGEBOX(VARTYPE(tempFontSize),64)
                &&RETURN 
                EXIT  
            ENDIF                         
        ENDFOR
        MESSAGEBOX(VARTYPE(tempFontSize),64)
        IF this.height<>this.minHeight
            RETURN tempFontSize
        ELSE 
            RETURN nFontSize
        ENDIF         
    ENDPROC


解决了   用这个方法   传进去的字号   如果窗口没改变   字号就是默认的    如果窗口改了大小    字号就会变大

原来是RETURN和EXIT的区别没弄明白    真是   有些知识   光看书   永远记不住怎么用    还是要实践啊  

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-26 14:14
快速回复:这个方法错在呢?
数据加载中...
 
   



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

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