それでは、まず、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として宣言しとくのが良いだろう。 | |
は〜い。了解しましたぁ | |
さて。これで一通りの説明は終わったが。何か質問は? | |
ん〜っとね…『調整の為先送りになった第二回』のテーマって何? | |
今までの内容に全く関係ないじゃないか…… |
戻る
メインページ>
倉庫>
サンプル置き場>
ディスプレイ解像度変更