VB5 初級生 老怪範例(二)

回首頁

Home


分類

標題

大意

作者

日期

使用說明 VB5 初級生範例使用說明   老怪 1998/7/19
元件用法 ComboBox 的使用技巧   老怪 1998/5/26
元件用法 ActiveX 功能表編輯器的使用   老怪 1998/6/4
元件用法 CommonDialog 的 Cancel 通知 以 Err.Number 取代 Event 老怪 1998/7/12
物件使用 TextBox 的複製及貼上 ClipBoard 的使用 老怪 1998/5/30
物件使用 取得某電腦的所有字型 Screen 和 Printer的使用 老怪 1998/6/5
集合物件 Form.Controls 的使用   老怪 1998/5/28
中文處理 如何判別一個字元為中文字   老怪 1998/5/28
中文處理 TextBox 的中英輸入切換功能 IMEMode 屬性的利用 老怪 1998/6/7
字串處理 VB Script SPLIT() 函數模擬 Vb 字串函數的縱合運用 老怪 1998/6/5
字串處理 文字檔的字串替換   老怪 1998/6/9
字串處理 剔除字串中的指定字元 Mid() 函數的運用 老怪 1998/6/16
字串處理 如何做出跑馬燈效果的 TextBox   老怪 1998/6/14
變數處理 變數記憶體空間的釋放   老怪 1998/5/29
副程式 跨 Form 的 Procedure 呼叫   老怪 1998/7/2
數值處理 不同進位數的轉換 Hex() & Oct() 老怪 1998/5/31
日期處理 求得每月的最後一天是幾號 DateSerial() 的運用 Rose 1998/6/10
其他雜項 外部檔案的執行及終止 Shell 和 AppActivate使用 老怪 1998/6/16
元件外觀 Drag 時顯示 Picture Drag 和 DragMode 老怪 1998/6/18
元件外觀 Drag 和 Move 的比較 由使用者操控元件移動 老怪 1998/6/18
圖形處理 VB 5.0 可以使用的圖檔格式   老怪 1998/7/20
圖形處理 如何自製 MetaFile VB 與 Office 97 老怪 1998/7/20

VB5 初級生範例使用說明


  1. 本範例歡迎非營利性個人及組織轉載使用,營利之利用請先徵得本人之同意,來信註明使用方式及回覆地址。
  2. 本範例所有的程式碼範例,皆屬十分基本的 VB 語法,如果您是個 VB User ,歡迎直接引用或改寫使用在你的程式中 ,本人不主張著作權,因為,沒辦法查嘛。
  3. 如果你是個 VB 初學者,又有點窮窮(和老怪一樣),趕快把本頁另存新檔到你自己的磁碟,離線後慢慢看,也可以 Copy 給朋友喔(不可以收錢)。
  4. 本範例都是老怪幾個月來在 tw.bbs.comp.language 討論群組中回答版友問題的合輯,因為是針對問題解決,所有並沒有全面觀念的解說,不適合作為入門文章,但如果你讀了入門書,或是上了老師的課,心中仍不甚明白的話,就可以來這找找有沒有你要的答案,因為這都是別人問過的問題。
  5. 本人才疏學淺,之所以大膽公佈此範例,用意在自曝其短,希望遇到真正的行家可以加以指正,如果本篇有誤,請不吝來函告知。
  6. 我的電子郵件地址:oldguy@ms11.accmail.com.tw 。

回索引


ComboBox 的使用技巧


iroi 撰寫於文章

請問各位,vb的combo box怎用的

老怪答:

在做 Combobox的判斷時,有幾個要注意配合使用的屬性是

  1. .List
  2. text
  3. listindex
  4. newindex
  5. listcount

取出 ComboBox �堛滬�

'------取出以滑鼠點選值

'-----取出新加入的值

'---- 將組合式文字框加入 Combo1

回索引


Form.Controls 的使用


Eagle Tsui 撰寫於文章

請問用vb5如何可以在全不知情下知道Form1有邊乜Control呀!

老怪答:

計算 form 上有幾個 Control

列出 form 上所有 control 的名稱

回索引


如何判別一個字元為中文字


html 撰寫於文章

老怪答:

Strlength=LenB(StrConv("YourChar", vbFromUnicode))
Strlength=1 英文
Strlength=2 中文

回索引


變數記憶體空間的釋放


寄件者: Annie Chiu

何清除記憶體變數?

老怪答:

  1. 陣列變數的釋放:

  2. 宣告區�堥p有變數的生命期:

  3. 物件變數的記憶體空間釋放:

  4. 動態控制元件的新增與釋放:

  5. 所有的控制元件及 Form 物件,我們都可以把他視為 Public 變數,既經產生,在任何 Procedure 都能呼叫的到。

回索引


TextBox 的複製及貼上


風 撰寫於文章

請問像記事本中的複製、剪下、貼上,TextBox 要如何寫?

老怪答:

  1. 複製:
  2. 剪下:
  3. 貼上:
  4. 全選:

回索引


不同進位數的轉換


坏人 撰寫於文章

vb要如何將十進變...二進...八進....十六進等

老怪答:

  1. 十進位數轉成其他進位數
  2. 為變數指定其他進位值:
  3. 將其他進位字串變數算回十進位:
  4. 二進位的轉換功能:

回索引


跨 Form 的 Procedure 呼叫


johneson 撰寫於文章

請問在vb 環境下如何一視窗如何去執行另一視窗所寫的程式碼

老怪答:

  1. 一個預備在某 Form 上被別的 Form 呼叫的 Sub 或 Function 必須要宣告為 Public。
  2. Call 另一個 Form 的 Public Sub or Public Function 時必須在前面加該 Form 的名稱,如 BeCallForm.SubName or BeCallForm.Function Name。
  3. 一個控制元件的事件宣告都在其所屬的 Form 上被宣告為 Private ,如 Private Image1_Click(),但如果我們把其 Private 改為 Public 後,一樣可以用 2. 方式去觸發該一事件,也就是可以在別的視窗�媊眶o另一個視窗的元件事件。

回索引


ActiveX 功能表編輯器的使用


流浪的風 撰寫於文章

在VB5中的ActiveX控制項,能不能用功能表編輯器啊???有個很奇怪的現象...在表單的快顯功能表中有功能表編輯器...進去之後,可以設定喔...不過邊好後,在表單中看不見功能表ㄋㄟ......有誰知道原因....

老怪答:

  1. ActiveX 可以使用功能表編輯器,但用法跟 Form 和 MDIForm 有些差別。
  2. Form 和 MDIForm 的功能表能在表單上顯現,也能用 PopUpMenu 的方法讓它彈出來,ActiveX控制項的功能表無法在自己的表單上顯示,但可以用 PopUpMenu 的方法彈出來。
  3. ActiveX控制項功能表的選項,在[協調位置]的選項上如果改變原不顯示的設定,而改設靠左、靠中、靠右,那這選項在執行期中就會顯現在收納它的表單上。

回索引


取得某電腦的所有字型


風 撰寫於文章

如何用VB來取得電腦裡的字型並且用下拉式選單秀出來...

老怪答:

  1. 取得螢幕字型:
  2. 取得印表機字型:

回索引


VB Script SPLIT() 函數模擬


misckl 撰寫於文章

在VB Script中有一個 SPLIT() 的 Function 可以將字串轉成字串陣列,而在VB5中卻沒有。在VB5中是否有類似的Function?或是哪裡有這個 Function?

老怪試作:

VB5 �堥癡S有和 VBScript 相同的 SPLIT() 函數,但透過 VB5 字串變數的縱合運用,我們可以自創具有 SPLIT() 功能的函數。

Function Split(ByVal Exp As String, _
        Optional ByVal Deli As String = " ", _
        Optional ByVal varCount As Long = -1, _
        Optional ByVal Comp As Integer = 0)

Dim ReturnArr() As String, ReturnNum As Long
Dim ShortWord As String, WordNum As Variant

    If varCount = 0 Or Len(Exp) = 0 Then
        SimuSplit = ReturnArr
        Exit Function
    End If

    Do
        WordNum = InStr(1, Exp, Deli, Comp)
        If WordNum = 0 Then
            ShortWord = Exp
        Else
            ShortWord = Mid(Exp, 1, WordNum - 1)
            Exp = Right(Exp, Len(Exp) - WordNum)
        End If

        On Error Resume Next
        ReDim Preserve ReturnArr(UBound(ReturnArr) + 1)
        If Err.Number = 9 Then
            ReDim ReturnArr(0)
        End If

        ReturnArr(UBound(ReturnArr)) = ShortWord

        If WordNum = 0 Then Exit Do

    Loop

    If varCount <> -1 And varCount <= UBound(ReturnArr) Then
        ReDim Preserve ReturnArr(varCount - 1)
    End If

    SimuSplit = ReturnArr
End Function

回索引


CommonDialog 的 Cancel 通知


奴隸 撰寫於文章

CommonDialog其中的 開啟舊檔的視窗中,選取 "取消"  所會引發之事件為何?

老怪答:

如果你曾仔細在 VB5 的[瀏覽物件]功能�堨J細觀察過 CommonDialog 這個元件,你會發覺 CommonDialog 沒有設定任何的事件程序,那我們該如何得知它執行的狀況呢?答案就在它的 ErrorConstants 常數宣告�堙C也就是 CommonDialog 把正確執行的動作結果放在各 Property 值�堙A錯誤則產生一個 Error 來通知你。此外 Cancel 在 CommonDialog �媢w設值不是錯誤,但如果你要攔截到 Cancel 訊息,只有規定按下 Cancel 視同產生一個錯誤。也就是必需先設定 CommonDialog1.CancelError=Ture 後,再用 Err.Number 來偵測 Cancel 的行為。請參考下例。

Option Explicit

Private Sub Command1_Click()
    On Error Resume Next
    CommonDialog1.ShowOpen
    If Err.Number = cdlCancel Then
        MsgBox "FileOpen Cancel"
    End If
End Sub

Private Sub Form_Load()
    CommonDialog1.CancelError = True
End Sub

回索引


TextBox 的中英輸入切換功能


Neuro Doc 撰寫於文章

在 VB 5.0 下, 如何用程式切換注音及英文輸入?

老怪答:

Vb 5.0 在 可以輸入文字的 Box (如 TextBox,ListBox,ComBox....等)�堨[了一個輸入法切換的屬性,就是 IMEMode,可是它自己說明�堻熊M隻字未提,不過經老怪測試,真的有作用。配合上 ImeStatus 這個函數檢測目前的輸入狀態,在你輸入文字時,就可以操控使用者的輸入狀態。

回索引


文字檔的字串替換


James Wu 撰寫於文章

欲把文字檔(filename.txt)中某一字串(beforchange)改為(afterchange),如何寫? 

老怪答:

請參考下列範例程式:

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   3885
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3885
   ScaleWidth      =   4680
   StartUpPosition =   3  '系統預設值
   Begin VB.TextBox Text3
      Height          =   495
      Left            =   3240
      TabIndex        =   5
      Top             =   1680
      Width           =   1215
   End
   Begin VB.TextBox Text2
      Height          =   495
      Left            =   3240
      TabIndex        =   4
      Top             =   600
      Width           =   1215
   End
   Begin VB.CommandButton Command3
      Caption         =   "存檔"
      Height          =   495
      Left            =   3360
      TabIndex        =   3
      Top             =   3240
      Width           =   1215
   End
   Begin VB.CommandButton Command2
      Caption         =   "取代"
      Height          =   495
      Left            =   1800
      TabIndex        =   2
      Top             =   3240
      Width           =   1335
   End
   Begin VB.CommandButton Command1
      Caption         =   "開檔"
      Height          =   495
      Left            =   240
      TabIndex        =   1
      Top             =   3240
      Width           =   1335
   End
   Begin VB.TextBox Text1
      Height          =   2895
      Left            =   120
      MultiLine       =   -1  'True
      ScrollBars      =   2  '垂直捲軸
      TabIndex        =   0
      Top             =   120
      Width           =   2895
   End
   Begin VB.Label Label2
      Caption         =   "取代字串"
      Height          =   375
      Left            =   3240
      TabIndex        =   7
      Top             =   1200
      Width           =   1215
   End
   Begin VB.Label Label1
      Caption         =   "搜尋字串"
      Height          =   375
      Left            =   3240
      TabIndex        =   6
      Top             =   120
      Width           =   1215
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'TextSearch 為自行邊寫之 Sub Procedure
'varObject 是傳入的 Textbox 物件
'OrgString 是尋找字串
'RepString 是取代字串
Sub TextSearch(ByVal varObject As Control, _
        ByVal OrgString As String, _
        ByVal RepString As String)

Static varStart As Long    '宣告 Static 型態,代表它能記住上次的搜尋位置
Dim SeString As String
Dim NowPos As Long
    '物件接收駐點
    varObject.SetFocus
    '把上次未搜尋到的字串放入 SeString 變數中
    SeString = Right(varObject.Text, Len(varObject.Text) - varStart)
    '找新的符合字串
    NowPos = InStr(SeString, OrgString)

    '沒找到
    If NowPos = 0 Then
        '記錄指標歸 0
        varStart = 0
        '設定無選取
        varObject.SelLength = 0
    '找到了
    Else
        '記錄指標移到新位置
        varStart = varStart + NowPos - 1
        '從記錄指標位置開始選取
        varObject.SelStart = varStart
        '選取搜尋字串長度
        varObject.SelLength = Len(OrgString)
        '搜尋字串換成新字串
        varObject.SelText = RepString
        '記錄指標移往取代字串之後
        varStart = varStart + Len(RepString)
    End If
End Sub

'開啟既存文字檔
Private Sub Command1_Click()
Dim OpenString As String
Dim FHandle As Long

    '找一個未使用的檔案代碼
    FHandle = FreeFile()
    '消除 Textbox �堛滬鴗憒r
    Text1.Text = ""
    '開啟一輸入檔
    Open "c:\ttt.txt" For Input As #FHandle

    '把檔案加到 Text1.Text 中
    Do While Not EOF(FHandle)
        Line Input #FHandle, OpenString
        Text1.Text = Text1.Text + OpenString + Chr(13) + Chr(10)
    Loop
    Close #FHandle

End Sub

'呼叫 TextSearch 副程序
Private Sub Command2_Click()
    TextSearch Text1, Text2.Text, Text3.Text
End Sub

'將 Text1.Text 存成檔案
Private Sub Command3_Click()
Dim FHandle As Long

    FHandle = FreeFile()

    Open "c:\ttt.txt" For Output As #FHandle

    Print #FHandle, Text1.Text
    Close #FHandle
End Sub

回索引


求得每月的最後一天是幾號


Rose 撰寫於文章

Day(DateSerial(年分,(月份+1),0))

老怪解說:

  1. DateSerial() �埵� Year,Month,Day三個數值參數,寫法是 DateSerial(Year,Month,Day)。
  2. day=0 表示是上個月的最後一天。
  3. 月份+1表示下個月。
  4. 再使 day=0 就求得本月最後一天。
  5. 這個敘述又短又好,可見 Rose 是個高手。但我在版上只驚鴻一瞥看她 Post 過一次,從此再無芳蹤,大概真正厲害的人現在都已在資訊界身負重職,只有老怪這種半調子,才有空在 News Group �堣f水一堆,因為這個式子實在太好了忍不住要向大家推薦,希望 Rose 不要認為我侵犯著作權才好。

回索引


如何做出跑馬燈效果的 TextBox


老怪試作:

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Marquee"
   ClientHeight    =   3960
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3960
   ScaleWidth      =   4680
   StartUpPosition =   3  '系統預設值
   Begin VB.CommandButton Command2
      Cancel          =   -1  'True
      Caption         =   "跑馬燈結束"
      Height          =   495
      Left            =   2640
      TabIndex        =   5
      Top             =   3360
      Width           =   1215
   End
   Begin VB.Timer Timer1
      Left            =   2160
      Top             =   3480
   End
   Begin VB.CommandButton Command1
      Caption         =   "跑馬燈開始"
      Height          =   495
      Left            =   840
      TabIndex        =   2
      Top             =   3360
      Width           =   1215
   End
   Begin VB.TextBox Text2
      Height          =   1215
      Left            =   840
      MultiLine       =   -1  'True
      ScrollBars      =   2  '垂直捲軸
      TabIndex        =   1
      Top             =   1920
      Width           =   3135
   End
   Begin VB.TextBox Text1
      BackColor       =   &H80000018&
      Height          =   375
      Left            =   1200
      TabIndex        =   0
      Top             =   360
      Width           =   2895
   End
   Begin VB.Label Label4
      Alignment       =   2  '靠中對齊
      Caption         =   "請輸入跑馬燈文字"
      Height          =   375
      Left            =   1320
      TabIndex        =   4
      Top             =   1200
      Width           =   2295
   End
   Begin VB.Label Label2
      Caption         =   "Text 跑馬燈"
      Height          =   375
      Left            =   120
      TabIndex        =   3
      Top             =   360
      Width           =   975
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'宣告要在 Text1 �媗膆靰熄]馬燈字串變數
Dim TString As String

Private Sub Command1_Click()
'宣告儲存 Text1 字串長度的變數
Dim TWidth As Long

    Command2.Enabled = True
    '啟動 Timer 顯示跑馬燈
    Timer1.Enabled = True
    Command1.Enabled = False

    'text2 �堨眸滇擗J跑馬燈字串
    If Text2.Text = "" Then
        MsgBox "請輸入跑馬燈文字"
        '沒有輸入就按下 Command2 跑馬燈結束鈕
        Command2_Click
        Exit Sub
    End If

    '統計 Text1Box �堥鴝釧顒漱U幾個字
    Do While TextWidth(Space(TWidth)) <= Text1.Width
        TWidth = TWidth + 1
    Loop

    '設定跑馬燈字串為 Text1 寬度個空白
    '加原輸入的 跑馬燈文字
    TString = Space(TWidth) + Text2.Text

End Sub

Private Sub Command2_Click()
    Text1.Text = ""

    Command1.Enabled = True

    Command2.Enabled = False
    '關閉跑馬燈顯示
    Timer1.Enabled = False

    Text2.SetFocus
End Sub

Private Sub Form_Load()
    Timer1.Enabled = False
    Timer1.Interval = 200
    Command2.Enabled = False

    '將各元件 Font 統一,利於計算字串寬度
    Text1.Font = Me.Font
    Text2.Font = Me.Font

    Me.Show

    Text2.SetFocus

End Sub

Private Sub Timer1_Timer()
'開始頡取跑馬燈字串之位置指標
Static TPos As Long

    '如果位置指標越過了整個字串
    If TPos > Len(TString) Then
        '把位置指標移到最開頭
        TPos = 1
    Else
        '把位置指標移到下一個字
        TPos = TPos + 1
    End If

    '逐字顯示跑馬燈字串
    Text1.Text = Mid(TString, TPos)

End Sub

回索引


外部檔案的執行及終止


魚半 撰寫於文章

請問VB5是用shell來執行外部檔案,那執行後,要怎樣用VB的語法來終止此檔案的執行呢!?

老怪答:

Dim FHandle As Variant '(儲存視窗代碼的變數

Private Sub Command1_Click()
    FHandle = Shell("C:\WIND98\CALC.EXE", 1) '(開啟外部執行檔)
End Sub

Private Sub Command2_Click()
    AppActivate FHandle '讓先前開啟的視窗取得焦點。
    SendKeys "%{f4}", True '送出 [Alt]+[F4] Windows 系統的關閉組合鍵。
End Sub

改寫成能處理錯誤的呼叫函數則如下:

開啟 Windows 應用程式
'varAppName 是程式路徑及名稱之傳遞參數
'varWinState 是應用程式視窗開啟狀態,設定方式請參考 Shell
'的 WindowsStyle 說明
Private Function OpenApp(ByVal varAppName As String, _
        Optional ByVal varWinState As Integer)
'傳回應用程式之視窗代碼
Dim varWinTitle As Variant

    '錯誤處理
    On Error GoTo OpenAppErr

    varWinTitle = Shell(varAppName, varWinState)
    OpenApp = varWinTitle
    Exit Function

OpenAppErr:
    Select Case Err.Number
        Case 53
            MsgBox "程式路徑或名稱錯誤", vbOKOnly, "開啟應用程式"
    End Select
End Function

'關閉 Windows 應用程式
'varWinTitle 是開啟程式時 Windows 系統給的代碼
Private Sub CloseApp(ByVal varWinTitle As Variant)

    '錯誤處理
    On Error GoTo CloseAppErr

    AppActivate varWinTitle
    '用 SendKeys 陳述模擬鍵盤 [ALT]+[F4]
    SendKeys "%{F4}"
    Exit Sub

CloseAppErr:
    Select Case Err.Number
        Case 5
            MsgBox "程式視窗已被關閉", vbOKOnly, "關閉應用程式"
    End Select
End Sub

'上面是改寫 Shell 和 AppActivate 的兩個函數,呼叫方式如下:

'宣告一個儲存視窗代碼的變數
Private WinTitle As Variant

'開程式
Private Sub Command1_Click()
Dim AppName As String

    AppName = "你的程式路徑及名稱"
    WinTitle = OpenApp(AppName)
End Sub

'關程式
Private Sub Command2_Click()
    CloseApp WinTitle
End Sub

回索引


剔除字串中的指定字元


滿足現況...:P 撰寫於文章

一個 string 中有 'aaa bbb      ccc'  怎麼讓它變成  'aaabbbccc'呢?

老怪答:

Function KillChar(ByVal ExpString As String, ByVal KillString As String)
Dim ReturnString As String
Dim I As Long

    For I = 1 To Len(ExpString)
        If Mid(ExpString, I, 1) <> KillString Then
            ReturnString = ReturnString + Mid(ExpString, I, 1)
        End If
    Next

    KillChar = ReturnString
End Function

Private Sub Command1_Click()
Dim SomeChar As String

    SomeChar = "aaa bbb      ccc"
    Debug.Print SomeChar
    SomeChar = KillChar(SomeChar, " ")
    Debug.Print SomeChar
End Sub

回索引


Drag 時顯示 Picture


民哥 撰寫於文章

When dragmode set auto 拖曳picture時,會顯現一個框框,感覺不好, 所以去設dragicon, 但她只接受 *.ico *.cur  請問如果我要拖曳一個 *.bmp picture, 拖曳期間也要顯示這個 bmp picture 怎麼辦?

老怪答:

如果拖曳期間也要顯示 Bmp Picture ,你必須使 Dragmode 仍維持手動,然後使用Object.Drag vbBeginDrag 的方法去啟動一個 Object 的 Drag 程序(注意,不能在 Form 的 Dragover_Event �堻]定 Object.Drag vbBeginDrag ,因為除非你先 Object.Drag vbBeginDrag ,否則 Form_Dragover 跟本不會發生。) 以下是簡單的程式碼,你可以參考看看。

Dim OldX As Single, OldY As Single

Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
Source.Move Source.Left + X - OldX, Source.Top + Y - OldY
OldX = X
OldY = Y
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Image1.Drag vbBeginDrag
OldX = Image1.Left + X
OldY = Image1.Top + Y
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Image1.Drag vbEndDrag
End Sub

回索引


Drag 和 Move 的比較


民哥 撰寫於文章

以 Object.Drag vbBeginDrag 就可以自動拖曳 Object.Picture,但為什麼不在 MouseMove_Event �堻]定 Object.Move X,Y (但比較不順暢,不知道能不能改善?) 請問用這兩種方法有時麼利弊?

老怪答:

  1. Object_MouseMove 和 Form_DragOver 方法的比較,DragOver 的好處是由 VB 為你處理了大部份 Object.Move 的功能,而且只要在 Form_DragOver 事件上寫一次程式,就可供所有的 Object 利用。但他最大的壞處是雖然你的圖會跟你的滑鼠指標一起移動,但那個透明的四方框仍會跑出來,而且如果你的圖稍大,會有滑鼠已跑到別處,而你的圖仍留在原處的困擾。
  2. 至於 Mouse move 最大的缺憾就是圖和滑鼠的移動不是同步的,所以常有圖跟在滑鼠後面追的現象,單純使用 VB 命令答案是無解,但如果利用 Windows Api�� MouseHook 的功能,把滑鼠指標鎖在 Object 上,就可以改善。怎做你就要請教Api 高手 CWW,請到 http://140.116.253.249/~cww/ 找相關範例。

回索引


VB 5.0 可以使用的圖檔格式


副檔名

大小限制

色數上限

向量或點陣

透明效果

存檔格式

BMP 無 全彩 點陣 無 BMP
DIB 無 全彩 點陣 無 DIB
ICO 32*32 16 點陣 有 ICO
CUR 32*32 2 點陣 有 CUR
WMF 無 全彩 向量 有 WMF
EMF 無 全彩 向量 有 EMF
GIF 無 256 點陣 有 BMP
JPG 無 全彩 點陣 無 BMP

※存檔格式是指用 VB5 SavePicture 存檔後的檔案格式※

回索引


如何自製 MetaFile


MetalFile ,就是副檔名 WMF 或 EMF 的向量圖檔,也就是在 Office �媦s泛採用的美工圖庫圖案,有點荒謬的是 Office 天天在用 MetalFile,它的繪圖工具畫出來的圖也是 MetalFile,可就不提供把 Office 製作出來的圖存成 WMF 檔的功能。這在其他不會 VB 語言的當然是難事一樁,但你可以利用Office 繪圖工具把圖畫好,將全圖群組化後,按複製,再在 VB 中執行以下的語法,就可以得到獨立的 WMF 圖在 VB �媕野峞C

Private Sub Command1_Click()
    If Clipboard.GetFormat(vbCFMetafile) Then
        Set Picture1.Picture = Clipboard.GetData
        SavePicture Picture1.Picture, "c:\test\bin.wmf"
    End If
End Sub

回索引


回首頁

Home