素人がゲームプログラム作成に挑戦
ゲームを買うお金がないから、ゲームを作るというゲームに挑戦!言語はVisual Basic(VB)をメインにC++、C#、Javaは参考程度
Entries
新しい記事を書く事で広告が消せます。
- --------
- カテゴリ : スポンサー広告
- コメント : -
- トラックバック : -
-件のコメント
コメントの投稿
-件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/17-3515602e
- この記事に対してトラックバックを送信する(FC2ブログユーザー)
Formのサイズ その2
- ジャンル : コンピュータ
- スレッドテーマ : Visual Basic
Formのサイズの最後に書いた画面の最大化のプログラムですが、
WindowStateプロパティを利用するとフォームが一度最大化されてから大きさ変更されてしまいます。
これ、PCによって動作がはっきり判ってしまうため、イマイチです。
で、最大化ボタンを押したときに発生するイベントとか無いのか探してみましたが、なさそうです。
WindowStateプロパティを変化したときに発生するイベントもなさそうです。
ということで、対策を考えてみました。
WindowStateプロパティは最大化し終わったときにMaximizedになるみたいですので、使うのをやめた方がよさそう。
そこで、利用するのはMaximumSizeプロパティかMaximizedBoundsプロパティになりますかね。
どちらのプロパティもフォームの最大サイズを指定するプロパティになります。
MaximumSizeプロパティであれば、最大化ボタンを押してもフォームの端をドラッグして広げても指定したサイズを最大値とします。
一方、MaximizedBoundsプロパティは最大化ボタンを押したときは指定したサイズを最大値としますが、ドラッグしたときは範囲を超えていきます。
この問題は、FormBorderStyleプロパティを固定しておけば問題はなさそうです。
で、実際にどちらのパターンがいいのかと動作させてみました。
実験用のコードは以下のような感じです。
WindowStateプロパティを使わず最大値を決める方法を取っています。
さらに、描画領域を800x600取るようにするため、タイトルバーやフォームの枠のサイズをフォームのサイズとクライアントサイズの差で求めています。
これを最大値として加えてあげれば決めた描画領域を確保することができます。
MaximumSizeプロパティにはWidthやHeightがありますが、これらには直接値を代入することができませんので、Size構造体を作成し設定してあげます。
MaximizedBoundsプロパティはRectangle構造体を保存するようになっています。
Rectangle(表示位置X座標,表示位置Y座標,横幅,縦幅)と指定します。
どちらのプロパティを利用しても最大化ボタンを押したときにのみ適用されます。
ただし、MaximumSizeプロパティはやはり一瞬だけ全画面表示になります。
ということから、フォームを固定してMaximizedBoundsプロパティで最大化させる方法がベターになりそうです。
WindowStateプロパティを利用するとフォームが一度最大化されてから大きさ変更されてしまいます。
これ、PCによって動作がはっきり判ってしまうため、イマイチです。
で、最大化ボタンを押したときに発生するイベントとか無いのか探してみましたが、なさそうです。
WindowStateプロパティを変化したときに発生するイベントもなさそうです。
ということで、対策を考えてみました。
WindowStateプロパティは最大化し終わったときにMaximizedになるみたいですので、使うのをやめた方がよさそう。
そこで、利用するのはMaximumSizeプロパティかMaximizedBoundsプロパティになりますかね。
どちらのプロパティもフォームの最大サイズを指定するプロパティになります。
MaximumSizeプロパティであれば、最大化ボタンを押してもフォームの端をドラッグして広げても指定したサイズを最大値とします。
一方、MaximizedBoundsプロパティは最大化ボタンを押したときは指定したサイズを最大値としますが、ドラッグしたときは範囲を超えていきます。
この問題は、FormBorderStyleプロパティを固定しておけば問題はなさそうです。
で、実際にどちらのパターンがいいのかと動作させてみました。
実験用のコードは以下のような感じです。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim x, y As Integer
x = Me.Size.Width - Me.ClientSize.Width
y = Me.Size.Height - Me.ClientSize.Height
'Me.MaximumSize = New Size(800 + x, 600 + y)
Me.MaximizedBounds = New Rectangle(0, 0, 800 + x, 600 + y)
End Sub
Dim x, y As Integer
x = Me.Size.Width - Me.ClientSize.Width
y = Me.Size.Height - Me.ClientSize.Height
'Me.MaximumSize = New Size(800 + x, 600 + y)
Me.MaximizedBounds = New Rectangle(0, 0, 800 + x, 600 + y)
End Sub
WindowStateプロパティを使わず最大値を決める方法を取っています。
さらに、描画領域を800x600取るようにするため、タイトルバーやフォームの枠のサイズをフォームのサイズとクライアントサイズの差で求めています。
これを最大値として加えてあげれば決めた描画領域を確保することができます。
MaximumSizeプロパティにはWidthやHeightがありますが、これらには直接値を代入することができませんので、Size構造体を作成し設定してあげます。
MaximizedBoundsプロパティはRectangle構造体を保存するようになっています。
Rectangle(表示位置X座標,表示位置Y座標,横幅,縦幅)と指定します。
どちらのプロパティを利用しても最大化ボタンを押したときにのみ適用されます。
ただし、MaximumSizeプロパティはやはり一瞬だけ全画面表示になります。
ということから、フォームを固定してMaximizedBoundsプロパティで最大化させる方法がベターになりそうです。
0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/17-3515602e
- この記事に対してトラックバックを送信する(FC2ブログユーザー)



