VB編程技巧

文章瀏覽廣告 前端

VB編程技巧幾例  程序員

如今加入 http://14.66.102.214  數據庫

VB5 引入枚舉變量,使用它,咱們能夠顯著地改變應用程序的易讀性:編程

 

Public Enum TimeOfDay小程序

 

Morning = 0windows

 

Afternoon = 1後端

 

Evening = 2數組

 

End Enum服務器

 

Sub Main()網絡

 

Dim RightNow As TimeOfDay

 

If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then

 

RightNow = Morning

 

ElseIf Time >= #12:00:00 PM# And Time < #6:00:00 PM# Then

 

RightNow = Afternoon

 

ElseIf Time >= #6:00:00 PM# Then

 

RightNow = Evening

 

End If

 

End Sub

 

 

 

VB編程技巧幾例

山東 許振華

 

 

1 文本框內容的自動選擇。

 

    在軟件安裝等一些場合須要將文本框中的內容自動選擇,好比選擇確省安裝路徑,在VB中可用以下的事件驅動代碼:

 

 

sub text1_getfocus()

 

text1selstart0 ’選擇起始位置

 

text1sellength65000 ’選擇長度

 

end sub

 

sellength接近文本框容許的最大長度(65535),這樣作是爲了

 

強迫VB使用文本的實際長度。

 

 

 

2 防止自身屢次運行。

 

    因爲WINDOWS的多任務處理功能, 有些程序可能打開後忘記了,下次用時還可能再打開,這樣作會佔用系統資源下降系統效率。爲了防止自身被屢次運行,可利用VB應用對象提供的PrevInstance屬性來檢測內存中是否已有一個自身的副本,如有則給出提示後結束。通常將檢測代碼放在FORM_LOAD()中,由於程序一運行就要檢測。

 

代碼以下:

 

sub form_load()

 

if AppPrevInstance then

 

msg$=Appexename 」has already run」

 

msgbox msg$,48 ’給出程序已運行的提示和一驚歎號以示警告

 

end

 

endif

 

end sub

 

 

3 格式化輸入。

 

    在數據輸入過程當中,有些數據要求必定的格式,好比限制輸入的只能爲數字或英文字符,這可用VB的格式輸入文本框來實現。它與文本框(TEXT BOX)功能基本類似,但多了一個MASK屬性,MASK屬性經常使用的設定以下:

 

       #—限定僅能輸入數字09

       A— 限定輸入爲英文字符及數字;

       ?—限定僅能輸入英文字符;

       .—限定小數點位置;

       :—限定時間分隔號;

       /—限定日期分隔號

 

    不需編寫代碼,只要在設計時將格式化文本框對象(MASKED EDIT)的MASK屬性設計好所需格式便可。好比 ## - ## - ## 可輸入121196

 

4 MSGBOX函數設計版權信息。

 

    MsgBox函數可用來設計簡易的版權信息,它只能顯示文本,若是要求不高的話可採用它,優勢是很是方便,好比在菜單ABOUT項中顯示版權信息。

 

    MsgBox函數的用法以下:MsgBox msg [, type][, title

 

       msg —須要顯示的文字信息,如版權信息。

       type—按鈕顯示選擇項。

       0 只顯示 OK按鈕(確省選擇),4 顯示 Yes No 按鈕

       title—標題文字信息。

 

 

    MSGBOX最多能顯示1024個字符, 超出的將被截去;它可自動換行,若是你想強制換行的話須要在換行處加入換行符CHR10)。

 

例子:

 

Sub Form_Click ()

 

Msg1 」 Copyright c 1996」 Chr10 」Ver

 

10 」 ’分兩行顯示

 

MsgBox Msg1 0 」Copyright demo」 ’只顯示一個OK按鈕

 

End Sub

 

 

 

使用 IIF SWITCH 以精減代碼

 

 

    在不少地方你均可以使用一個更緊湊的 IIf 函數來代替 If...Else...Endif 的結構: 例:返回兩個值中較大的一個 maxValue = IIf(first >= second, first, second)

 

 

    Switch 則是一個不多使用的函數,但是在不少方面它都提供比 If...ElseIf 結構更好的 例:判斷 "x" 是正、負仍是 null?

 

        Print Switch(x<0,"",x>0,"", True, "Null")

 

 

 

變量的地址

 

    VB5 內置了一個 VarPtr 函數,但是此函數在 VB4 中沒有提供。但是你知道嗎?VB4 的運行庫中已經包含了此函數。只是在用它以前,咱們須要聲明一下:

 

        #If Win16 Then

 

        Declare Function VarPtr Lib "VB40016.DLL" (variable As Any) As Long

 

        #Else

 

        Declare Function VarPtr Lib "VB40032.DLL" (variable As Any) As Long

 

        #End If

 

    此函數在傳遞一個 Type 結構(若是此結構要求其一段是另外一個變量或記錄的地址)給一個外部的 API 程序時十分有用。

 

 

 

 

向文件中寫入非 ASCII 字符

 

 

    如何向一個文件中寫入非ASCII字符(ASCII碼在128-255之間)?這在 VB3 中按常規方法就能夠很好處理。可是,自 VB4 起,微軟引入 Unicode 後,此問題就顯得有些麻煩。方法以下:

 

      Dim a As Byte '若是你不用 Unicode,微軟推薦使用 Byte 類型替換 String 類型

 

      a=&HF5 '此處直接給處 ASCII 碼便可

 

      Open "test.dat" For Binary As #1

 

      Put #1, , a

 

      Close (1)

 

 

VB中感嘆號「!」與圓點「.」的用法差別

河北 馬昱

 

 

    Visual Basic中,驚歎號「!」與圓點「.」都用於給對象命名,但二者語法上卻存在很大的區別,這點在編程時尤爲須要注意。

 

    圓點操做符「.」用來表示對象的屬性和方法,在引用時,須要用到對象的Name、圓點和須要的屬性或方法。例如要引用文本框Textl中的文本屬性時可用reponse$=Text1Text,再如要改變Form1窗體返回或讀取對象高度的單位時用Form1ScaleHeigh2000表示。

 

    感嘆號「!」經常使用於當一個控件做爲一個特性訪問的狀況下,例如引用Fomr2Text1文本框文本屬性時,可採用response$=Form2text1text語法格式。

 

    雖然二者的語法應用結構有較大差別,但兩條語句的性能是相同的,值得注意的是若是你在感嘆號「!」的位置使用「.」能夠得到對窗體上Text1特性的直接訪問權,爲了進一步增長感性認識,你不妨運行下面的例子來試試。

 

    1.創建一個新項目,並在Form1窗體中增長一個命令控件。

 

    2.雙擊Form1窗體,編輯FormLoad事件並輸入:

 

        Form1Command1Caption=」Text」

 

        Form1Command1Caption=」It Works」

 

    3.運行試項目,這時你就會在Command1命令框中看到字符串It Works

 

    爲了在程序中清楚地界定引用的控件名和該控件的屬性或方法,增長程序的可讀性,最好使用感嘆號「!」,這也是VB的推薦方式。

 

 

 

0""(空字串)NullEmpty、與 Nothing 的區別

 

 

    先回答如下問題吧! 通過如下的敘述以後, 變量 ABCD 分別等於 0""Null Empty Nothing 的哪個?

 

Dim A

 

Dim B As String

 

Dim C As Integer

 

Dim D As Object

 

    A 等於 Empty 由於還沒有初始化的「不定型變量」都等於 Empty。但若是檢測 A = "" A = 0 也均可以獲得 True 值。

 

    B 等於 "" 由於還沒有初始化的非固定長度「字串」都等於 "" 但請注意 B<> Null

 

    C 等於 0 這個還有問題嗎?

 

    D 等於 Nothing 還沒有設定有物件的「物件變量」都等於 Nothing 但請不要使用 D = Nothing , 而要使用 D Is Nothing 來判斷 D 是否等於 Nothing 由於判斷 是否相等的符號是 Is 不是 =

 

    最使人迷惑的地方是 Null 這個保留字, 請看如下語句:

 

Print X = Null

 

Print X <> Null

 

    結果都是輸出 Null(不是 True 也不是 False) 這是由於任何一個運算式只要含有 Null 則該運算式就等於 Null 實際上想要判斷某一數據是否爲 Null 絕對不能使用:

 

        If X = Null Then ' 永遠都會獲得 Null

 

    而要使用:

 

        If IsNull(X) Then

 

    哪種數據會等於 Null 呢? 除了含有 Null 運算式以外, 就屬沒有輸入任何數據的「數據字段」(在數據庫中) 會等於 Null

 

 

 

巧用Visual BasicRND()函數

浙江 傅昌盛

 

    Visual BasicRND()函數有一個重要的特徵:當RND()的參數(咱們稱這裏能夠稱它爲種子)爲負值時,同一種子(負值)產生同一個隨機數序列。同時Visual Basic還具備強大的二進制技術功能,這樣咱們能夠按如下思路實現文件內容加密:

 

      X=RND(-KEY) ’KEY爲正數

 

      VAULE=INT(256*RND) ’產生一個隨機數(以此爲密碼)

 

      Open FILENAME$ For Binary As #FILENUM’打開文件

 

      Get #FILENUM,I,A ’取文件內容

 

      B=A XOR VAULE ’獲得加密文件

 

    結合

 

      C=B XOR VAULE’獲得解密文件(B爲加密後文件內容)

 

    注意:這裏的A非整個文件內容,能夠是極少部分、幾個字節甚至單個字節,若爲單字節,則文件中的每一個字節同不一樣的數異或,破譯難度可見有多麼大。具體過程:

 

      Sub ENDECODE(FILENAME$,MA,FILE2$)'參數爲:源文件,密碼,目標文件

 

      Dim FILENUM As Integer,X As Single,I As Single

 

      Dim CHARNUM As Integer,RANDOMINTEGER As Integer

 

      Dim SINGLECHAR As String *1,filen2 As Integer'取單字節

 

      If MA<0 Them

 

      MA=MA*(-1)

 

      End If

 

      X=Rnd(-MA)'參數爲負

 

      FILENUM=FreeFile

 

      Open FILENAME$ For Binary As #FILENUM '二進制方式打開源文件

 

      filen2=FreeFile

 

      Open FILE2$ For Output As #filen2’以順序文件打開目標文件

 

      For i=1 To LOF(FILENUM)'LOF()文件字節長

 

      Get #FILENUM,i,SINGLECHAR'取單字節內容

 

      CHARNUM=Asc(SINGLECHAR)

 

      RANDOMINTEGER=Int(256*Rnd)'獲得字母表

 

      CHARNUM=CHARNUM Xor RANDOMINTEGER'異或

 

      Print #filen2,Chr$(CHARNUM);’寫入目標文件

 

      Next I

 

      Close FILENUM

 

      Close filen2

 

      ok ’調用成功對話框

 

      End Sub

 

        調用格式:ENDECODE 源文件名,密碼,目標文件名

 

    上面過程能夠對任何EXE、COM、文本等文件進行加解密(奇數次加密,偶數次解密),重演性極好,保密性特優,若對上述過程進一步加工,如進行多重隨機等手段處理,那麼將會更上一層樓,在此不累述。

 

    順便提一下,上面過程若對目標文件一樣以二進制文件打開、寫入,那麼只能對純西文文本進行加解密,對於純中文文本則經過修改取雙字節、I的步長爲2來實現,其它(中西文結合文本、EXE、COM等文件)則將得不到預期結果,其緣由能夠能是ASCII大於127的字符,不能正常顯示,不能用put語句正常寫入文件(獲得的只是空格),有興趣者不妨一試。

 

 

 

利用 lstrlen 計算中英文混合字串的長度

 

32-bit 版本的 VB 底下, 將每個字符都視爲兩個 Byte 因此

 

Len("中英Mixed") 等於 7

LenB("中英Mixed") 等於 14

 

可是在不少場合底下, 咱們但願中文字長度以 2 計算, 英文字母長度以 1 計算, 此時使用的方法以下:

 

' 欲計算字串 S 的長度

N = 0

For I = 1 To Len(S)

 

C = Asc(Mid(S, I, 1)) ' 取得第 I 個字符組的字符碼

If C >= 0 And C < 128 Then ' 英文

 

N = N + 1

 

Else ' 中文

 

N = N + 2

 

End If

 

Next

 

看起來程序有點羅唆, 若是您不喜歡這個方法, 能夠使用 Windows API lstrlen 函數, 假設假計算 S 的長度, API 聲明式以下:

 

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long

 

而調用的敘述則是:

 

n = lstrlen("中英Mixed" + Chr(0))

Print n ' n 將等於 9

 

請注意調用 lstrlen 時必須加上 Chr(0) 由於此一函數是根據 Chr(0) 來判斷字串的結束。

 

調用 lstrlen 除了程序比較簡短以外, 速度也比咱們寫 VB 程序判斷中英文字而後計算長度來的快。

 

 

 

利用 StrConv 計算中英文混合字串的長度

 

上一週說明利用 Windows API lstrlen 計算中英文混合字串的長度以後,臺中的 Rose 讀者來函, 說還有更簡單的計算方法, 以下:

 

LenB(StrConv("中英Mixed", vbFromUnicode))

 

說真的, 由於筆者懂得調用 Windows API 因此居然忽略了此一 VB 內建的函數,可見聞道有前後, 在此筆者亦但願先聞道的讀者可以將您的心得發表出來, 與喜歡 VB 的讀者交流。

 

StrConv 的做用是字串內容的轉換, 其中將叄數二設定成 vbFromUnicode,做用是把「雙位元」的字串轉換成中文字佔用 2 Bytes、英文佔用 1 Bytes 的字串,因此緊接着調用 LenB 即可以計算出中英文混合字串的長度。

 

 

 

如何傳遞不固定個數的叄數?

 

定義副程序時, 咱們必須把叄數一一列出來, 例如:

 

Sub MySub( P1, P2, )

 

但若是咱們未來調用副程序時, 可能會傳入不固定個數的叄數, 那麼副程序該如何定義呢?答案以下:

 

Sub MySub( ParamArray P() ) ' 把叄數 P 定義成一個陣列

 

如此定義副程序以後, 如下都是未來可能出現的調用敘述:

 

MySub "ABC" ' 只傳遞一個叄數

MySub 1, 3, 9, 988, 776, 234 ' 傳遞 6 個整數叄數

MySub 123, "abc", Date() ' 傳遞 3 個不一樣型別的叄數

 

以最後一個調用敘述爲例, P(0) 叄數將等於 123 P(1) 叄數等於 "abc" P(2) 叄數則等於 Date() 函數的傳回值, 而因爲 P() 是一個陣列, 咱們能夠利用如下方法讀取每個叄數:

 

For i = 0 To UBound(P)

    ' P(i) 等於第 i 個叄數

Next

最後, 請注意以 ParamArray 所定義的叄數必定是 Variant(不定型) 型別, 若要判斷每個個別叄數的資料型別, 能夠使用 TypeName 函數。

 

 

 

 

 

       0

>>上篇文章:VB編程技巧幾例

 

 

>>下篇文章:VB實現全屏幕圖形界面及動態功能提示

 

 

 

 

『關閉窗口』

 

文章瀏覽時的廣告

文章瀏覽廣告

VB實現全屏幕圖形界面及動態功能提示 

如今加入 http://14.66.102.214 

在許多Windows軟件的安裝程序中,時常能夠看到以某種顏色由淺至深的漸變爲背景的窗口。使用VB製做這類窗口的方法有很多,而經過調用API函數繪製漸變的窗口背景色,彷佛是一種既簡單又節省資源的方法。

 

  首先,在module文件中加入下列聲明語句:

 

  Declare Function CreateSolidBrush Lib"GDI"(ByVal crColor As Long) As Integer

 

  Declare Function FillRect Lib"USER"(ByVal hDC As IntegerlpRect As RECTByVal hBrush As Integer)As Integer

 

  Declare Function DeleteObject Lib"GDI"(ByVal hObject As Integer)As Integer

 

  Type RECT

 

  left As Integer

 

   top As Integer

 

   right As Integer

 

   bottom As Integer

 

  EndType

 

  而後,在窗口的Paint事件中加入下列代碼:

 

  Private Sub Form_Paint()

 

  Dim Color As Integer

 

  Dim hBrush As Integer

 

  Dim OldMode As Integer

 

  Dim RetVal As Integer

 

  Dim StepSize As Integer

 

  Dim X As Integer

 

  Dim FillArea As RECT

 

  OldMode%=Me.ScaleMode

 

  Me.ScaleMode=3

 

  StepSize%=1+Me.ScaleHeight/80

 

  Color%=255

 

  FillArea.left=0

 

  FillArea.right=Me.ScaleWidth

 

  FillArea.top=0

 

  FillArea.bottom=StepSize%

 

  For X%=1 To 80

 

  hBrush%=CreateSolidBrush (RGB(0,0,Color%))

 

   RetVal%=FillRect(Me.hDC,FillArea,hBrush%)

 

   RetVal%=DeleteObject(hBrush%)

 

  Color%=Color%-4

 

   If Color% < 0 Then Color%=0

 

   FillArea.top=FillArea.bottom

 

  FillArea.bottom=FillArea.bottom+StepSize%

 

  Next

 

  Me.ScaleMode=OldMode%

 

  EndSub

 

  按F5運行,就會出現一個以從上至下、由淺至深的漸變藍色爲背景的窗口。對上述代碼稍加改動,即可製做出各類顏色和水平方向的漸變背景。

 

 

 

 

如何在VBDelphi中快速實現立體化窗口顯示

 

    VBDelphi中,咱們能夠很方便地建立具備立體化觀感的窗口,這也是近兩年來,Win3.X中較爲流行的顯示方式。許多專業化的軟件都採用了這種立體化的窗口和相應的控件,達到了賞心悅目的效果。下面咱們來談談如何在目前最流行的兩種Win編程語言中實現這樣的效果。

 

    其實,不管是VB仍是Delphi,要實現這種效果都較爲容易,在編程中,並不須要調用外部的DLL,在程序運行時,會自動調用CTL3dV2.dll

 

    咱們先來看看如何在VB中實現:

 

    1.新建一個窗口。

 

    2.在窗口form的屬性列表中有一項Auto3D屬性,缺省值爲false,將其設置爲true。它是控制VB中是否顯示立體窗口的重要屬性。

 

    3.form的屬性列表中還有一項BorderStyle屬性,這是控制窗口的邊框顯示類型,將其設置爲3Fixed Double

 

    4.如今能夠運行這個程序了,你將會看到立體窗口出現。

 

    Auto3D屬性設置爲true,還有一個很好的反作用,那就是在這個窗口上的TextFrameCheckBoxOptionButtonListBox都自動具備了立體效果。

 

    Delphi中實現彷佛顯得更加容易和直觀:

 

    1.新建一個窗口。

 

    2.在窗口form的屬性列表中有一項BorderStyle屬性,它的缺省值爲bsSizeable,表示邊界能夠任意調整,將其從新設置爲bsDialog

 

    3.運行程序,你會發現立體窗口出現了。(看來,Delphi中將這種立體化窗口稱爲「對話窗口」,確實如此,好比在Word中,對話窗口都是這種立體化的顯示,而主窗口仍然是通常的風格。)

 

    VB中的Auto3D相似,在Delphi中有一個屬性爲Ctl3D,將其設置爲true,將使全部在這個窗口上的控件具備立體觀感,而且這種變化是馬上反映的,而不象VB中在運行時才能看到。

 

    Delphi的窗口form中,你還能夠經過設置FormStyle屬性爲fsStayOntop來垂手可得的實現「永遠浮在其餘窗口」上的效果。著名的「譯林」Win版本就是用Delphi寫的,它其中就有一個「永遠在最上面」的功能,就是這樣實現的。

 

 

 

Visual Basic設計更好的用戶界面

 

    有時在一個窗口中出現較多的控制件時,若是能嚮導式地建議用戶下一步該作什麼,不失爲上策。

 

    Visual Basic的程序設計中,咱們能夠使用語句:Object.SetFaocus使咱們但願的控件獲得輸入焦點,舉個例子:在Form1中咱們加入一個按鈕Command1和一個文本輸入Text1,雙擊按鈕控件,而後鍵入以下代碼:

 

        Text1.SetFocus

 

    再按F5運行程序,您就會看到一單擊按鈕,文本框會當即取得輸入焦點。另外,咱們還能夠使用語句:Sendkeys "{TAB}"使下一個控件得到焦點,但咱們須要在設計時肯定各控件的Index值。(Properties窗口中)讓控件本身感知本身的工做已完成,而主動將焦點讓出,會使用戶以爲應用程序很聰明,也減小了用戶出錯的機會。

 

    但是當焦點切換的兩個控件相隔有必定距離時,上述的方法有時也不足以引發用戶的注意,那麼一種好的解決方法是將鼠標箭頭也移到控件上。惋惜,VB並不支持鼠標移動,那咱們就求助API函數,API函數SetCursorPos可以讓咱們如願。

 

    下面是子程序MoveCursorOn,它可以讓鼠標移動到指定控件上方。

 

    下列代碼請放在declarations段中:

 

Type PoinTAPI

 

x As Integer

 

y As Integer

 

End Type

 

Declare Sub SetCursorPos Lib "User"(Byval x As Integer,Byval y As Integer)

 

Declare Sub ClientToScreen Lib "User"(Byval hwnd As Integer,IpPoint As PointAPI)

 

Declare Function GetParent Lib "User"(Byval hwnd As Integer)As Integer

 

    而後創建一個新的子程序(ALTNN→鍵入子程序名MoveCursorOn),下面是子程序的代碼:

 

Sub MoveCursorOn(source As Control)

 

Dim Pt As PoinTAPI

 

Dim hparent As Integer

 

p.x=(Source.LeftSource.Width/2)/Screen.Twipsperpixel)

 

p.y=(Source.TopSource.Height/2)/Screen.Twipsperpixel)

 

hparent=GetParent(source.hwnd)

 

ClientToScreen hparent pt

 

SetCursorPos pt.x pt.y

 

End Sub

 

    使用該子程序很容易,例如咱們想把鼠標移動到按鈕Command1上,就可以使用語句

 

Move Cursor On Command1

 

    您會看到鼠標箭頭已經指着按鈕Command1

 

    須要說明的是,千萬不要濫用該子程序。讓鼠標本身滿屏亂飛,咱們的用戶會感到失去對應用程序的控制,這是違反咱們的初衷的。

 

    在有數個輸入框的窗口中(這在數據庫應用程序中是很典型的),當用戶完成第一個輸入框的輸入後,總愛習慣性的加一個回車,但願輸入焦點落到下一個輸入框中(DOS中大多數應用程序是如此),可每每事與願違,這一回車卻觸發了擁有Default特性的按鈕,結果不是關閉了當前窗口就是又蹦出另外一窗口。用戶睜大眼睛看着屏幕,「咦?!我到底作了什麼?」這是Windows新用戶常常遇到的事情。

 

    解決它其實很容易,只需在輸入框的KeyPress事件中加入以下代碼:

 

IF KeyASCII=13 Then

 

KeyASCII=0

 

Sendkeys "{TAB}"

 

END IF

 

    這樣,當用戶在這個輸入框中鍵入Enter時,就象鍵入TAB鍵時,焦點被移到下一控件上。但需注意,這種方法不適用於多行的TextBox,即TextBoxMultiLine特性設爲True時,由於這時的回車鍵是起換行的做用。

 

 

 

利用VB三維面板控件設計流動條

 

    VB提供了一個三維面板控件,利用這個控件可設計圖形效果的立體界面,從而使應用程序的截面顯得更生動、美觀,該控件還能夠設置各類形式的背景,而後在背景上顯示各類形式的字符,使人感興趣的是,使用三維面板控件,還可設計咱們常常在安裝程序中看到的表示安裝進度的流動條,並可顯示進程的流動條,並可顯示進程百分比,改變流動條的顏色等。

 

 

一. 介紹屬性

 

    FloodColor: 肯定流動條的顏色,缺省爲藍色。

 

    FloodPercent: 顯示當前過程如流動條進行的百分比,參數改變時顯示的百分數和流動條的面積改變,設爲一整型值,取值範圍是0~100

 

    FloodShowpct: 決定是否在三維面板控件上顯示百分比,是一個邏輯值。爲Ture時顯示,爲False時不顯示。

 

    FloodType: 表示用戶對三維面板控件的使用方式。可取值有6個,以下所示:

 

0 缺省設置

 

1 表示流動條方向從左到右

 

2 表示流動條方向從右到左

 

3 表示流動條方向從上到下

 

4 表示流動條方向從下到上

 

5 表示使用指定的顏色從圓心向外畫圓

 

 

 

二. 流動條設計

 

    若是在Windows 3.x下,工具箱中不存在三維面板控件,可選擇File菜單中的"Add File…" 進行添加,在彈出的對話框中找到Windows/System目錄,而後選定Threed.vbx文件便可,若是使用VB 4.0,需在Tools菜單中選擇Custom Control命令,選定Sheridan 3d Controls項,按OK按紐,可在工具箱中增長三維面板控件。

 

    啓動VB ,在窗體中畫一水平方向的長方形三維面板控件,按F4,在屬性窗口中設置其NameP3dBevellnner2-RaisedFloodType1FloodshowPctTrue,再在窗體中畫一個按紐Command1,雙擊該按紐,鍵入下面的代碼:

 

 

 

Sub Command1_Click()

 

P3d.floodpercent=0

 

For N%=1 To 100

 

If N%>100 Then

 

Exit sub

 

End If

 

P3d.FloodPercent=N%

 

Next N%

 

End Sub

 

    F5,運行該程序,點擊Command按紐,便可看到流動條效果。

 

 

 

利用VB的圖片框實現屏幕的滾動

 

    對於學習使用VB來編程的電腦愛好者來講,可能會遇到這樣一個問題:就是如何實現屏幕的滾動,由於當要顯示的內容超出了屏幕的大小後,利用VB所提供的垂直滾動條和水平滾動條等控件是不可能直接實現這一特殊顯示功能的。那麼有沒有其它的辦法呢?答案是確定的。咱們知道VB的圖片框是用來顯示圖形的,但它還有許多其它用途,好比能夠用來建立一些動畫圖形等。其實對於上面的問題咱們也能夠利用圖片框來巧妙地解決。方法以下:

 

    首先,單擊工具框中的圖片框(Picture Box)控件和命令按鈕控件,在窗體(Form1)上創建圖片框對象Picture1和命令按鈕對象Command1,將命令按鈕的Caption屬性設置爲"退出"Picture1的大小設置爲顯示區域的大小,再單擊工具框中的圖片框控件,在Picture1上創建另外一個圖片框對象Picture2,將它的LeftTop屬性設置爲0。用文本框,標籤框等其它控件或導入一幅圖象在Picture2上設定具體的顯示內容,固然Picture2的大小必定要先調整到能所有容納全部要顯示的內容,最後單擊工具框中的垂直滾動條控件和水平滾動條控件,在窗體(Form1)上分別創建垂直滾動條對象VScroll1和水平滾動條對象HScroll1,並設置好它們的屬性。至此在窗體(Form1)上的全部設置工做就完成了,下面是具體的程序代碼:

 

Private Sub VScroll1_Change()

 

Picture2.Top= -VScroll1.Value

 

End Sub

 

Private Sub Hscroll1_Change()

 

Picture2.Left= -HScroll1.Value

 

End Sub

 

Private Sub Command1_Click()

 

End

 

End Sub

 

    運行程序,當按下橫、豎滾動條時,就能使顯示內容實現左右、上下的滾動。此方法簡單易行,有興趣的朋友不妨試一試。

 

 

VB中陰影字體的實現

太原 胡建民

 

    Visual Basic確實是一種很不錯的應用程序開發工具。筆者在使用中,也確實感到用VB設計程序,許多方法的實現是那麼的簡單。有時,僅僅須要幾條語句,就可實現一種方法、效果或功能。下面就介紹一下,陰影字體在VB中的實現。程序以下:

 

Private Sub FormClick()

 

CurrentX700

 

CurrentY1000

 

FontSize30

 

ForeColorQBColor8

 

Print」Software Weekly」

 

CurrentX750

 

CurrentY1050

 

FontSize30

 

ForeColorQBColor12

 

Print」Software Weekly」

 

End Sub

 

    在屬性(properties)窗口中設置:Auto3Dtrue Font選一種True Type字體。

 

    該程序是把代碼加到FormClick事件中,經過先打印字體的陰影部分,再打印出字體,以實現陰影字體效果的。試運行該程序,單擊窗體後,即呈現出陰影字體Software Weekly

 

 

 

 

VB中製做單獨程序封面的兩種方法

遼寧鐵嶺 金永濤

 

    這裏所謂的單獨封面,是隻獨立應用程序窗口自己的一個窗口,這個窗口在程序運行時首先彈出屏幕,用於裝飾程序自己,或簡單的演示一下程序的優越性。這樣的封面在不少專業的WINDOWS程序中均存在,在VB中可有兩種簡單的方法實現這一功能。

 

 

第一種方法:多窗體編程方法

 

    此方法是一般採用的方法,即在程序中建立兩個或兩個以上的Form窗體,把其中的一個做爲專門的程序封面製做場所,具體方法:

 

    1、建立一個新項目Form1,並在此窗體內安放Command1命令按鈕,在Command1-Click()事件中輸入結束程序代碼「END」

 

    2、單擊菜單的「Insert"項目,加入一個新窗體Form1

 

    3、雙擊Form1窗體空白處,在Form1-Load()事件中輸入以下代碼,用於隱藏主窗體Form1,置第二窗體爲最大模式,並在運行程序首先顯示和二窗體:

 

Private Sub Form-Load () ’隱藏主窗口

 

Form1.Visible = 0 ’窗口2最大模式

 

Form2.WindowState =2 ’顯示窗口2

 

Form2.Show

 

End Sub

 

    4 在窗體Form2中定義全程變量:

 

Dim strr1 As String

 

Dim i As Integer

 

    5、在窗體Form2中放入一個時間控件Timer1

 

    6、在窗體Form2中的Form-Load ()事件中輸入如下代碼,用於在窗體2中顯示圖像,並置時間控件頻率:

 

Private Sub Form-Load ()

 

Form2.Picture = LoadPicture("c:/windows/setup.bmp")

 

Timer1.Interval = 10

 

i =0

 

End Sub

 

    7、在時間控件Timer1- Timer1()事件中進行程序封面的製做工做,演示簡單的動畫,並控制此動畫運行一段時間後自動中止,關閉程序封面,返回程序主窗口;下面的代碼實如今一個圖片上隨機顯示字符串,顯示30次字符串後自動退出。

 

Private Sub Timer1-Timer ()

 

Strr1 = "程序封面演示「

 

With Form2

 

.Font.Transparent =True ’透明顯示字符

 

.Font.Size = Rnd *30+10 ’隨機變化字號

 

.Font.Italic =True ’斜體有效

 

.ForeColor=RGB(Rnd*256,Rnd*256,Rnd*256) ’隨機變化前景

 

.FontName =Screen.Fonts (Rnd*7+14) ’隨機變化字體

 

End With

 

hh=Form2.TextHehght (strr1) ’取字符串高度

 

ww= Form2.TextWidth (strr1) ’取字符串寬度

 

x=Rnd * ( Form2.ScaleWidth-ww) ’隨機改變座標

 

y=Rnd *( Form2.ScaleHeight-hh)

 

Form2.Current X=x

 

Form2.Current Y=y

 

Form2.Print strr1 ’顯示字符

 

i = i +1 ’計數

 

If i >30 Then

 

Unload Me ’關閉封面

 

Form1.Show ’調入主窗口

 

Timer1.Enabled =False ’關閉時間控件

 

End If

 

End Sub

 

 

 

    8、爲了可以人爲地控制程序封面的停留時間,可在窗體Form2鼠標單擊事件中安放退出封面代碼:

 

Private Sub Form-Click ()

 

Unload Me

 

Form1.Show

 

Timer1.Enabled =False ’關閉時間控件

 

End If

 

End Sub

 

    至此工做所有完成,當運行程序時,首先彈出程序封面,封面上顯示一幅·BMP圖像,以後在此圖像上進行隨機字符串的顯示,字符串的位置、字體、字號、前景色等值都是隨機變化的,顯示30次後自動關閉封面返回主窗口,演示過程當中用鼠標單擊窗口也會返回主窗口,在主窗口中按下結束按鈕退出程序。具體操做時還有不少其它技巧,好比能夠置第二個窗體爲主窗體,這樣運行時可自動先彈出程序封面,可省略隱藏窗體和調入窗體的過程,另外第二窗體也能夠在程序運行時由代碼動態生成,這樣編程時複雜一些,但有利於程序代碼的管理;程序封面的具體制做過程,有許多動態圖像控制方法能夠使用,只要靈活動用VB的做圖方法,再加上一些必要的API函數的配合,會製做出理想的程序封面。

 

 

 

第二種方法:隱藏控件方法

 

    多窗口編程存在着必定的複雜性,須要對多個窗體的·Frm文件進行管理,編碼時還須要頻繁地在多個窗口間進行轉換。實際上經過一個窗體也能夠編制出相似的封面效果。基本原理就是在程序運行時首先經過VISIBLE屬性隱藏所有控件,而後在主窗體內進行程序封面設計和演示,延時必定時間再恢復全部控件的顯示,即達到了獨立程序封面的製做過程。因爲窗體內的控件不少,逐一隱藏或顯示很是繁瑣,可採用容器控件簡化操做過程,即把控件所有放到Frame1等控件上,這樣只要執行Frame1.Visible=0,便可使其上面的全部控件隱藏起來。

 

c因爲程序只涉及一個窗體,程序設計的大部分工做只是編碼過程,因此再也不分步介紹。在窗體Form1中安放一個時間控件Timer1 和一個容器控件Frame1,再在Frame1上安放一個命令按鈕Command1,具體程序設計時可把全部主程序工做控件放在Frame1上;以後把下面的代碼填入相應的事件之中便可完成所有程序設計工做。運行此程序後首先在全屏幕窗體內顯示圖像,並從左上角開始逐漸放大字符串「程序封面演示」,放大過程當中顏色發平生滑變化,造成美麗的拖尾效果,連續顯示5次後自動關閉封面,返回主程序窗口,一樣當即關閉程序封面,返回主程序窗口,單擊主窗體中的命令按鈕退出程序。

 

’定義全程變量

 

Dim i ,j As Integer

 

’退出程序按鈕

 

Private Sub Command1-Click ()

 

End

 

End Sub

 

’單擊窗體關閉封面

 

Private Sub Form-Click ()

 

Frame1.Visible =1 ’恢復容器控件

 

timer1.Enabled =False ’關閉時間控件

 

Form1.WindowState =0 ’恢復缺省窗口模式

 

End Sub

 

’準備工做

 

Private Sub Form -Load ()

 

Form1.WindowState =2 ’窗口最大化

 

Frame1.Width =Form1.Width ’調整容器控件尺寸

 

Frame1.Height =Form1.Height

 

Frame1.Top =0 ’調整容器控件位置

 

Frame1.Left =0

 

Frame1.Visible =0 ’隱藏容器控件

 

timer1.Interval =10 ’置時間頻率

 

Form1.Picture =LoadPicture ("c:/windows/setup.bmp") ’裝入圖像

 

Form1.ScaleMode=3 ’置座標刻度

 

Form1.FontName =「黑體」置字體名稱

 

End Sub

 

’封面製做 (動畫演示)

 

Private Sub timer1-Timer ()

 

Strr ="程序封面演示"

 

With Form1 ’透明顯示

 

.Font.Transparent =True

 

.Font.Size = i + 1 ’放大字號

 

.Font.Italic =True ’斜體有效

 

.ForeColor=RGB(i*3,56,256-i*3) ’平滑變化顏色

 

End With

 

string =strr

 

Form1.Current X=i ’連續改變座標

 

Form1.Current Y=i

 

Form1.Print stringg ’顯示字符串

 

i = i +1

 

If i >72 Then ’放大到72號字

 

j =j +1 ’循環計數

 

i =0

 

Form1.Current X=72

 

Form1.Current Y=72

 

Form1.ForeColor =RGB(255,56,0) ’從新顯示一次字符

 

Form1.Print stringg

 

End If

 

If j =5 Then ’動畫計數

 

Frame1.Visible =1 ’顯示容器控件

 

timer1.Enabled =False ’關閉時間控件

 

Form1.WindowState=0 ’恢復窗口模式

 

End If

 

End Sub

 

    以上方法及程序在WINDOWS 95系統下,在VB4.0環境下調試經過。

 

 

 

VB實現全屏幕圖形界面及動態功能提示

王華 張暉 黃潤髮

 

 

1、 全屏幕圖形界面設計

 

    圖形界面是現代軟件中人機交互的主要手段。爲了追求界面的統一和美觀,在軟件開放過程當中,圖形界面大多采用全屏幕構圖方式。這是經過將窗體的邊框設置爲無邊框(BorderStyle=None),將窗體顯示模式設置爲極大化(WindowState=Maximized)來實現的。

 

    當一個窗體界面的設計中要容納多張圖片和多個控制時,將出現窗體顯示速度明顯變慢的現象,嚴重影響了程序運行的流暢性。爲了解決這一問題,在開放過程當中,採用了一種將【界面設計窗體】與【功能實現窗體】分開處理的方法。

 

    在【界面設計窗體】中,首先按功能的須要和界面設計的創意,將所需的大量圖片和控制在屏幕上安排好,選擇美觀的字體、顏色、線型,對屏幕界面進行設計、修飾加工;而後在其全屏幕運行的狀態下,利用剪貼技術,將這一設計完成的圖形界面全屏幕複製到剪貼板上;接着將這一屏幕映象做爲一張圖片粘貼在【功能實現窗體】的背景上。這樣,從外觀上看,兩個窗體的形狀徹底相同,而在屏幕的顯示速度上,後者明顯加快。這時,【功能實現窗體】中的控件已變成一個象徵性的圖標,對它的操做,可在控制圖標的對應位置上設置一個Image 類型的圖象框,經過對圖象框的操做,來代替原先對控制對象的操做。

 

    採用這種方法,使窗體界面設計的靈活性大大增長,能夠任意發揮,而不用擔憂控件、圖片太多,影響窗體的顯示速度。但採用這種方法,將不可避免地增長應用程序自己所佔的存儲容量,這是以容量換取速度必須付出的代價。

 

2、 動態功能提示信息的實現

 

    在現代軟件設計中,多數功能圖標、按鈕都在界面上直接肯定其對應的名稱,同時也提供了動態提示的功能,即當鼠標移至某一控件時,或使鼠標的形狀用一具備象徵意義的圖標代替,或自動出現一條文字提示,下面介紹一下如何實現這種先進的提示模式。

 

    動態改變鼠標的圖形形狀,是經過控件的MousePointer屬性設置爲13(自定義),而後在MouseIeon屬性中選取一ICO圖標文件來完成的;動態文字提示功能是利用控件的MouseMove事件來實現的:將功能提示處理程序設計在對應的MouseMove事件過程當中,當鼠標移動到該控件範圍區域時,便可觸發程序執行,完成動態功能提示;爲了防止處理程序反覆觸發,必須設置一控制開關,使處理程序只在鼠標第一次觸發該控件區域時被執行;取消功能提示的處理程序設計在窗體的MouseMove事件中,說明程序以下:

 

Dim FirstTouch As Boolean '防止反覆觸發處理程序的控制變量

 

Private Sub ControlObject- MouseMove ()

 

If FirstTouch Then

 

FirstTouch =False '顯示功能提示字符

 

End Sub

 

 

 

Private Sub Form- MouseMove ()

 

FirstTouch =True '取消功能提示字符

 

End Sub

 

 

 

Visual Basic窗體背景花紋的實現

 

    咱們在開發軟件過程當中,爲提升軟件的商品化程度,感受到界面的美觀程度是一個軟件可否得到成功的一個重要因素,咱們仔細研究了一些成功的商品化軟件,從這些軟件上能夠看到,程序窗口背景能顯示出很是美麗的、富有立體感的花紋。而採用Visual Basic進行窗體設計,若只按照系統提供的功能,只能從有限的幾種顏色中選擇一種顏色或採用程序繪製一些簡單的線條。而想實現立體感很強的紋理圖案,通常只能採用窗體的PICTURE屬性調用位圖文件,使用這種方法實現有許多缺點 ,其一是窗體大小受位圖大小的限制,調整起來麻煩,不具備通用性和靈活性;其二是浪費資源,由於花紋圖案基本上是重複圖案,採用與窗體一樣大小的位圖是一種浪費。

 

    下面介紹一種窗體背景花紋實現的方法。在窗體上創建一個網格控件,設定網格行不可見,去掉固定行和固定列,用程序實現網格控件與窗體一樣大小,並隨窗體大小的改變而改變。而後設計一個花紋圖案,造成BMP位圖文件(本文程序使用文件Pict1.bmp),或者從其它圖象中截取一段圖案,也能夠利用Windows系統提供的圖案(如c:/windows/Tiles.bmp),將其調入Picture控件。設定網格的每一個單元與該圖案大小相同,使單元的數量正好覆蓋整個窗體背景,再將全部單元均顯示該圖案。經過子程序Backpict()實現以上過程,不論圖案大小、窗體大小,程序都能自動調整網格控件大小和網格單元大小及單元數量。

 

    該程序在Visual Basic 5.0上調試成功。

 

    1.新建窗體Form1,屬性以下:

 

    Caption =「背景花紋的實現」

 

    Borderstyle=3(無最大、最小化按鈕)

 

    2.建網格控件Grid1,它的位置和大小將在程序中設置(與Form1一樣大),屬性爲:

 

    Enabled = False(焦點不會落在網格控件Grid1上)

 

    Fillstyle=1(改變全部單元Text特性)

 

    Fixedcols=0(無固定行)

 

    Fixedrows=0(無固定列)

 

    Gridlines = False(網格行不可見),

 

    Visible = True

 

    3.創建圖象控件Picture1,程序運行時將背景花紋基本圖案放入其中,屬性爲

 

    Visible = False(不可見)

 

    Autosize = True(自動調整大小)

 

    4.控件中加入Sheridan 3D Controls,選取其中的三維命令按鈕SSCommand,創建兩個按鈕

 

    SSCommand1.Caption=「退出」

 

    SSCommand2.Caption=「更換背景」(演示不一樣的背景圖案)

 

    它們的屬性Picture可調用與背景相同或不一樣的圖案,若是使用普通的命令按鈕控件Command也可,只是命令按鈕無背景圖案。

 

    5.創建背景圖案造成子程序:

 

    Dim pictfile As String '位圖文件名

 

    Dim FILEPATH As String '文件路徑

 

    Sub Backpict(pictfile)

 

    picture1.ScaleMode = 3

 

    Form1.ScaleMode = 3

 

    picture1.Picture = LoadPicture(pictfile)

 

    '網格控件覆蓋整個窗體背景

 

    grid1.Top = -1

 

    grid1.Left = -1

 

    grid1.Width = Width

 

    grid1.Height = Height

 

    grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) + 1

 

    grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) + 1

 

    '全部單元大小等於基本圖案大小

 

    For i = 0 To grid1.Cols - 1

 

    For j = 0 To grid1.Rows - 1

 

    grid1.ColWidth(i) = picture1.ScaleWidth * 15

 

    grid1.RowHeight(j) = picture1.ScaleHeight * 15

 

    Next j

 

    Next I

 

 

    '選定全部單元

 

    grid1.SelStartCol = 0

 

    grid1.SelStartRow = 0

 

    grid1.SelEndCol = grid1.Cols - 1

 

    grid1.SelEndRow = grid1.Rows - 1

 

    grid1.Picture = Picture1.Picture

 

    End Sub

 

 

    6.窗體主程序

 

Private Sub Form_Load()

 

Private Sub Form_Load()

 

 

'獲得運行程序路徑名,路徑名後帶反斜槓

 

If Right(App.Path, 1) <> "/" Then

 

filePath = App.Path & "/"

 

Else

 

filePath = App.Path

 

End If

 

 

'窗體初始顯示由Tiles.bmp基本圖案組成的背景

 

pictfile = "c:/windows/Tiles.bmp"

 

backpict (pictfile)

 

End Sub

 

    7.退出程序命令按鈕

 

Private Sub SSCommand1_Click()

 

End

 

End Sub

 

    8.演示不一樣的底紋圖案

 

Private Sub SSCommand2_Click()

 

 

 

'兩種背景圖案交替演示

 

If pictfile = filePath & "Pict1.bmp" Then

 

pictfile = "c:/windows/Tiles.bmp"

 

Else

 

pictfile = filePath & "Pict1.bmp"

 

End If

 

Backpict (pictfile)

 

End Sub

 

 

VB編程的一些心得

 

 

    在大學做畢業設計的課題是編制一個教學軟件,因此很天然地和VB這種易學、易懂、界面友好漂亮的語言打上了交道。在編寫的過程當中固然遇到了許多的問題,這裏將一些簡單的小程序寫下來與喜好編程的朋友們分享。

 

1、封面

 

    封面的設計是這樣的,先出現一窗體,上面爲你喜歡的圖案。而後出現一艘從左向右行駛着的船。屏幕上方從兩側分別移動出「歡迎」兩個字。

 

    具體的製做方法是:把預先選好的背景圖案裝入封面窗體中,窗體命名爲CAI。再分別在三個圖像控件(image)中裝入預先製做好的位圖「歡」、「迎」和船型圖案。而後把三個image放置在初始位置( 圖案剛在窗體出現時的位置),並把它們的可視屬性都設置爲「false」。程序以下:

 

 

Sub Form_load()

 

cai.Show ′顯示封面窗體

 

Dim i ′定義變量

 

image3.visible=True ′船型圖像控件出現

 

a1: If image3.Left < 6120 Then

 

6120爲船移動到屏幕右邊的座標,此值能夠隨須要選取

 

image3.Move image3.Left50

 

′移動此圖像控件如嫌移動慢,可改變移動值

 

Goto a1

 

End If

 

image1.visible=True ′「歡」字出現

 

a2: If image1.Left < 2120 Then

 

2120爲「歡」字移動到屏幕中間的位置

 

image1.Move image1.Left50 ′移動此圖像控件

 

Goto a2

 

End If

 

image2.visible=True ′「迎」字出現

 

a3: If image2.Left > 5420 Then

 

5420爲「迎」字移動到屏幕中間的位置

 

image2.Move image2.Left50 ′移動此圖像控件

 

Goto a3

 

End If

 

For i=1 To 10000

 

′使窗體暫停一段時間時間長短可經過改變循環次數實現

 

Next i

 

menul.Show ′顯示程序主窗體

 

Unload cai ′卸載封面窗體

 

End Sub

 

 

2、簡單的「動畫」

 

    點擊一3D按鈕後,屏幕表現光線平行進入一玻璃管,在管中有一散射中心,有的光線射到此中心後反射到管的初始端。程序以下:

 

 

Sub Command3Dl_Click()

 

Dim i, j, k, m, n ′定義變量

 

For i=2080 To 5520

 

′顯示出三條線,直到圖像中的散射中心處,顏色爲黑色

 

Line(2080,2760)(i,2760),RGB(0, 0, 0)

 

Line(2080,2860)(i,2860),RGB(0, 0, 0)

 

Line(2080,2660)(i,2660),RGB(0, 0, 0)

 

Next i

 

For j=5520 To 4800 Step1 ′反射光線第一次射到管壁上

 

Line(5520,2760)(j,2760(5520j).33333333),RGB

 

(255, 0, 0) ′反射光線,顏色爲紅色

 

Line(5520,2660)(5520(5520j),2660),RGB(0, 0, 0)

 

Line(5520,2860)(5520(5520j),2860),RGB(0, 0, 0)

 

′沒有遇到散射中心的兩條光線,爲黑色,繼續前進

 

Next j

 

For k=4800 To 3360 Step1 ′反射光線第二次射到管壁上

 

Line(4800,2520)(k,2520(4800k).33333333),

 

RGB(255, 0, 0) ′反射光線,顏色爲紅色

 

Line(6240,2660)(6240(4800k),2660),RGB(0,0,0)

 

Line(6240,2860)(6240(4800k),2860),RGB(0,0,0)

 

′沒有遇到散射中心的兩條光線,顏色爲黑色

 

Next k

 

For m=3360 To 2080 Step1 ′反射光線第三次射到管壁上

 

Line(3360,3000)(m,3000(3360m).33333333),

 

RGB(255, 0, 0) ′反射光線,顏色爲紅色

 

Next m

 

End Sub

 

3、封底

 

    封底的設計是:先出現全黑的屏幕,而後從上至下逐漸拉出白底紅字的「再見」的字樣。先按要求在畫板中作一個BMP圖,上面寫着「再見」。而後在一名爲BYE的窗體中加入一個全屏大的Picturel, BMP圖裝入。程序以下:

 

Sub Form_Load()

 

Dim i ′定義變量

 

bye.Show ′封底出現

 

Unload menu1 ′卸載主菜單

 

al: If picture1.Height < 7130 Then 7130爲圖的高度

 

picturel.Height=picture1.Height50 ′下拉屏幕

 

GoTo al

 

End If

 

For i=1 To 20000 ′使窗體暫停一段時間

 

Next i

 

End ′結束全部操做

 

End Sub

 

 

 

處理過程時的鼠標顯示

 

 

    爲讓你的程序更加專業一點,咱們每每須要在程序處理過程時的鼠標形狀顯示爲「沙漏」狀態。咱們通常的方法是在子程序的開始及結尾編程來改變鼠標形狀,這樣十分煩瑣且容易忘記。咱們還能夠如下面的方法來實現這一目標:

 

    1、建立一個新類,命名爲:CHourGlass

 

    2、在此類中加入如下代碼:

 

      Private Sub Class_Initialize()

 

      Screen.MousePointer = vbHourglass

 

      End Sub

 

      Private Sub Class_Terminate()

 

      Screen.MousePointer = vbDefault

 

      End Sub

 

    3、在子程序的開始加入下面代碼:

 

      Dim MyHourGlass As CHourGlass

 

      Set MyHourGlass = New CHourGlass

 

 

 

 

       0

>>上篇文章:VB編程技巧幾例

 

 

>>下篇文章:VB實現全屏幕圖形界面及動態功能提示

 

 

 

 

『關閉窗口』

************************************************************************

文章瀏覽時的廣告

文章瀏覽廣告

VB應用程序訪問SQL Server方法探討 

如今加入 http://14.66.102.214 

VB應用程序訪問SQL Server方法探討

 

摘要

本文討論了Visual Basic應用程序訪問SQL Server數據的幾中經常使用的方法,分別說明了每種方法的內部機理並給出了每種方法的一個簡單的實例,最後比較了每種方法的性能和優缺點。

 

引言

 

Microsoft Visual Basic(簡稱VB)做爲一種面向對象的可視化編程工具,具備簡單易學的,靈活方便和易於擴充的特色。並且Microsoft爲其提供了與SQL Server通訊的API函數集及工具集。所以它愈來愈多地用做大型公司數據和客戶機—服務器應用程序的前端。與後端的Microsoft SQL Server相結合,VB可以提供一個魯棒的、高性能的客戶機—服務器方案。

 

使用Visual Basic做爲前端開發語言,與SQL Server接口有三種經常使用的方法,即:

 

*數據訪問對象/Jet

 

*ODBC API編程

 

*使用SQL ServerVisual Basic(VBSQL)DBAPI編程

 

本文將討論這三種VB應用程序管理SQL Server數據的方法,並比較每種方法的性能和優缺點。

 

方法1. 數據訪問對象/JetVisual Basic支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能最好的管理客戶機椃衿髦淶畝曰胺絞劍酚行磯嚶諾恪J褂?/FONT>DAOs訪問SQL Server的過程以下:應用程序準備好語句並送至JetJet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器並與之通信,驅動程序管理器(ODBC.DLL)通地調用驅動器(SQLSRVR.DLL)的函數,實現鏈接到數據源,翻譯並向SQL Server提交SQL語句且返回結果。

 

下面是一個用DAOs訪問SQL ServerVB實例。

 

'Form Declarations

 

Dim mydb As Database

 

Dim mydynaset As Dynaset

 

Private Sub Form_Load()

 

Set mydb=OpenDatabase("",Fa|se,Fa|se,"ODBC;DSN=Myserver;WSID=LCL;DATABASE=sa|es")

 

Set mydynaset=mydb CreateDynaset("Select*from Customers")

 

End Sub

 

上述例子是以非獨佔、非只讀方式打開sales數據庫,並檢索Customers表中的全部字段。OpenDatabase函數的最後一個參數是ODBC鏈接字符串參數,它指明瞭Microsoft Access鏈接到SQL Server所須要知道的一些內容。其中「DSN」爲數據源名,「WSID」爲工做站名,「DATABASE」爲所要訪問的數據庫名。

 

方法2.ODBC API編程

 

ODBC(Open Database Connectivity)的思想是訪問異種數據庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱爲驅動程序管理器(ODBC.DLL)的動態鏈接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來經過驅動器反過來通來驅動器(SQLSRVR.DLL)把它們送到服務器中。

 

ODBC API編程,通常要用到如下一些函數。下面列出了經常使用的函數以及它們的功能。

 

下面的代碼使用上面一些函數先登陸到一個服務器數據庫,併爲隨後的工做設置了語句句柄。

 

Global giHEnv As Long

 

Global giHDB As Long

 

Global giHStmt As Long

 

Dim myResult As integer

 

Dim myConnection As Srting

 

Dim myBuff As String*256

 

Dim myBufflen As Integer

 

If SQLA||ocEnv(giHEnv)<>SQL_SUCCESS Then

 

MsgBox"A||ocation couldn't happen!"

 

End if

 

if SQL||ocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then

 

MsgBox "SQL Server couldn't connect!"

 

End if

 

myConnection="DSN=myServer;UID=|c|;PWD=;APP=ODBCTest;WS|D=LCL;DATABASE=sales"

 

myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),

 

myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQUIED)

 

myResult=SQLA||ocStmt(giHDS,giHStmt)

 

myResult=SQLFreeStmt(giHStmt,SQL_COLSE)

 

rsSQL="Select*from Customers Where City="Wuhan""

 

myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))

 

方法3.使用VBSQLDBAPI編程

 

DB庫是SQL Server的本地APISQL ServerVisual Basic(VBSQL)Visual Basic程序員提供API。從必定意義上說,VBSQL是鏈接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含如下三個文件:

 

VBSQL.VBX 包含庫函數,具備訪問重要的消息和處理錯誤的能力

 

VBSQL.BI 包括全部的常量和變量說明

 

VBSQL.HLP Windows幫助文件,使用VBSQL的指南

 

使用VBSQL時,必需將VBSQL.BI加入到Visual Basic工程文件中,並確保VB程序運行時有VBSQL.VBX文件。 一個典型的VBSQL對話中,通常要用到如下這些函數。

 

<div align="center"><center><table border="0" width="100%">

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; 函數&nbsp;&nbsp;&nbsp; </td>

 

<td><p ALIGN="JUSTIFY">功能 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLALLocEnv </td>

 

<td><p ALIGN="JUSTIFY">初始化ODBC環境,返回環境句柄 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLALLocConnect </td>

 

<td><p ALIGN="JUSTIFY">爲鏈接句柄分配內存並返回鏈接句柄 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLConnect </td>

 

<td><p ALIGN="JUSTIFY">鏈接一個SQL數據資源 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLDriverConnect </td>

 

<td><p ALIGN="JUSTIFY">鏈接一個SQL數據資源,容許驅動器向用戶詢問信息</td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLALLocStmt </td>

 

<td><p ALIGN="JUSTIFY">爲語句句柄分配內存並返回語句句柄 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLExecDirect </td>

 

<td><p ALIGN="JUSTIFY">SQL語句送到服務器 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLFetchAdvances </td>

 

<td><p ALIGN="JUSTIFY">到結果集的下一行(或第一行) </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLGetData </td>

 

<td><p ALIGN="JUSTIFY">從結果集的特定的一列取回數據 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLFreeStmt </td>

 

<td><p ALIGN="JUSTIFY">釋放與語句句柄相關的資源 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLDisconnect </td>

 

<td><p ALIGN="JUSTIFY">切斷鏈接 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLFreeConnect </td>

 

<td><p ALIGN="JUSTIFY">釋放與鏈接句柄相關的資源 </td>

 

</tr>

 

<tr>

 

<td><p ALIGN="JUSTIFY">&nbsp;&nbsp;&nbsp; SQLFreeEnv </td>

 

<td><p ALIGN="JUSTIFY">釋放與環境句柄相關的資源 </td>

 

</tr>

 

</table>

 

</center></div>

 

通常的DBAPI編程的過程是這樣的:先經過調用SqlInitDB庫進行初始化,再調用SqlConnection打開一個鏈接,而後就可作一些工做。下面的代碼是一個初始化DB庫並登陸到服務器的通用例程。

 

Private Sub InitializeApplication()

 

DBLIB-VERSION=SqlInit()

 

If DBLIB_VERSION=""Then

 

MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATION

 

End

 

End if

 

End Sub

 

Private Function LoginToServer() As integer

 

loginToServer=SUCCEED

 

Status%=SqlSetloginTime%(loginTimeOut)

 

If giSqlConn<>0 Then

 

SqlClose(giSqlConn) '關閉已打開的鏈接

 

giSqlConn=SqlOpenConnection(gsServerName,gsLoginID,gsPassword,ProgramName, ProgramName)

 

If giSqlConn<>o Then

 

liresult=SqlUse(giSqlConn,"Sales")

 

Else

 

LogintoServer=FAIL

 

End If

 

End Function

 

性能比較

 

以上三種訪問SQL Server的方法各有各的特色。DAOs方法是基於對象的,於是便於使用,可是它從Visual BasicSQL Server的最慢的方式。ODBC APIVBSQL方法從本質上講是基於程序的。ODBC API方法通用性好,容許最強的互操做性,編程簡單,但速度慢於VBSQL方法。VBSQL方法經過VBSQL控件,提供了重要的SQL Server前端應用程序所需的靈活性、強大功能和良好性能。它具備真正的事件驅動及錯誤處理能力,徹底支持異步處理、遊標和計算列等。這些都是VBSQL方法超出其它方法的優點,但其編程稍複雜。至於實際使用哪種接口方式,在很大程度上依賴於用戶的應用程序的具體狀況而定。

 **********************************************************************文章瀏覽廣告

VB編程的一些心得 

如今加入 http://14.66.102.214 

在大學做畢業設計的課題是編制一個教學軟件, 因此很天然地和

VB這種易學、易懂、界面友好漂亮的語言打上了交道。 在編寫的

過程當中固然遇到了許多的問題, 這裏將一些簡單的小程序寫下來

與喜好編程的朋友們分享。

1、封面

封面的設計是這樣的,先出現一窗體,上面爲你喜歡的圖案。

後出現一艘從左向右行駛着的船。 屏幕上方從兩側分別移動出「

歡迎」兩個字。

具體的製做方法是:把預先選好的背景圖案裝入封面窗體中,

體命名爲CAI。再分別在三個圖像控件(image) 中裝入預先製做好

的位圖「歡」、「迎」和船型圖案。而後把三個image放置在初始

位置( 圖案剛在窗體出現時的位置),並把它們的可視屬性都設

置爲「false」。程序以下:

Sub Form_load()

cai.Show  '顯示封面窗體

Dim i  '定義變量

image3.visible=True '船型圖像控件出現

a1: If image3.Left <6120 Then '6120爲船移動到屏幕右邊的座標,此值能夠隨須要選取 image3.Move image3.Left50 '移動此圖像控件如嫌移動慢,可改變移動值 Goto a1 End If image1.visible="True" '「歡」字出現 a2: If image1.Left < 2120 Then '2120爲「歡」字移動到屏幕中間的位置 image1.Move image1.Lefe50 '移動此圖像控件 Goto a2 End If image2.visible="True" '「迎」字出現 a3: If image2.Left> 5420 Then

'5420爲「迎」字移動到屏幕中間的位置

image2.Move image2.Left50 '移動此圖像控件

Goto a3

End If

For i=1 To 10000 

'使窗體暫停一段時間時間長短可經過改變循環次數實現

Next i

menul.Show  '顯示程序主窗體

Unload cai  '卸載封面窗體

End Sub

2、簡單的「動畫」

點擊一3D按鈕後,屏幕表現光線平行進入一玻璃管, 在管中有一

散射中心,有的光線射到此中心後反射到管的初始端。程序以下:

Sub Command3Dl_Click()

Dim i, j, k, m, n  '定義變量

For i=2080 To 5520    

'顯示出三條線,直到圖像中的散射中心處,顏色爲黑色

Line (2080,2760)(i,2760),RGB(0, 0, 0)

Line (2080,2860)(i,2860),RGB(0, 0, 0)

Line (2080,2660)(i,2660),RGB(0, 0, 0)

Next i

For j=5520 To 4800 Step1 '反射光線第一次射到管壁上

Line (5520,2760)(j,2760(5520j)*.33333333),RGB

(255, 0, 0) '反射光線,顏色爲紅色

Line (5520,2660)(5520(5520j),2660),RGB(0, 0, 0)

Line (5520,2860)(5520(5520j),2860),RGB(0, 0, 0)             

'沒有遇到散射中心的兩條光線,爲黑色,繼續前進

Next j

For k=4800 To 3360 Step1 '反射光線第二次射到管壁上

Line (4800,2520)(k,2520(4800k)*.33333333),

RGB(255, 0, 0)    '反射光線,顏色爲紅色

Line (6240,2660)(6240(4800k),2660),RGB(0, 0, 0)

Line (6240,2860)(6240(4800k),2860),RGB(0, 0, 0)

  '沒有遇到散射中心的兩條光線,顏色爲黑色

Next k

For m=3360 To 2080 Step1 '反射光線第三次射到管壁上

Line (3360,3000)(m,3000(3360m)*.33333333),

RGB(255, 0, 0)          '反射光線,顏色爲紅色

Next m

End Sub

3、封底

封底的設計是:先出現全黑的屏幕, 而後從上至下逐漸拉出白底

紅字的「再見」的字樣。先按要求在畫板中作一個BMP圖,上面寫

着「再見」。  而後在一名爲  BYE 的窗體中加入一個全屏大的

Picturel,BMP圖裝入。程序以下:

Sub Form_Load()

Dim i  '定義變量

bye.Show  '封底出現

Unload menu1  '卸載主菜單

al: If picture1.Height <7130 Then '7130爲圖的高度 picturel.Height="picture1.Height50" '下拉屏幕 GoTo al End If For i="1" To 20000 '使窗體暫停一段時間 Next i End '結束全部操做 End Sub

文章瀏覽廣告

Visual Basic調用Windows API函數的應用舉例  

如今加入 http://14.66.102.214 

要】

       Visual Basic 調 Windows API 法,

       API 如:VB 取, 測。

 

       字】

       Windows Microsoft( ) 統。

       Visual Basic(VB) Microsoft( ) 具。

       API(Application Program Interface) 口。

       件( 如:DEMO.INI

 

      

 

1、 VB 調 API 法。

 

       (1) Declare 調 API 數, 值, Sub 程; 值, Function 數。

 

       注: API ./VB/WINAPI/WIN31API.HLP 中, Copy Paste 方。

 

       (2) API 後, 調 VB 樣。 意, 對, 機。

 

2、 VB 取。

 

       Windows .INI 的, INI 數, 中; 退 INI 中。Windows API GetPrivateProfileString WritePrivateProfileString 能。

 

       明:

       1 GetPrivateProfileString 明:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

 

       能: INI 數( 性) lpReturnedString 中。

 

      

      

      

       lpApplicationName

       String

      

       lpKeyName

       String

      

       lpDefault

       String

      

       lpReturnedString

       String

       nSize

       nSized

       Integer

       lpReturnedString

       lpFileName

       String

      

      

       Integer

       lpReturnedString

 

       2WritePrivateProfileString

       明:Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

 

       能: 數( 串)。

       值: 功, TRUE FALSE

 

3、 VB

 

       API GetWindowsDirectoryGetWinFlags,GetVersionGetSystemDirectory, 等, 使 例。

 

4、

 

       DEMO.PRJ

 

       一) DEMO.PRJ DEMO.BAS. DEMO.BAS 中。

 

       Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

 

       Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

 

       Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

       Declare Function GetKeyboardType Lib "user32" (ByVal nTypeFlag As Long) As Long

       Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

       Declare Function GetVersion Lib "kernel32" () As Long

       Declare Function GetWinflags Lib "kernel32" () As Long

 

       注:

 

GetWindowsDirectory Windows 徑。

 

GetSystemDirectory Windows 徑。

 

GetVersion Windows DOS 號。 Windows 號, Windows 號, DOS 號, DOS 號。

       4 GetWinflags: Windows 置。

 

      

      

       WF_80X87

       Intel

       WF_CPU386

       80386 CPU

       WF_CPU486

       80486 CPU

       WF_ENHANCED

       Windows 386

       WF_PMODE

       Windows

       WF_STANDARD

       Windows

       WF_WLO

       OS/2

 

       5GetKeyboardType(): 型,nTypeFlag=0 型。

      

      

       1

       IBM PC/XT

       2

       Olivetti "ICO" 盤(102 鍵)

       3

       IBM 盤(84 鍵)

       4

       IBM 盤(101 102 鍵)

       5

       Nokia 1050

       6

       Nokia 9140

       7

      

 

       6 調 API 便, 數。 中。

 

 

Function SysDir()

Temp = Space$(255)

StringLen = GetSystemDirectory(Temp, 255)

SysDir = Left$(Temp, StringLen)

End Function

___________________________________________________________________________

Function WinDir() As String

Temp = Space$(255)

StringLen = GetWindowsDirectory(Temp, 255)

WinDir = Left$(Temp, StringLen)

End Function

___________________________________________________________________________

Function KeyType()

KbType = GetKeyboardType(0)

Select Case KbType

       Case 1

       KeyType="IBM PC/XT,or compatible(83key)"

       Case 2

       KeyType="Olivetti 'ICO'(102key)"

       Case 3

       KeyType="IBM AT,or similar(84key)"

       Case 4

       KeyType = "IBM Enhance (101 or 102 keys)"

       Case 5

       KeyType = "Nokia 1050 or similar"

       Case 6

       KeyType = "Nokia 1050 or similar"

       Case 6

       KeyType = "Nokia 9140 or similar"

       Case 7

       KeyType = "Japan Keyboard"

       End Select

End Function

___________________________________________________________________________

Function Initial()

Form1.Left = Val(StringFormINI("Form", "left", "0 ", "c:/windows/demo.ini"))

Form1.Top = Val(StringFormINI("Form", "top", "0 ","c:/windows/demo.ini" ))

Form1.WindowState = Val(StringFormINI("Form", "windowstate", "0 ","

c:/windows/demo.ini"))

End Function

_______________________________________________________________________

Function SaveInfor()

x = WritePrivateProfileString("Form", "left", Str$(Form1.Left),

   "c:/windows/demo.ini")

x = WritePrivateProfileString("Form", "top", Str$(Form1.Top),

   "c:/windows/demo.ini")

x = WritePrivateProfileString("Form", "windowstate", Str$

   (Form1.WindowState), "c:/windows/demo.ini")

End Function

___________________________________________________________________________

Function StringFormINI(SectionName As String, KeyName As String,

Default As String, FileName As String) As String

MaxStringLen% = 255

returnedstr$ = Space$(MaxStringLen%)

Result% = GetPrivateProfileString(SectionName, KeyName,

Default, returnedstr$, MaxStringLen%, FileName)

returnedstr$ = LTrim$(RTrim$(returnedstr$))

returnedstr$ = Left$(returnedstr$, Len(returnedstr$) - 1)

StringFormINI = returnedstr$

End Function

__________________________________________________________________________

Function WinVer()

ver& = GetVersion()

winhigh = ver& Mod 256

winlow = Int(ver& / 256) Mod 256

WinVer = ((winhigh * 100) + winlow) / 100

End Function

___________________________________________________________________________

 

Function DosVer()

ver& = GetVersion()

Temp = ver& / 65536

doshigh = Int(Temp / 256) Mod 256

doslow = Temp Mod 256

DosVer = ((doshigh * 100) + doslow) / 100

End Function

___________________________________________________________________________

Function CPU()

Flags&=GetWinFlags()

Match=1

Select Case Match

       Case (Flags& And &H8)/&H8

 

            CPU=486

       Case (Flags& And &H4)/&H4

 

            CPU=386

End Select

End Function

___________________________________________________________________________

Function Mode()

Flags&=GetWinFlags()

If flags& And &H20 Then

   Mode="Enhanced"

Else

   Mode="Standard"

End If

End Function

 

二) Form1.frm

Form1.Caption="System Information"

Sub Form_Paint()

Cls

Print

Print , "System Information"

Print

Print , "WindowsDir: ", WinDir()

Print , "SystemDir: ", SysDir()

Print , "WindowsVersion: ", WinVer()

Print , "DosVersion:  ", DosVer()

Print , "KeyboardType: ", KeyType()

End Sub

Sub Form_Load()

x = Initial()

 

End Sub

Sub Form_Unload(Cancel As Integer)

x = SaveInfor()

End Sub

 

 

       三) 序。( 486 Windows3.1 過)

       息, 退 左、 DEMO.INI 中, 時, 退 態。

       注: DEMO.INI

 

 

    [Form]

    Left=100

    Top=100

    Windowstate=0

 

 

       Windows 下。

       API 使 法, 用。 API 數, 力。

  *******************************************************************8

文章瀏覽廣告

第七章(2)★輸出(2 

如今加入 http://14.66.102.214 

好久沒有繼續VB教程了,也有不少初學VB的朋友來信留言要求繼續,提及來慚愧,不是有時候犯懶,就是雜物纏身,今天好不容易作在電腦前想敲幾個字,哪知打開VB5出現非法操做,卸載後從新安裝非法提示依然出現,真是豈有此理!Windows系統用了好久了,看來衝突實在是太多,但這麼久沒有更新,實在說不過去,此次就算是一次紙上談兵,帶來不便之處還請你們包涵。

 

上次爲你們講解了MsgBox的用法,此次我來說講其餘的輸出方法。

 

在程序中咱們若是想輸出執行的結果最常常要用到什麼對象,你可能會告訴我是文本框或標籤控件,但事實每每不是這樣,由於它們的顯示方法單調,不能把各類字體的文字、圖形結合在一塊兒,所以最符合要求的控件應該是圖片框(PictureBox),或直接就在Form自己上顯示,其中要用到一個很重要的方法:「Print」,它的用法是:

 

對象.Print Spc(n)/Tab(n);字符串表達式;……

 

其中Spc(),表示打印字符之間的空格,n表示空格數目,Tab()表示絕對列數,n表示列數,也就是說你能夠指定在那一列上打印,它們用「;」和字符串表達式分開,但也能夠是這樣:

 

對象.Print 字符串表達式1,字符串表達式2,……

 

用「,」隔開字符串,這樣系統就會按默認的(14列)爲一個輸出位。每使用一次Print方法,程序就會在指定的對象上打印一行,在用Print則在下一行打印,當對象是窗體時,對象能夠省略,例如打印一個表格:

 

(注意:要把使用Print的對象的Autoredraw屬性設爲True,咱們知道,當有多個窗口層疊時,哪一個窗口獲得焦點就會顯示到最上面,當它顯示時就是一種重繪的過程,Windows系統須要從新計算原來它的圖形界面,這是一個很是複雜的過程,不過在VB中只需用一個Autoredraw屬性就能夠作到了,不信的話能夠保持該屬性爲False,看看會怎樣?)

 

Private Sub Form_Load()

 

Print '空一行

 

FontUnderline = True

 

FontSize = 18

 

FontBold = True

 

Print , "中國VB聯盟成員列表"

 

Print

 

FontUnderline = False

 

FontSize = 10

 

Print Tab(3); "姓名"; Tab(15); "年齡"; Tab(25); "性別"; Tab(35); "我的簡介"

 

FontBold = False

 

Print Tab(3); "Mars"; Tab(15); "21"; Tab(25); ""; Tab(35); "……"

 

……………

 

……………

 

End Sub

 

更多的內容我將在下一章的用VB做圖中向你說明。

 

 

 

固然,在平時用文本框或標籤控件顯示輸出結果也是一種簡單的方法,這些和咱們之前講到的大同小異,也就再也不進行過多的介紹了,下面我來說講對字符串的格式化方法。

 

這裏要用到Format()函數,它能夠對字符串按照指定的形式輸出,也能夠用作數字、日期的格式化,方法是:

 

Format (表達式,[格式化表達式])

 

其中格式化的表達式能夠爲:「0」,「#」,「.」,「,」,「:」,「$」,以及「()+-E+E-」等等表示,下面我將舉一個小例子說明Format的全部功能(奇蹟!奇蹟!這時在打開VB5竟然非法操做消失了!):

 

請先創建一個項目文件,在Form1上添加兩個框架控件(Frame)和若干按鈕、文本框、無線鈕和標籤控件,具體如圖所示:(圖7-2-1):

 

 

 

其中有兩排八個按鈕爲Command1Index07,又有七個無線鈕Option1Index07,下面爲了可以使用,請爲它們修改Caption屬性,如圖7-2-2

 

 

 

而後加入以下代碼:

 

Dim FormatExp As String

 

Dim ThisTime As Date

 

Private Sub Command1_Click(Index As Integer)

 

FormatExp = FormatExp + Command1(Index).Caption

 

Text1.Text = FormatExp

 

End Sub

 

 

 

Private Sub Command2_Click()

 

a$ = Format("1234567890.0987654321", FormatExp)

 

Label1.Caption = "格式化後的數值:" + a$

 

Text1.Text = ""

 

FormatExp = ""

 

End Sub

 

 

 

Private Sub Form_Load()

 

ThisTime = Now

 

Label2.Caption = ThisTime

 

End Sub

 

 

 

Private Sub Option1_Click(Index As Integer)

 

Text2.Text = Format(ThisTime, Option1(Index).Caption)

 

End Sub

 

其中0#表明數值顯示的位數,不一樣的是若是定義格式化表達式的位數若是多於原表達式,則使用0則補0,使用#則省略0;「.」用來指定小數點的位置;其他字符用來分割數值,如「,」

 

結果以下圖:7-2-3

 

 

 

關於時間的格式化表達式的定義方法以下表:

 

格式符

含義

 

d

顯示不帶0的日期(131

 

dd

顯示帶0的日期(0131

 

ddd

SunSat格式顯示日期

 

dddd

SundaySaturday格式顯示日期

 

ddddd

以年月日標準格式顯示日期

 

/分鐘

m

顯示不帶0的月,若是後面緊跟hhh則顯示不帶0的分

 

mm

顯示帶0的月,若是後面緊跟hhh則顯示帶0的分

 

mmm

JanDec顯示月份

 

mmmm

January-December顯示月份

 

yy

以兩位數顯示年(0099

 

yyy

以四位數顯示年(19002040

 

 

好吧,第七章的內容就講完了,在第八章中我將把VB的簡單繪圖知識教給你們,下次再見!

 *************************************************************88

文章瀏覽廣告

第七章★輸出 

如今加入 http://14.66.102.214 

上一章裏,咱們討論的VB的輸人機制,此次咱們來集中討論VB中信息的輸出。

 

輸入和輸出是不可分割的,人們輸入的最終目的是但願計算機做出反應,任何一個程序都不可能避開這個問題,因此就算要完成一個最基本的程序,也要有輸出的部分,複雜的程序更是如此。

 

在輸入的一章裏,咱們學習的第一個輸入方法是InputBox,相應的在輸出中咱們第一個要接觸的是MsgBoxMessage Box),和InputBox類似,MsgBox也是簡化了的窗體,能夠以函數的形式返回操做。它的基本語法是:

 

MsgBox "顯示內容",按鈕值,"標題"

 

經過這個函數能夠產生一個標準的Windows消息框,象咱們平時常常接觸的「Yes/No」、「OK/Cancel」,「Retry/Abort/Ignore」等等,這些都是在按鈕值中設定的,按鈕值以下:

 

數值

含義

 

0

OK

 

1

OKCancel

 

2

AbortRetryIgnore

 

3

YesNoCancel

 

4

YesNo

 

5

RetryCancel

 

 

 

 

而且不一樣的消息能夠搭配不一樣的圖標,好比幫助文件用問號,通常提示用一個圈裏一個I等等,它們也是按鈕值的一部分:

 

數值

含義

 

16

表示危險

 

32

表示問號

 

48

表示警告

 

64

表示信息

 

 

 

 

可是如何既顯示按鈕也顯示相應的圖標呢,請看一下子下面的例子。前面說過,MsgBox是函數,那麼它就會有返回值,當你按下某個按鈕就會返回一個數值,以便對用戶不一樣動做的捕捉,返回值以下:

 

數值

含義

 

1

OK

 

2

Cancel

 

3

Abort

 

4

Retry

 

5

Ignore

 

6

Yes

 

7

No

 

 

 

 

說了這麼多,可能你已經不知所措了,不過看過下面的例子後,相信一切都會迎刃而解。

 

 

 

首先創建一個新項目文件,並添加如下對象(見圖71)――一個ButtonCommand1),兩個ComboBoxCombo1Combo2),不要對其屬性作更多的修改,只需把Command1Caption改成「Click Me」。這個程序的目的是自由組合上面的按鈕值,以顯示各類消息框,而且返回按下的按鈕,Combo1Combo2分別用來選擇按鈕值,首先在Form_Load中初始化程序:

 

Private Sub Form_Load()

 

Combo1.AddItem "OK"

 

Combo1.AddItem "OK and Cancel"

 

Combo1.AddItem "Abort,Retry and Ignore"

 

Combo1.AddItem "Yes,No,Cancel"

 

Combo1.AddItem "Yes,No"

 

Combo1.AddItem "Retry,Cancel"

 

Combo1.ListIndex = 0

 

Combo2.AddItem "危險"

 

Combo2.AddItem "詢問"

 

Combo2.AddItem "警告"

 

Combo2.AddItem "信息"

 

Combo2.ListIndex = 0

 

End Sub

 

ComboBox的用法已經在上一章中討論過,在此再也不贅述,ListIndex屬性用來把第一個元素放在選擇位置。

 

可是如何顯示須要的按鈕和圖標呢?很簡單,只需把它們相加,好比說要顯示OKCancel按鈕和警告的圖標,只需把148相加,獲得49便可,因而咱們在Command1中填寫這樣一行:

 

Private Sub Command1_Click()

 

message = MsgBox("顯示" & Combo1.List(Combo1.ListIndex) & "" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")

 

End Sub

 

由於圖標值是從16開始的因此要把Combo2ListIndex1再乘以16

 

小知識:按鈕值並不是簡單的相加

 

按鈕值並不是簡單的相加,咱們知道,在計算機裏最終的語言是機器語言,而機器語言是以01的二進制表示的,在這裏用到的實際上不是相加,而是邏輯操做符「OR」,你知道ORAND是怎樣工做的嗎?正如你所知,True And False獲得False,而True Or False獲得True,這是怎麼造成的呢?咱們有時也用0表明False,用1或-1表明True(其實,只要非零均可以表明True),而01在二進制中仍是自己,因而TrueFalse的運算就變成的0 1的運算,咱們能夠把And叫作補0運算,把Or叫作補1運算,當用And處理兩個二進制數的時候,它們逐位比較,若是相同的位上都是0或都是1則沒有變化,而若是一位上是0,另外一位上是1,最後結果上相應的位上就變成0。好比1010(十進制中10And 1101(十進制中13),最後就得1000(十進制中8),相同的Or亦是如此,只不過在不一樣的地方補1。在位數不一樣時,前面補0,你能夠在VB中試試看。但爲何要講這些呢,緣由是我不想讓你們真的覺得這個例子中就是相加,只不過碰巧它們的01處在不一樣的位置上,而且這個小知識在從此的位圖操做和API操做中頗有用處。

 

下面在來判斷用戶按下的按鈕。

 

Private Sub Command1_Click()

 

message = MsgBox("顯示" & Combo1.List(Combo1.ListIndex) & "" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")

 

Select Case message

 

Case 1

 

MsgBox "你按下了OK"

 

Case 2

 

MsgBox "你按下了Cancel按鈕"

 

Case 3

 

MsgBox "你按下了Abort按鈕"

 

Case 4

 

MsgBox "你按下了Retry按鈕"

 

Case 5

 

MsgBox "你按下了Ignore按鈕"

 

Case 6

 

MsgBox "你按下了Yes按鈕"

 

Case 7

 

MsgBox "你按下了No按鈕"

 

End Select

 

End Sub

 

運行程序,結果如圖7273

 

 

 

 

第七章未完待續

 

 

 

因爲時間倉促,此次就只能寫這麼多了,請你們多多原諒。--Mars

 *******************************************************8

文章瀏覽廣告

第六章(3)★輸入(3 

如今加入 http://14.66.102.214 

首先,我想先對第六章的拖拖拉拉表示歉意,一是由於它實在太長了,二也是由於我本身太懶了,今天寫幾個字,明天添兩筆,以至於寫了三次纔將它真正完成,還請你們原諒。

 

好,廢話少說,讓咱們趕快切入正題。上次咱們討論了無線鈕和檢查框的使用方法,相信你已經熟悉,由於它們實在太簡單了,如今讓咱們繼續「輸入」的最後幾個部分。

 

滾動條(ScrollBar)在視窗中也是一個不可缺乏的部分,因爲面積所限,咱們不得把屏幕上的內容滾來滾去,以顯示大量的內容,這就是咱們常常要用到的滾動條。但滾動條除去滾動窗口,還有一個很重要的做用――輸入,想一想你常常用到的一些家用電器上調節聲音或別的什麼東西的滑塊,你把它滑向大的一方音量就會增大,而你把它滑向小的一方音量就會減少,或者一個控制左右兩個音箱的均衡器,當滑塊在正中央的時候,兩個音箱的音量是相同的,當你把滑塊偏向一方時,音箱的音量有了大小之分,在Windows操做中,咱們也常常要用到相似的效果。

 

VB中提供了兩個常規的滾動條控件――VscrollHscroll,分別表明垂直的和水平的滾動條,它們只不過是方向不一樣而已,而它們的屬性,以及會發生的事件都是相同的。,滾動條有幾個特殊的屬性:

 

Value屬性,當滑塊挪動後停在某一位置時,就改變了滾動條的Value屬性。

 

MaxMin屬性,用來設置滾動條的最大值和最小值,譬如把Max設爲100,把Min設爲0時,滾動條的Value就在0100之間移動,當MaxMin倒置時,滾動條的方向也會相反,也就是說,當Max<Min時,原來Value增長的方向就會變成相反的方向。MaxMin也可設爲負值。

 

SmallChangeLargeChange屬性,當鼠標在滾動條兩頭的箭頭上單擊時,就會把滾動條向相應的方向挪動一點,這時用到的就是SmallChange屬性,當你把它設爲1時,每點一下,滾動條的Value就改變1;當鼠標在滾動條上點擊時,用到的就是LargeChange,當設爲10時,每點擊一下滾動條,Value就改變10

 

下面咱們看一個實例。

 

你們都知道,物體之因此會有顏色是由於物體表面的材料吸取了太陽光中的部分色光,而還有部分色光沒被吸取而被反射回來,它就成了咱們看到的顏色,黑色就是物體吸取了全部的太陽光的全部色光,沒有反射顏色,因此在咱們看來是黑的,而當物體反射了全部的色光,咱們看到的就是白色。在計算機中,顏色的表示就是象咱們剛纔描述的樣子,它把顏色分爲紅(R)、綠(G)和藍(B)。衆所周知,計算機的機器語言是使用二進制表示的,爲了方便查閱咱們看到的每每是十六進制代碼,一個字節包括兩位十六進制數字,從0255(十六進制表示0FF),而一個字節是由八位二進制數值表示(2^828次方),計算機中用分別用一個字節,也就是八位表示一種顏色,和在一塊兒也就是三個字節(24位)表示全部的顏色,這就是咱們平時常說的24位真彩,它一共能夠組成256×256×2562^24)種顏色,對於咱們的肉眼,是根本分辨不出來相鄰兩個不一樣的顏色的,好比用FFFFFF表示白色,就好象咱們剛纔說的物體反射了全部的色光,相反的能夠用000000表示黑色,它吸取了全部的色光,還能夠用FF0000表示紅色,在HTML語言中就是這樣表示顏色的。

 

小知識:如今你能夠根據你的顯卡的顯存來計算一下顯卡在24位真彩下能夠以多大的分辨率顯示,計算是這樣的,用顯存的字節數÷324位色)=顯示器寬的象素數×顯示器高的象素數,寬的象素數:高的象素數=43,好比4兆顯存,就應該是4×1024×1024÷31365×1024

 

 

 

在下面的小程序中,咱們經過三個滾動條分別表明RGB,滾動滾動條,將在右邊的圖片框中顯示相應的顏色,而且在下面的文本框中顯示顏色的十六進制數值。

 

如今,新建一個項目文件,在Form1中如圖612佈局控件,各控件屬性以下表:

 

 

 

HsrollBar

Name Hscroll1

 

Index 012

 

(共同屬性)

 

Max 255

 

Min 0

 

LargeChange 10

 

SmallChange 1

 

Label

Name Label1

 

Index 012

 

Index 0 Caption 「紅:」

 

Index 1 Caption 「綠:」

 

Index 2 Caption 「藍:」

 

Label

Name Label2

 

Caption 「顏色值」

 

TextBox

Name Text1

 

Text 「」

 

PictureBox

Name Picuture1

 

 

 

 

爲了把十進制數值換成十六進制數值,要使用一個叫作Hex()的函數,它把十進制數值轉化爲十六進制的字符,但對於只有一位的十六進制字符,這個函數並不在高位補零,爲了視覺上的正確,我設計了一個小函數幫助它給一位的十六進制字符補零.

 

程序代碼很簡單,見下:

 

Dim RedStr, GreenStr, BlueStr As String’RGB的字符

Dim RedNum, GreenNum, BlueNum As Integer’RGB的數值

 

 

 

Function GetColorValue() As String

 

‘得到輸入值

RedNum = HScroll1(0).Value

GreenNum = HScroll1(1).Value

BlueNum = HScroll1(2).Value

 

RedStr = Hex(RedNum)

If Len(RedStr) < 2 Then RedStr = "0" + RedStr’補零

 

GreenStr = Hex(GreenNum)

If Len(GreenStr) < 2 Then GreenStr = "0" + GreenStr

 

BlueStr = Hex(BlueNum)

If Len(BlueStr) < 2 Then BlueStr = "0" + BlueStr

 

GetColorValue = RedStr + GreenStr + BlueStr’合併

 

End Function

 

Private Sub Form_Load()

 

‘初始化程序

Text1.Text = GetColorValue

Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)'RGB函數返回顏色值

 

End Sub

 

 

 

Private Sub HScroll1_Change(Index As Integer)

 

‘當滾動條被改變時

Text1.Text = GetColorValue

Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)

 

End Sub

 

運行如圖613

 

 

 

列表框(ListBox)和複合列表框(ComboBox)也是咱們常常見到的視窗元素,咱們從它所列示的條目中選出所需的,兩種列表框只是在外觀上略有不一樣,但從本質和操做方法來講它們是很相象的,它們也有一些特殊的屬性:

 

List屬性,你能夠利於該屬性象列表框或複合列表框中添加條目,但也能夠在程序設計中經過AddItem方法添加。

 

ListCount屬性,返回列表框或複合列表框中條目的數目。

 

ListIndex屬性,表示列表框或複合列表框的第幾項條目。(從0ListCount-1

 

Sorted屬性,能夠經過該屬性對列表框或複合列表框中的條目根據字母順序排序。

 

MultiSelect屬性,0表示不能多選,1表示簡單多選,2表示寬展多選,僅限於列表框。

 

Columns屬性,表示條目是以一列顯示仍是兩列顯示,僅限於列表框。

 

Style屬性:表示列表框或複合列表框以何種風格顯示,兩者參數不一樣。

 

舉兩個簡單的例子。

 

例子一,創建一個新項目文件,在Form1上添加一個List控件,調整適當的尺寸,無需改變任何屬性。填寫如下代碼。

 

Private Sub Form_Load()

 

With List1

 

.AddItem "0-Default"

.AddItem "1-Arrow"

.AddItem "2-Cross"

.AddItem "3-I-Beam"

.AddItem "4-Icon"

.AddItem "5-Size"

.AddItem "6-Size NE SW"

.AddItem "7-Size NS"

.AddItem "8-Size NW SE"

.AddItem "9-Size WE"

.AddItem "10-Up Arrow"

.AddItem "11-Hourglass"

.AddItem "12-NoDrag"

.AddItem "13-Arrow And Hourglass"

.AddItem "14-Arrow And Question"

.AddItem "15-Size All"

 

End With

 

End Sub

 

 

 

Private Sub List1_Click()

 

MousePointer = List1.ListIndex’這裏的MousePointer是窗體全局內的屬性

 

End Sub

 

當你點在不一樣項上面鼠標指針也會隨着改變,如圖614

 

 

 

AddItem方法語法以下:

 

ListObject 「字符串」,數值

 

字符串後的數值能夠指定條目加入在第幾個條目的位置上,若是沒有的話,添加項將逐次排下去。

 

下面舉一個複合列表框的例子,例子經過選擇複合列表框中的選項來改變文本框的字體。請新建一個項目文件,在窗體中添加一個ComboBoxCombo1)和一個TextBoxText1),添加以下代碼。

 

Private Sub Combo1_Click()

 

Text1.FontName = Combo1.List(Combo1.ListIndex)

 

End Sub

 

 

 

Private Sub Form_Load()

 

With Combo1

 

.AddItem "宋體"

.AddItem "隸書"

.AddItem "黑體"

.AddItem "楷體"

.ListIndex = 0'把第一個條目做爲初始項

 

End With

 

Text1.FontSize = 30’放大字體

Text1.FontName = Combo1.List(0)’初始字體爲「宋體」

 

End Sub

 

 ************************************88

文章瀏覽廣告

第六章(2)★輸入(2 

如今加入 http://14.66.102.214 

在繼續上面的內容時,我想再回顧和強調幾個在字符串操做中常常函數:

 

先是幾個已經接觸過的,Mid()Asc()Len(),它們的語法分別是:

 

Mid(字符型,起始字符,長度)

 

返回子字符串,若是從字符串的第一個字符取起,起始字符爲1,依此類推。

 

Asc(字符型)

 

返回數值,若是參數不是一個字符,而是字符串(多個字符),將返回參數的第一個字符ASCII值。

 

Len(字符型)

 

返回字符串的長度。

 

下面我再爲你解釋幾個新的函數:

 

Left(字符串,長度)

 

將返回字符型,從字符串的第一個字符向左取字符串,與之相對應的是Right(),它將從字符串的最後一個字符向右取字符串。

 

Chr(數值型)

 

該數值範圍從0255,返回字符型,如Chr(65)可返回字符「A」,這樣能夠輸入一些用鍵盤沒法輸入的字符。

 

Str(數值型)

 

該函數把數值型轉換爲字符型,也許你以爲數值「123」和字符串「123」沒什麼區別,但在內存中一個ASCII字符是佔一個字節,也就是說字符串「123」3個字節,而當數值「123」是整型時,它佔兩個字符,當它是長整型時,佔4個字節。與之向對應的是Val(數值型),它把數值型轉換爲字符型。

 

上面的函數都是之後要常常用到的,請將它們熟悉。

 

上次講到文本框的用處,還有意思嗎?你是否能把上次的程序稍稍變更一下,來計算出輸入的單詞數,提示一下,單詞與單詞之間是用空格分隔開的。

 

咱們繼續下面的內容。

 

上次說到,輸入不只僅是向文本框輸入字符,凡是從外界向程序傳遞數據均可以叫作輸入,咱們一一說明白。

 

無線鈕,記得咱們曾在第一章中完成過咱們的第一個程序――「Hello World!」它就是一種輸入的方法,在設計VB程序時能夠經過一組這樣的無線鈕,它們之間互相排斥,也就是說,只能有一個按鈕被選中。它由於很象無線電收音機上的按鈕於是得名無線鈕。若是要在一個窗體內放置多組無線鈕必須用Frame控件把它們區分開來。下面咱們在來完成一個例子,順便熟悉一下另外兩個處理字符串的函數――LTrim()Rtrim(),它們分別用來刪除字符串左邊的空格和右邊的空格,讓咱們看看它們是如何工做的。

 

 

 

程序窗體如圖68,因爲窗體比較簡單,無需修改更多的屬性,一共有三個文本框(Text13),分別用來顯示輸入字符,顯示把空格換成星號的字符,和通過處理的字符,還有三個無線鈕(Option13),要修改的只有Caption屬性,分別是「刪除左邊的空格」、「刪除右邊的空格」和「刪除兩邊的空格」。由於空格在咱們在文本框中沒法看到空格,因此咱們經過一個稱做AddStar的函數把原有字符串中的空格轉換爲星號,使咱們可以看到函數的效果。下面在程序中添加代碼,首先在General中聲明窗體級變量:

 

Dim LTrimmedword$, RTrimmedword$ '刪除左邊空格和右邊空格後的字符串

 

Dim LRTrimmedword$ '刪除兩邊空格後的字符串

 

而後,咱們經過一個叫作addstar的函數爲字符串加上星號,之前曾說過函數與過程的分別,函數會返回一個函數值,因此addstar也就至關於一個變量,其實這很好理解,就象中學代數中的函數,函數就至關於變量Y,而函數中的參數則至關於自變量X,固然可能有不少自變量X1X2……請原諒,我並不想在這裏上數學課,由於我厭惡那玩意兒,特別是上了大學以後,好在大二之後就不再會有數學課了,哈哈……

 

Function addstar(tempword As String) As String

 

Dim charindex%

Dim pasteword$ '加星號後的字符串

For charindex = 1 To Len(tempword)

 

If Mid(tempword, charindex, 1) = " " Then '若是字符爲空格

 

pasteword = pasteword + "*"

 

Else: pasteword = pasteword + Mid(tempword, charindex, 1)

End If

 

Next

addstar = pasteword '返回函數值

 

End Function

 

下面的代碼很簡單,而且我爲它作了註釋,就再也不一一解釋了,我只想簡要的提幾句,LtrimRtrim只有一個參數(字符型),另外下面用到了焦點事件,咱們曾在第三章中介紹過,當Text1獲得焦點(GotFocus)時,清空全部的文本框,當它失去焦點(LostFocus)時,對字符進行addstar而且在Text2中顯示。

 

Private Sub Text1_GotFocus() '但焦點於Text1

 

'清除全部文本框中的字符

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

 

End Sub

 

 

 

Private Sub Text1_LostFocus()

 

Dim Origionword As String

Origionword = Text1.Text

Text2.Text = addstar(Origionword)

LTrimmedword = addstar(LTrim(Origionword))

RTrimmedword = addstar(RTrim(Origionword))

LRTrimmedword = LTrim(RTrim(Origionword))

 

End Sub

 

 

 

Private Sub Option1_Click()

 

Text3.Text = LTrimmedword '顯示刪除左空格後的字符串

 

End Sub

 

 

 

Private Sub Option2_Click()

 

Text3.Text = RTrimmedword '顯示刪除右空格後的字符串

 

End Sub

 

 

 

Private Sub Option3_Click()

 

Text3.Text = LRTrimmedword '顯示刪除兩邊空格後的字符串

 

End Sub

 

最後結果如圖69

 

 

 

與無線鈕相對的是檢查框,在同一範圍內一組無線鈕只能有一個被選中,而檢查框則能夠有多個選擇,就象在添表時,性別那項只能有一個選擇,而在描述你之前的職業時能夠有學生、程序員、家庭教師或者什麼,總之有不少選擇,下面咱們舉一個簡單的例子加以說明。

 

假設編寫了一個共享軟件,在讓用戶註冊的時候你想知道你的用戶使用的計算機狀況,你就須要一個調查表,爲了使這個調查表不止枯燥,能夠在這個程序中加入一些圖形。新建一個項目文件,窗體佈局如圖610

 

 

 

程序很簡單,一共有兩個框架(Frame1Frame2),它們的Caption分別爲「選擇你的計算機擁有的配置」和「這是你的計算機系統」,在Frame1有四個檢查框(Check1Check4),Caption分別爲「網絡系統」、「鼠標」、「密碼保護」和「電子郵件」,另把Check4Enabled屬性改成False,使其無效;在Frame2中放置四個圖片框(Picture1Picture4)與四個檢查框向對應,請把全部圖片框的BorderStyle屬性設爲0(無邊框),它們的Picture屬性請根據上圖,在存放圖標的目錄中找到相對的圖標。下面是程序代碼:

 

Private Sub Check1_Click()

 

If Check1.Value Then

 

Check4.Enabled = -1

Picture1.Visible = -1

 

Else: Check4.Enabled = 0

Picture1.Visible = 0

Check4.Value = 0

Picture4.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check2_Click()

 

If Check2.Value Then

 

Picture2.Visible = -1

 

Else: Picture2.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check3_Click()

 

If Check3.Value Then

 

Picture3.Visible = -1

 

Else: Picture3.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check4_Click()

 

If Check4.Value Then

 

Picture4.Visible = -1

 

Else: Picture4.Visible = 0

 

End If

 

End Sub

 

 

 

這個程序比咱們見過的任何程序都簡單,就再也不作說明。

 

(第六章 未完)

在繼續上面的內容時,我想再回顧和強調幾個在字符串操做中常常函數:

 

先是幾個已經接觸過的,Mid()Asc()Len(),它們的語法分別是:

 

Mid(字符型,起始字符,長度)

 

返回子字符串,若是從字符串的第一個字符取起,起始字符爲1,依此類推。

 

Asc(字符型)

 

返回數值,若是參數不是一個字符,而是字符串(多個字符),將返回參數的第一個字符ASCII值。

 

Len(字符型)

 

返回字符串的長度。

 

下面我再爲你解釋幾個新的函數:

 

Left(字符串,長度)

 

將返回字符型,從字符串的第一個字符向左取字符串,與之相對應的是Right(),它將從字符串的最後一個字符向右取字符串。

 

Chr(數值型)

 

該數值範圍從0255,返回字符型,如Chr(65)可返回字符「A」,這樣能夠輸入一些用鍵盤沒法輸入的字符。

 

Str(數值型)

 

該函數把數值型轉換爲字符型,也許你以爲數值「123」和字符串「123」沒什麼區別,但在內存中一個ASCII字符是佔一個字節,也就是說字符串「123」3個字節,而當數值「123」是整型時,它佔兩個字符,當它是長整型時,佔4個字節。與之向對應的是Val(數值型),它把數值型轉換爲字符型。

 

上面的函數都是之後要常常用到的,請將它們熟悉。

 

上次講到文本框的用處,還有意思嗎?你是否能把上次的程序稍稍變更一下,來計算出輸入的單詞數,提示一下,單詞與單詞之間是用空格分隔開的。

 

咱們繼續下面的內容。

 

上次說到,輸入不只僅是向文本框輸入字符,凡是從外界向程序傳遞數據均可以叫作輸入,咱們一一說明白。

 

無線鈕,記得咱們曾在第一章中完成過咱們的第一個程序――「Hello World!」它就是一種輸入的方法,在設計VB程序時能夠經過一組這樣的無線鈕,它們之間互相排斥,也就是說,只能有一個按鈕被選中。它由於很象無線電收音機上的按鈕於是得名無線鈕。若是要在一個窗體內放置多組無線鈕必須用Frame控件把它們區分開來。下面咱們在來完成一個例子,順便熟悉一下另外兩個處理字符串的函數――LTrim()Rtrim(),它們分別用來刪除字符串左邊的空格和右邊的空格,讓咱們看看它們是如何工做的。

 

 

 

程序窗體如圖68,因爲窗體比較簡單,無需修改更多的屬性,一共有三個文本框(Text13),分別用來顯示輸入字符,顯示把空格換成星號的字符,和通過處理的字符,還有三個無線鈕(Option13),要修改的只有Caption屬性,分別是「刪除左邊的空格」、「刪除右邊的空格」和「刪除兩邊的空格」。由於空格在咱們在文本框中沒法看到空格,因此咱們經過一個稱做AddStar的函數把原有字符串中的空格轉換爲星號,使咱們可以看到函數的效果。下面在程序中添加代碼,首先在General中聲明窗體級變量:

 

Dim LTrimmedword$, RTrimmedword$ '刪除左邊空格和右邊空格後的字符串

 

Dim LRTrimmedword$ '刪除兩邊空格後的字符串

 

而後,咱們經過一個叫作addstar的函數爲字符串加上星號,之前曾說過函數與過程的分別,函數會返回一個函數值,因此addstar也就至關於一個變量,其實這很好理解,就象中學代數中的函數,函數就至關於變量Y,而函數中的參數則至關於自變量X,固然可能有不少自變量X1X2……請原諒,我並不想在這裏上數學課,由於我厭惡那玩意兒,特別是上了大學以後,好在大二之後就不再會有數學課了,哈哈……

 

Function addstar(tempword As String) As String

 

Dim charindex%

Dim pasteword$ '加星號後的字符串

For charindex = 1 To Len(tempword)

 

If Mid(tempword, charindex, 1) = " " Then '若是字符爲空格

 

pasteword = pasteword + "*"

 

Else: pasteword = pasteword + Mid(tempword, charindex, 1)

End If

 

Next

addstar = pasteword '返回函數值

 

End Function

 

下面的代碼很簡單,而且我爲它作了註釋,就再也不一一解釋了,我只想簡要的提幾句,LtrimRtrim只有一個參數(字符型),另外下面用到了焦點事件,咱們曾在第三章中介紹過,當Text1獲得焦點(GotFocus)時,清空全部的文本框,當它失去焦點(LostFocus)時,對字符進行addstar而且在Text2中顯示。

 

Private Sub Text1_GotFocus() '但焦點於Text1

 

'清除全部文本框中的字符

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

 

End Sub

 

 

 

Private Sub Text1_LostFocus()

 

Dim Origionword As String

Origionword = Text1.Text

Text2.Text = addstar(Origionword)

LTrimmedword = addstar(LTrim(Origionword))

RTrimmedword = addstar(RTrim(Origionword))

LRTrimmedword = LTrim(RTrim(Origionword))

 

End Sub

 

 

 

Private Sub Option1_Click()

 

Text3.Text = LTrimmedword '顯示刪除左空格後的字符串

 

End Sub

 

 

 

Private Sub Option2_Click()

 

Text3.Text = RTrimmedword '顯示刪除右空格後的字符串

 

End Sub

 

 

 

Private Sub Option3_Click()

 

Text3.Text = LRTrimmedword '顯示刪除兩邊空格後的字符串

 

End Sub

 

最後結果如圖69

 

 

 

與無線鈕相對的是檢查框,在同一範圍內一組無線鈕只能有一個被選中,而檢查框則能夠有多個選擇,就象在添表時,性別那項只能有一個選擇,而在描述你之前的職業時能夠有學生、程序員、家庭教師或者什麼,總之有不少選擇,下面咱們舉一個簡單的例子加以說明。

 

假設編寫了一個共享軟件,在讓用戶註冊的時候你想知道你的用戶使用的計算機狀況,你就須要一個調查表,爲了使這個調查表不止枯燥,能夠在這個程序中加入一些圖形。新建一個項目文件,窗體佈局如圖610

 

 

 

程序很簡單,一共有兩個框架(Frame1Frame2),它們的Caption分別爲「選擇你的計算機擁有的配置」和「這是你的計算機系統」,在Frame1有四個檢查框(Check1Check4),Caption分別爲「網絡系統」、「鼠標」、「密碼保護」和「電子郵件」,另把Check4Enabled屬性改成False,使其無效;在Frame2中放置四個圖片框(Picture1Picture4)與四個檢查框向對應,請把全部圖片框的BorderStyle屬性設爲0(無邊框),它們的Picture屬性請根據上圖,在存放圖標的目錄中找到相對的圖標。下面是程序代碼:

 

Private Sub Check1_Click()

 

If Check1.Value Then

 

Check4.Enabled = -1

Picture1.Visible = -1

 

Else: Check4.Enabled = 0

Picture1.Visible = 0

Check4.Value = 0

Picture4.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check2_Click()

 

If Check2.Value Then

 

Picture2.Visible = -1

 

Else: Picture2.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check3_Click()

 

If Check3.Value Then

 

Picture3.Visible = -1

 

Else: Picture3.Visible = 0

 

End If

 

End Sub

 

 

 

Private Sub Check4_Click()

 

If Check4.Value Then

 

Picture4.Visible = -1

 

Else: Picture4.Visible = 0

 

End If

 

End Sub

 *****************************************************8

文章瀏覽廣告

第六章(1)★輸入 

如今加入 http://14.66.102.214 

咱們爲何要設計計算機程序呢,固然是爲了計算機能爲咱們完成工做,可是要完成不一樣的任務,咱們就必須對計算機下達命令,而後計算機在把信息返饋回來――任務是否完成。以上就是所謂的人機對話或交互功能,尤爲是在Windows操做裏咱們須要進行更多的輸入工做,咱們須要填寫各類各樣的表格,設置程序的重要參數,把數據輸入給計算機,再又它完成既定的工做就是今天咱們本章要重點討論的問題――在VB中如何創建完整的輸入機制。

 

VB中提供了一個函數InputBox能幫助咱們創建一個最簡單的輸入窗體,語法以下:

 

InputBoxprompt[,title][,default][,xpos][,ypos][,helpfile,context]

 

該函數返回一個字符串表達式,其參數含義爲:(「[]」表示可缺省)

 

prompt――字符串表達式,最大長度爲1024字符,窗體上的提示部分。

 

Title――字符串表達式,顯示標題欄裏的文本。

 

Default――字符串表達式,窗體中文本框的缺省值。

 

xposypos――數值表達式,以Twips爲單位指定窗體出如今屏幕上的位置。

 

helpfile――字符串表達式,是幫助文件的完整路徑。

 

Context――數值表達式,指定適合的幫助主題。

 

可能你看了上面的說明並不明白,那麼下面咱們就用Input語句完成一個最簡單的程序。

 

 

 

小知識:屏幕座標

 

在計算機的屏幕上也有一個相似於咱們在中學裏經常使用到的直角座標系,之不過它的原點不在左下,而是在屏幕的右上角,屏幕的最右上方座標爲(00),它的橫座標和咱們的習慣是一致的,而縱座標則是越向下越大,不只是屏幕,全部的對象裏都是同樣,須要記清。見圖61

 

 

 

新建一個項目(project),在Form_load裏填寫一行代碼:

 

a$ = InputBox("舉薦你最欣賞的網站", "最佳網站投票", "VB小驛")’不算無恥吧?:->

 

按下F5運行程序,在Form1出現以前先會彈出一個輸入對話框,如圖62。這時,不管你按下OK仍是Cancel都是沒有區別的,由於咱們並無對輸入數據進行處理,下面咱們完成一個更加複雜些的程序。

 

 

 

新建一個項目文件,把窗口布局成相似於圖63的結構,各對象屬性以下表:

 

 

 

Form1

Caption 「最佳網站投票演示」

 

BorderStyle 3’不可調整大小

 

ControlBox 0’False

 

Frame1

Caption 「輸入框屬性「

 

Label1

Autosize 1’True

 

Index 05

 

05 Caption 「提示語句」

 

「標題」

 

「缺省網站」

 

X座標」

 

Y座標」

 

「」

 

Index 4 Enabled False

 

Index 4 Enabled False

 

Text1

Text 「」’(空字符串)

 

Index 04

相關文章
相關標籤/搜索