| それでは、まず、VB編から | |
| こっちを後から見たかも… それに、ここしか見ない人居るかもしれないのに『まず』も何も |
|
| …揚げ足取らんでいい。 えー、それでは、ダウンロードしたファイルを解答すると、以下のファイルが現れます。 |
|
| ●Display.cls…クラスモジュール。クラス本体 ●Display.bas…標準モジュール。API宣言とか色々 |
|
| …クラスモジュールっていうの、はじめて見たなぁ | |
| ああ。俺も今回はじめて作った | |
| で、これでどうするの? | |
| まぁ取り合えずVBを起動して『標準EXE』を作成。んで、上記のファイルを追加する。 | |
| 必要に応じてオブジェクト名とかは適当に変更してくれ | |
できたよ。![]() それで、どうするの? |
|
| まぁ、サンプルだから、簡単にいこうか。フォームモジュールに以下のコントロールを配置してくれ |
| コントロール | プロパティ | 値 |
| リストボックス | Name | List1 |
| ラベル | Name | Label1 |
| コマンドボタン | Name | Command1 |
| Caption | 変更 |
| 位置とサイズは適当に決めてくれ | |
ふんふん?![]() こんなかんじでいいの? |
|
| 上等だ。んじゃ中身いくぞ。 まず、フォームモジュールのコードの上のほうに次のように記述 |
|
|
Dim m_Display As Display |
|
| Option Explicitは別に書かなくても良いけどな。 m_Displayというのが解像度を扱うクラスになる。 |
|
| これで解像度変更ができるの? | |
| や、まだこれは空っぽだからな。更に以下のコードを追加する。 | |
|
Set m_Display = New Display End Sub |
|
| 別にコレはForm_Load内で書かなくても、起動時に一度だけ実行する部分ならどこでも良い。 これでm_Displayに中身が設定されて実際に解像度変更が出来るようになった。 |
|
| ふ〜ん? | |
| 使えるようになったところで、ディスプレイ解像度変更クラスの各関数を説明しておこう |
| 関数名 | 引数 | 戻り値 | 説明 |
| GetWidth | n As Integer | Integer | 設定リストのn番目の設定での幅が返る。 引数nを省略した場合、現在の画面の幅(ピクセル)が返る。 |
| GetHeight | n As Integer | Integer | 設定リストのn番目の設定での高さが返る。 引数nを省略した場合、現在の画面の高さ(ピクセル)が返る。 |
| GetBit | n As Integer | Integer | 設定リストのn番目の設定での色深度が返る。 引数nを省略した場合、現在の色深度(bit)が返る。 |
| GetDisplayMode | なし | Integer | 設定リストを取得する。また、現在の画面情報をデフォルトにする。 この関数は、オブジェクトが作成されたときに呼び出される為、通常必要ない。 設定リストの数が返る。 |
| GetDisplayModeNumber | なし | Integer | 設定リストの数が返る。 |
| ChangeDisplayMode | n As Integer w As Integer h As Integer b As Integer |
Long | 設定リストのn番目の設定を使用し、解像度を変更する。 nを省略した場合、wを幅、hを高さ、bをビット深度として自動的に設定を探して解像度を変更する。 全ての引数を省略した場合、デフォルトの解像度に変更する。 関数が成功するとDISP_CHANGE_SUCCESSFULが返る。 |
| ん〜? 何か良く分からない | |
| まぁ、実際使ってみよう。 Form_Loadに以下のコードを書いてみ |
|
|
Dim i As Integer Set m_Display = New Display For i = 0 To m_Display.GetDisplayModeNumber - 1 List1.AddItem Format$(m_Display.GetWidth(i), "# x ") & _ Format$(m_Display.GetHeight(i), "#") & _ Format$(m_Display.GetBit(i), " # bit") Next i Label1.Caption = Format$(m_Display.GetWidth, "現在:# x ") & _ Format$(m_Display.GetHeight, "#") & _ Format$(m_Display.GetBit, " # bit") End Sub |
|
| ん、書けたよ | |
| このコードは、利用できる解像度を列挙してリストボックスに出力し、現在の解像度をラベルに表示している。 実行してみ |
|
はーい![]() あ、出たねぇ |
|
| よしよし。 これで、利用できる解像度は取得できたからな。次はいよいよ変更だ。 以下のコードを追加する。 |
|
|
If List1.ListIndex > 0 Then m_Display.ChangeDisplayMode List1.ListIndex End If End Sub |
|
| これだけ? | |
| ああ。これだけだ。画面の解像度が変更されるはず。 | |
| へぇ。 | |
| ちなみに、以下のコードで実行しても同じ結果が得られるはずだ。 | |
|
If List1.ListIndex > 0 Then m_Display.ChangeDisplayMode , m_Display.GetWidth(List1.ListIndex), _ m_Display.GetHeight(List1.ListIndex), _ m_Display.GetBit(List1.ListIndex) End If End Sub |
|
| こっちは画面サイズと色深度で指定してるのね | |
| そうそう。良く分かったな。 ただ、設定の種類によっては再起動の必要があるものがある…4bitの物とかそうらしいけど。 このクラスではその場合、変更できなくなっている。 |
|
| 4bitっていうと…2…4…8……16色?最近のゲームで16色はあまり使わないから大丈夫だね | |
| おぉ、よく知ってたな。色数計算 今現在のゲームだったら大体8bit(256色)とかだし、問題はなかろうな。 |
|
| それで、解像度を元に戻すのはどうやるの? | |
| うむ。引数を全て省略してChangeDisplayModeを呼び出すんだけどな… …まぁ、そんな事しなくてもいい。一度解像度を変更して、プログラムを終了させてみ? |
|
| え? うん… | |
| あ、元の解像度に戻った。 | |
| そう。このクラスは、自身が破棄されるとき(この場合、プログラムの終了)に解像度を元に戻すようになってるから、特に解像度を戻すことは考えなくてよくなっている。 まぁ、念のため終了時、引数なしのChangeDisplayModeを呼び出すのも良いが |
|
| へぇ。便利だねぇ | |
| まぁな。しかし、問題はある | |
| ? | |
| フォーム上にコマンドボタン(Command2)を置いて以下のコードを入力してみ? | |
|
Dim m_Display2 As Display Set m_Display2 = New Display m_Display2.ChangeDisplayMode , 800, 600, 16 End Sub |
|
| これは…ボタンを押したときに解像度を800×600の16ビットカラーにする命令だよね? | |
| そう。ただし、この時使用するオブジェクトは、Command2のClickイベント内で生成している。 さ、実行してみろ。 |
|
| わかった…… …あれ? 確かに解像度は変わるけど、一瞬で元に戻っちゃうよ? |
|
| その通り。Command2のClickイベント内で生成されたオブジェクトは、Command2のClickイベントが終了すると、破棄されてしまう。 だから、解像度が変わっても一瞬で元に戻ってしまうんだ。 |
|
| なるほどねぇ | |
| だから、ディスプレイ解像度変更クラスは、実行するフォームのGeneralの部分で宣言するか、標準モジュールにPublicとして宣言しとくのが良いだろう。 | |
| は〜い。了解しましたぁ | |
| さて。これで一通りの説明は終わったが。何か質問は? | |
| ん〜っとね…『調整の為先送りになった第二回』のテーマって何? | |
| 今までの内容に全く関係ないじゃないか…… |
戻る
メインページ>
倉庫>
サンプル置き場>
ディスプレイ解像度変更