パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

FORMのプロパティ
=========================================================================================
Visual Basicのプログラム作成にあたり、一番土台になるのがFormです。このFormのプロパティは多種あり
ますが、基本的なものはすぐ理解できると思いますので自学自習していただくとして、ちょっと説明が必要な
プロパティをいくつかピックアップしておきたいと思います。
プロパティについて基本的なことは、初めて作るVBプログラムで取り上げていますので参照して下さい。
今回取り上げるのは、keypreview, FontTransparent,AutoRedrawの3つです。いずれもユーザーインター
フェース(見た目)の仕上げに知らないと困るものばかりです。
=========================================================================================

1 keypreview
キーイベント(KeyDown,KeyUp,KeyPress)をFORMがイベントとして受け取るかどうかを決めるプロパティです。
True  まず、Formがキーイベントを受け取り、その後アクティブなコントロールがキーイベントを受け取ります。
False アクティブなコントロールだけがキーイベントを受け取り、Formは受け取りません。

例えば、下のようなFormの上に、Label, TextBox, PictureBoxなどのコントロールがのっかっているプログラム
があったとします。この時に何かキーを押したらどうなるでしょうか。どのコントロールがそのキーイベントを受
け取るのでしょうか。

キーイベントはフォーカスのあるコントロール(=アクティブコントロール)が受け取ることになっています。
もし、PictureBoxにフォーカスがあれば、
Private Sub PictureBox_KeyPress( )     あるいはKeyDown( ), KeyUp( )
というイベントが発生します。

この時、Form のKeypreviewプロパティがTrueなら、まずFormがキーイベントを受け取り、
Private Sub Form_KeyPress( ) というイベントが発生します。
Keypreview = False ならFormはキーイベントを受け取りません。



使用例としては、ちょっと変なプログラムですが、例えば、Shiftキーが押されたら、FormをUnloadして、
プログラムを終了するというというプログラムを考えてみます。
この場合、
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 1 Then Unload Form1
End Sub
というコードになりますが、
Keypreview = False だと、Form以外のコントロールがアクティブの場合、Formはキーイベントを受け取れず
このイベントプロシージャは実行されない(=すなわち、このプログラムは終了しない)ということになります。
従って、このようなケースでキーイベントをFormにも受け取らせたい場合は、Keypreview = True としなけれ
ばなりません。

他に、Form上の絵(Imageコントロールなど)を 矢印キー(<- ->など)で、左右に動かしたい場合など
(つまり、シューティングゲームなどの場合)も、Keypreview = True とする必要があります。




2 FontTransparent
Trueにすると、背景のグラフィックスやテキストが文字をすかして表示され、Falseにすると背景のグラフィックス
やテキストが覆われます。

FontTransparent = True だと下のグラフィックスや文字が透かして表示されます。


Falseだと、その文字の大きさの四角形分だけ、下のグラフィックスやテキストが覆われます。



むかーしむかし、Basicでプログラムを作っていた時代、シューティングゲームなどで、(文字で作った)
キャラクターを移動させる場合、
Print " "
などとして、移動前の部分を空白(スペース)で上書きして消す方法をとっていましたが、同じ手法を
VBでやろうとしたら、FontTransparent = False にしないといけません。


3 Autoredraw
画面が変化した時に、グラフィックメソッドで描画されたグラフィックが、自動的に再描画されるかされないか
を設定します。
True 自動的に再描画される
False 再描画されない

Formのイベント(起動、終了、再描画)で詳しく解説していますので、参照して下さい。



TopPage > Visual BasIc&Excel活用研究目次