● ちょこちょこした覚え書き ●

大したことは無いんだけど、あればあったでたま〜に有用かもしれないと思う程度のメモ。

◆プログラムが暴走した場合
   Ctrl + Break で意外と止まる
 
◆ウインドウクラス名
  
タスクバーSysTabControl32
タスクトレイTrayNotifyWnd
タククバーの時計TrayClockWClass
スタートボタンButton
電卓SciCalc
メモ帳Notepad
MS-PAINTMSPaintApp
 
◆ファイルサイズを取得する
  
Private Sub Command1_Click()

    Debug.Print FileLen("C:\Windows\winhlp32.exe")
End Sub
 
◆正の数、負の数、0かを判定する
  
Private Sub Command1_Click()

    '0より大きい場合は1、0の場合は0、0より小さい場合は-1が返る
    Debug.Print Sgn(0.6)
    Debug.Print Sgn(0)
    Debug.Print Sgn(-0.6)
End Sub
 
◆ファイルを検索する(指定ディレクトリ」内のみで再帰せず)
  
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
' 機  能:ファイルを検索する
' 引  数:(i)TargetFile … ファイル名(指定例:C:\XXX\YYY\ZZZ\*.txt)
' 返り値:見つけたファイルの数
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Public Function SerachFile(ByVal TargetFile As String) As Long
    Dim FoundFile As String

    '1つ目を検索
    FoundFile = Dir$(TargetFile, vbNormal)

    '2つ目以降があればを検索
    Do While FoundFile <> ""
        SerachFile = SerachFile + 1
        Debug.Print FoundFile
        FoundFile = Dir$
    Loop
End Function
 
◆タイトルバーを消去する
  
フォームのプロパティを以下の通りに設定してあげればよい。

    Form1.ControlBox = False
    Form1.MaxButton = False
    Form1.MinButton = False
    Form1.Caption = ""

また、

    Form1.Caption = "あいうえお"

としてやれば、タイトルバーを表示させることができる。

 
◆16進数を10進数にする
  
Private Sub Command1_Click()

    Debug.Print Val("&H70")
End Sub
 
◆ツールチップを表示する
  
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

     Label1.ToolTipText = "ツールチップだよ"
End Sub
 
◆月末の日付を計算する
  
Private Sub Command1_Click()

    Dim yymm As String
    yymm = "1999/02"
    Debug.Print DateAdd("m", 1, CDate(yymm & "/01")) - 1
End Sub
 
◆どんな使用環境にも対応できるように文字の大きさを設定する
   'フォントサイズ × Screen.TwipsPerPixelX ÷ 15 でよい(昔のテクなのでもう通用しないかも)
Label1.FontSize = Int(11 * Screen.TwipsPerPixelX / 15)
Command1.FontSize = Int(10 * Screen.TwipsPerPixelX / 15)
 
◆使用可能フォントを列挙する
  
Private Sub Command1_Click()

    Dim i As Long
    For i = 0 To Screen.FontCount - 1
        Debug.Print Screen.Fonts(i)
    Next i
End Sub
 
◆スクロールバーの点滅を無効にする
   (1)TabStop プロパティを False にすればよい。

(2)API関数を使いたい場合は以下のようにすればよい。
  
Private Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long

Private Sub HScroll1_GotFocus()

    Dim apiResultCode As Long
    apiResultCode = HideCaret(HScroll1.hwnd)
End Sub

 
◆閏年か判定する
  
Public Function IsLeapYear(ByVal ToYear As Integer) As Boolean

    IsLeapYear = (ToYear Mod 4 = 0) And (ToYear Mod 100 <> 0) Or (ToYear Mod 400 = 0)
End Function
 
◆テキストボックスを入力不能にする
  
Private Sub Text1_KeyPress(KeyAscii As Integer)

    keyascii = 0
End Sub
 
◆配列を初期化をする
  
'Visual Basic 5.0 のヘルプファイルより
Dim NumArray(10) As Integer'整数型の配列
Dim StrVarArray(10) As String'可変長文字列型の配列
Dim StrFixArray(10) As String * 10  '固定長文字列型の配列
Dim VarArray(10) As Variant'バリアント型の配列
Dim DynamicArray() As Integer'動的配列
ReDim DynamicArray(10)'メモリ領域を割り当てます
 
Erase NumArray'各要素の値を 0 にします
Erase StrVarArray'各要素の値を長さ 0 の文字列 ("") にします
Erase StrFixArray'各要素の値を 0 にします
Erase VarArray'各要素の値を Empty 値にします
Erase DynamicArray'配列が占有していたメモリを解放します
 
◆ファイルが更新された日付を取得する
  
Private Sub Command1_Click()

    Debug.Print FileDateTime("C:\Windows\Winhelp.exe")
End Sub
 
◆ファイル名を変更する
  
Private Sub Command1_Click()

    Const OldFile As String = "C:\Test.txt"        '変更前のファイル名
    Const NewFile As String = "C:\TestNew.txt" '変更後のファイル名
    Name OldFile As NewFile
End Sub
 
◆フォームをすべて "Unload" する
  
Private Sub Form_Unload (Cancel As Integer)

    Dim i As Long
    For i = 0 To Forms.Count - 1
        Unload Forms (i)
    Next i
End Sub
 
◆乱数を発生させる
  
Rnd(1) … 0以上1未満の数を発生させる
Rnd(1) * 6 … 0以上6未満の数を発生させる
Int(Rnd(1) * 6) … 0〜5の整数を発生させる
Int(Rnd(1) * 6) + 1 … 1〜6の整数を発生させる
 
◆IIf文について - C言語で言うところの三項演算子
  
Private Function IntMaxValue(ByVal p1 As Long, ByVal p2 As Long) As Long

    IntMaxValue = IIf(p1 >= p2, p1, p2)
End Function
 
◆Switch文について
  
Private Function GetColorSwitch(ByVal i As Long) As String

    GetColorSwitch = Switch(i = 1, "赤", _
                                       i = 2, "青", _
                                       (i <> 1 And i <> 2), "黒" _
                                       )
End Function
 
◆Choose文について
  
Private Function GetWeek(ByVal Num As Long) As String

    GetWeek = Choose(Num, "Sunday", "Monday", "Tuesday", _
                      "Wednesday", "Thursday", "Friday", "Saturday")
End Function
 
◆隠し関数ついて
   VB5.0 からこっそりというか、Microsoft 非公認というか隠し関数が用意されていることが明るみになった。これが非常に便利な関数で、API関数を使うときなどは大活躍することが多々ある。ちなみにVB4.0では VarPtr() 関数を使用することができるが、下記のように API 宣言をしなければならない。vb40032.dll が今となっては非常に微妙だね。

'VB4.0用宣言
Declare Function VarPtr Lib "vb40032.dll" (variable As Any) As Long

以下はVB5.0用の関数。組み込み済みの関数なので VB4.0 のように宣言をする必要は無く、そのまま気軽に使える。

構文説明
StrPtr(Ptr As String) As Long  文字列が存在しているアドレスを返す
VarPtr(Ptr As Any) As Long変数が存在しているアドレスを返す
ObjPtr(Ptr As Any) As Longオブジェクトが存在しているアドレスを返す

 
◆vbNullString と "" の違い
   vbNullString は文字列が無い状態。即ちメモリー上にも存在しない。C言語的な表現だと、ポインタ値 0x00000000 となる。

""(空文字列)は長さ 0 バイトの文字列。C言語的な表現だと、ポインタの指す領域に文字列の末尾を示す '\0' があり、文字列は無い。

…でも、

    Debug.Print ("" = vbNullString)

とすると、どちらも文字列が無い(文字列の長さが0)ということが評価されるのか不思議と True を返す。両者は異なるはずなのに…。このままでは嘘つき呼ばわれされそうなので、分かりやすいケースを挙げておく。じゃ以下の2行を実行してみようね。

    Debug.Print StrPtr("")
    Debug.Print StrPtr(vbNullString)

ど〜ですか?

 


戻る