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