ちょっと便利な小技集(その1)
                                                        玄関へお回り下さい。
   
  **********   目     次   **********  

1.タイトルバーの消し方
2.ラベル等に(&)を表示するには
3.テキストボックスに改行しながら連続してデータを表示するには
4.ピクチャーボックスの Picture プロパティの内容を消去するには
5.Moveメソッドを活用する
6.プログラム通りの順序で実行させる
7.フォーム上のすべてのコントロールへのアクセス
8.フォーカスをもつ(アクティブ)コントロールを調べるには
9.ちょっと便利な小技集(その2)へ移動
1.タイトルバーの消し方                           
    オープニングのタイトル画面のフォーム等には普通タイトルバーは表示されません。
BorderStyle を vbBSNone − 0 にすれば同様にタイトルバーは表示されませんがこの場合3Dでは表示されません。(モアベター)
フォームの Controlbox プロパティを False にし、Caption を ”” (なにも入力しない)に設定するだけでできます。

別途、タスクバーにアイコンとキャプションを残したままタイトルバーを 外す方法は、こちら

2.ラベル等に(&)を表示するには
   この場合&&のように2個つづけて書くと1個表示されます。

””の場合も "花ちゃんの "" ホームページ "" "のように同様にします。

3.テキストボックスに改行しながら連続してデータを表示するには    (062)
    すでに表示しているデータを足しながら表示する、その時に改行コードも追加する。

その時、テキストボックスの MultiLine プロパティを True にし、
ScrollBars=vbVertical  − (2)  に設定するのも忘れずに。

    ' ファイルの終端までループを繰り返します。
   
Do While Not EOF(intFileNo)
       
'1 行づつ変数に読み込みます。
       
Line Input #intFileNo, strTextLine
       
' テキストボックスに表示します。
        strTxtDat = strTxtDat & strTextLine & vbCrLf
   
Loop
   
'一旦変数にすべて読み込みその後テキストボックスに
   
'表示した方が高速に処理できる

4.ピクチャーボックスの Picture プロパティの内容を消去するには
      Set Picture1.Picture = LoadPicture()
これで ヌルファイルがロードされPictureがクリアされます。

5.Moveメソッドを活用する
   普通フォーム等にサイズや表示位置の設定・変更は下記のように書きますが
Private Sub Form_Load()
  Form1.Left = 0
  Form1.Top = 0
  Form1.Width = 8630
  Form1.Height = 4500
End Sub

Moveメソッドを使用すると1行で済みますし、高速化につながります。
Private Sub Form_Load()
  Form1.Move 0, 0, 8630, 4500
End Sub

フォームを画面いっぱいに表示し、テキストボックスもフォームいっぱいに表示する
Private Sub Form_Load()
  WindowState = vbMaximized  (設定値=2)
  Form1.Show
  Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub


フォームのサイズが変わってもテキストボックスをフォームいっぱいに表示する
Private Sub Form_Resize()
   Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub


イメージを指定した位置に表示
Image1.Move 200, 200


このように、ついつい最初に覚えたやり方で実現できる事は、他の便利なやり方があっても知らない事が多いのでは!。

 
6.プログラム通りの順序で実行させる
   DoEvents 関数を使用します。
ヘルプには
発生したイベントがオペレーティングシステムによって処理されるようにプログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。

次のコードを実行すると
1.Label1.Caption に "10秒後に終了します。" と表示して
2.10秒待ってから
3.Beep
となるはずですが、実際はすぐには、Label1に表示されず終了時に表示します。
Command1 と Command2 の違いを比べて見て下さい。

Private Sub Command1_Click()
  Dim st As Long
  Label1.Caption = "10秒後に終了します。"
  st = Timer
  Do While Timer - st < 10

  Loop
  'Label1.Caption = ""
  Beep
End Sub

Private Sub Command2_Click()
  Dim st As Long
  Label2.Caption = "10秒後に終了します。"
  DoEvents '追加する(本当は、Label2.Refresh のように書く)
  st = Timer
  Do While Timer - st < 10
    DoEvents '追加する
  Loop
  'Label2.Caption = ""
  'DoEvents '本当は、Label2.Refresh のように書く
  Beep
End Sub


このような事が起こっていると感じた場合はこの1行を入れて確認して見て下さい。
但し、上記のような事例は、Label2.Refresh で強制的に再描画を行う方が正しいコードです。
詳しくは、ヘルプで、Refresh メソッドの項をご覧下さい。
7.フォーム上のすべてのコントロールへのアクセス   (072)
   Controls コレクションを使うと、フォーム上のすべてのコントロール (コントロール配列の要素を含む) のプロパティを設定することができます。

下記はフォーム上のすべてのコントロールのBackColorを赤に設定しています。
いちいち、書かなくてもよいので便利ですね!

Private Sub Command1_Click()
'すべてのコントロールのBackColorを変更します。
  Dim i As Long
  '中には無いプロパティもあるのでエラーチェックを
  On Error Resume Next
  For i = 0 To Controls.Count - 1
    Controls(i).BackColor = QBColor(12)
    '非表示にする場合
    'Controls(i).Visible = False
  Next i
End Sub


上記にTypeName()関数を組合せる事でフォーム上の特定のコントロールを取得できます。
下記では "TextBox" だけ BackColor = QBColor(14) に変更しています。

Private Sub Command2_Click()
'テキストボックスだけBackColorを変更します。
  Dim i As Long
  Dim Mytype As String
  For i = 0 To Controls.Count - 1
    Mytype = TypeName(Controls(i))
    'Debug.Print Mytype
    If TypeName(Controls(i)) = "TextBox" Then
      Controls(i).BackColor = QBColor(14)
    End If
  Next i
End Sub


8.フォーカスをもつ(アクティブ)コントロールを調べるには        (003)
   フォーカスをもつコントロールを調べるには Screen.ActiveControl でできます。
フォームに色々のコントロールを貼付け試して下さい。

Option Explicit   'SampleNo=003 WindowsXP VB6.0(SP5) 2002.04.16

Private Sub Form_Click()
  Dim strComment As String
  strComment = " コントロールがアクティブです"
  Select Case TypeOf Screen.ActiveControl Is Object
    'テキストボックスがアクティブ
    Case TypeOf Screen.ActiveControl Is TextBox
      Label1.Caption = Screen.ActiveControl.Text & strComment
    'リストボックスがアクティブ
    Case TypeOf Screen.ActiveControl Is ListBox
      Label1.Caption = Screen.ActiveControl.Name & strComment
    'コマンドボタンがアクティブ
    Case TypeOf Screen.ActiveControl Is CommandButton
      Label1.Caption = Screen.ActiveControl.Caption & strComment
    'その他のコントロールがアクティブ
    Case Else
      Label1.Caption = "その他のコントロールがアクティブです"
  End Select
End Sub




2002/05/16