亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        讓VB控件大小隨窗體改變而改變

        2014-04-29 06:12:42朱彥廷
        計算機時代 2014年3期
        關(guān)鍵詞:窗體控件文字

        朱彥廷

        摘 要: 當(dāng)VB窗體大小改變時,其中的控件(以及控件上的文字)大小不會自動隨之改變,這是VB的一個缺陷,要解決該問題,應(yīng)該保證控件寬度、高度、距窗體左邊和上邊的距離,以及窗體寬度、高度的比值不變,控件上的文字面積和窗體面積的比值不變,據(jù)此,給出了較為完美、簡單、健壯的解決方法。

        關(guān)鍵詞: VB; 窗體; 控件; 文字

        中圖分類號:TP312 文獻標(biāo)志碼:A 文章編號:1006-8228(2014)03-42-02

        0 引言

        VB簡單易學(xué),是非常適合非專業(yè)程序員的可視化程序設(shè)計語言[1]。但當(dāng)窗體大小改變時,其中的控件大小不會自動隨之改變,這將破壞原來的布局,因此改變幾乎毫無意義,所以很多程序員只好限制窗體改變大小,但這樣編寫出來的程序不完美。對于這樣的“先天”不足,我們在此嘗試“后天”彌補。

        1 原理

        當(dāng)窗體大小改變時,對于控件,應(yīng)保證其寬度、高度、距窗體左邊和上邊的距離,以及窗體寬度、高度的比值不變。記下最初的這幾個比值,以后據(jù)此足以算出控件新的大小和位置。

        控件上可能有文字,如果不對其處理,即大小不變,擴大窗體文字又可能顯得太小,特別是逐漸縮小窗體,文字將由橫排變成豎排、邊緣缺失,甚至控件布局也將錯亂(見圖2,原來大小一致(見圖1)的小文本框(里面有文字,但尚未輸入)變得不一致(如其中第61和62個)),而且窗體還不能太?。▽脮r鼠標(biāo)將不能再向小拖動邊框),因此文字的大小也應(yīng)隨窗體改變。

        但窗體中文字高度(即字號)、寬度的比值是固定的,無法同時保證其寬度、高度,以及窗體寬度、高度的比值不變,所以不能沿用對控件的做法,文獻[2]很難得注意到了這個問題,提出了一個解決方法,即:保證文字高度和窗體高度的比值不變。但這樣如果只改變窗體寬度和文字高度,也即大?。ㄒ蚋叨?、寬度的比值固定)將不會改變,縮小寬度時還將出現(xiàn)前述的情形,可見這種方法并沒有完全解決問題。本文認為,應(yīng)該保證文字面積和窗體面積的比值不變,即

        Controls(i).Font.Size'

        =Controls(i).Font.Size

        =Controls(i).Font.Size

        =ap(i).sp

        其中,Controls(i).Font.Size是控件i上的文字最初的高度[3],Controls.(i).Font.Size'是它在窗體改變后的高度,F(xiàn)orm1.Width是窗體最初的寬度,F(xiàn)orm1.Width'是窗體改變后的寬度,F(xiàn)orm1.Height是窗體最初的高度,F(xiàn)orm1.Height'是窗體改變后的高度,a是文字寬度、高度的比值,ap(i).sp是控件上的文字高度和窗體最初面積的平方根的比值。這樣只要窗體大小改變,文字大小就會隨之改變,窗體可以小到只剩標(biāo)題欄,而且原來的布局不變(見圖3)。

        圖1 原來的窗體

        圖2 縮小的窗體(文字大小不變)

        圖3 縮小的窗體(文字大小隨之改變)

        具體地說,窗體高度包括上、下邊框、標(biāo)題欄的高度,它們不與窗體高度成比例改變(與窗體類型有關(guān),對于某一類型的窗體其實是固定值),因此為保證布局不變,應(yīng)用窗體內(nèi)部高度(除去上、下邊框、標(biāo)題欄的高度)而不是窗體高度,那么它的值是多少呢?幸運的是,屬性ScaleHeight[4]表示的就是窗體內(nèi)部高度,不用再想辦法求出。窗體寬度包括左、右邊框的寬度,其余和窗體高度類似。

        2 代碼

        具體的程序代碼(所用的VB版本是6.0)如下:

        Private Type cp

        wp As Single

        hp As Single

        tp As Single

        lp As Single

        sp As Single

        End Type

        Private ap() As cp

        Private Sub Form_Load()

        ReDim ap(0 To Controls.Count-1)

        Dim i As Integer

        On Error Resume Next'當(dāng)發(fā)生錯誤(因有的控件(如圖像框)沒有Font屬性;有的控件(如定時器)沒有Width、Height屬性)時,忽略該行,繼續(xù)執(zhí)行

        For i=0 To Controls.Count-1

        ap(i).wp=Controls(i).Width/Form1.ScaleWidth

        '記錄控件寬度和窗體內(nèi)部寬度的比值

        ap(i).hp=Controls(i).Height/Form1.ScaleHeight

        '記錄控件高度和窗體內(nèi)部高度的比值

        ap(i).tp=Controls(i).Top/Form1.ScaleHeight

        '記錄控件到窗體上邊的距離和窗體內(nèi)部高度的比值

        ap(i).lp=Controls(i).Left/Form1.ScaleWidth

        '記錄控件到窗體左邊的距離和窗體內(nèi)部寬度的比值

        ap(i).sp=Controls(i).Font.Size/Sqr(Form1.ScaleHeight*Form1

        .ScaleWidth) '記錄控件上的文字字號和窗體內(nèi)部面積的平方根的比值

        Next i

        End Sub

        Private Sub Form_Resize()

        Dim i As Integer

        On Error Resume Next'當(dāng)發(fā)生錯誤(有的控件(如圖像框)沒有Font屬性;有的控件(如定時器)沒有Width、Height屬性;文字小于1.5磅(如果窗體太?。?;窗體內(nèi)部高度為0(縮小窗體到只剩標(biāo)題欄、最小化時)時,忽略該行,繼續(xù)執(zhí)行[5]

        For i=0 To Controls.Count - 1

        Controls(i).Left=ap(i).lp*Form2.ScaleWidth

        Controls(i).Top=ap(i).tp*Form2.ScaleHeight

        Controls(i).Width=ap(i).wp*Form2.ScaleWidth

        Controls(i).Height=ap(i).hp*Form2.ScaleHeight '以上4條語句

        如簡化為Controls(i).Move ap(i).lp*Form1.ScaleWidth,ap(i).tp*Form1.ScaleHeight, ap(i).wp*Form1.ScaleWidth, ap(i).hp *Form1.ScaleHeight,對有的控件(如組合框,其Height是不可改變的),將因出錯導(dǎo)致語句不能執(zhí)行,致使控件位置、寬度、高度均不能改變

        Controls(i).Font.Size=ap(i).sp*Sqr(Form1.ScaleHeight

        *Form1.ScaleWidth)

        Next i

        End Sub

        3 結(jié)束語

        與這方面見到的其他文獻(幾乎都見于網(wǎng)絡(luò),期刊上幾乎沒有)相比,本文給出的方法更為完美。本文使用窗體內(nèi)部高度、內(nèi)部寬度,而不是直接用高度、寬度,排除了窗體邊框、標(biāo)題欄的影響,更為嚴謹、美觀;較好地解決了控件上的文字的改變問題。本文的方法簡單;應(yīng)用方便;健壯,即遇到錯誤能夠被妥善處理,不會導(dǎo)致程序崩潰。

        參考文獻:

        [1] 教育部考試中心.Visual Basic語言程序設(shè)計[M].高等教育出版社,

        2013.

        [2] 陳翠松.在VB中實現(xiàn)控件大小的自動改變[J].計算機時代,2001.1.

        [3] 李淑華.VB程序設(shè)計及應(yīng)用[M].高等教育出版社,2003.

        [4] 《視窗世界》雜志社.手把手VB100例[M].北京賽迪電子出版社,

        2004.

        [5] 沈祥玖.VB程序設(shè)計[M].高等教育出版社,2003.

        猜你喜歡
        窗體控件文字
        文字的前世今生
        熱愛與堅持
        當(dāng)我在文字中投宿
        文苑(2020年12期)2020-04-13 00:55:10
        試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應(yīng)用
        檔案天地(2019年5期)2019-06-12 05:12:02
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設(shè)WPS窗體控件讓表格填寫更規(guī)范
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        種出來的“逍遙居”
        WinCE.net下圖形用戶界面的開發(fā)
        日本熟妇免费一区二区三区| 亚洲av无码av制服另类专区| 欧美丰满熟妇aaaaa片| 精品国产福利久久久| 米奇亚洲国产精品思久久| 日本高清不卡二区三区| 极品尤物人妻堕落沉沦| 麻豆av一区二区三区| 免费无码午夜福利片69| 精品18在线观看免费视频| 国产白浆流出一区二区| 极品一区二区在线视频| 美女不带套日出白浆免费视频| 波多野结衣av手机在线观看| 2022国内精品免费福利视频| 精品女同一区二区三区在线播放器| 亚洲视频在线观看第一页| 蜜臀av在线观看| 99re8这里有精品热视频免费| 日韩中文字幕不卡网站| 日本看片一区二区三区| 嫩呦国产一区二区三区av| 国产精品精品自在线拍| 成熟丰满熟妇高潮xxxxx| 无码人妻精品中文字幕免费| 美女丝袜诱惑在线播放蜜桃| 精品熟人妻一区二区三区四区不卡| 国产亚洲日本精品无码| 在线观看视频亚洲| 国产精品99久久精品女同| 亚洲av手机在线网站| 日韩一区国产二区欧美三区| 亚洲精品永久在线观看| 美腿丝袜av在线播放| 97青草超碰久久国内精品91| 国产激情无码一区二区| 曰本极品少妇videossexhd| 亚洲无码美韩综合| 日本午夜精品一区二区三区| 国产精品久久三级精品| 国产精品一区二区三区专区|