tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルフォームを常に正四角形にしたい。
記事No11057
投稿日: 2008/01/05(Sat) 12:46
投稿者麻雀入門
タイトル通り、フォームを常に正四角形にしたいんです。
リサイズのとこで制御を書いてみたもののうまくいきません。
プロパティを見てもできそうになかったのですがいい方法はないでしょうか?

[ツリー表示へ]
タイトルRe: フォームを常に正四角形にしたい。
記事No11058
投稿日: 2008/01/05(Sat) 13:13
投稿者花ちゃん
> リサイズのとこで制御を書いてみたもののうまくいきません。

どのように書かれて、どこがうまくいかなかったのでしょうか?

Private Sub Form_Resize()
   If Me.WindowState = vbMaximized Then
      Me.WindowState = vbNormal
   End If
   If Me.WindowState = vbNormal Then
      Me.Width = Me.Height
      Me.Height = Me.Width
   End If
End Sub

[ツリー表示へ]
タイトルRe^2: フォームを常に正四角形にしたい。
記事No11064
投稿日: 2008/01/05(Sat) 20:00
投稿者麻雀入門
申し訳ない。

Private Sub Form_Resize()
 If Form1.Height > Form1.Width Then
  Form1.Width = Form1.Height
 ElseIf Form1.Width > Form1.Height Then
  Form1.Height = Form1.Width
 End If
End Sub

こう書いてます。
フォームを大きくすることはできますが小さくできません。
助言お願いします。

[ツリー表示へ]
タイトルRe^3: フォームを常に正四角形にしたい。
記事No11065
投稿日: 2008/01/05(Sat) 21:10
投稿者しんご
> フォームを大きくすることはできますが小さくできません。

この「大きく」「小さく」とは

1.フォームの最大化、最小化
2.フォームの隅にマウスカーソルを合わせて自由に変更

のどちらですか?

貴方のコードにはMe.WindowStateの制御がないので
おそらく後者だと思うのですが、後者だとした場合
貴方のコードではフォームの大きさを大きくはできますが
小さくはできません。

たとえば、フォームの高さを変更した場合
1.幅を高さと同じ大きさにする
2.高さを幅の大きさにする
のどちらにするかでコードが変わってきます。幅に主眼を置いた場合も同様。
どちらを希望ですか?1も2も実現可能です。


>花ちゃんさん
花ちゃんさんのコードでは、高さを変更した場合は幅も同等の大きさとなり
幅を変更した場合はサイズが変わらないとなりますね。

[ツリー表示へ]
タイトルRe^4: フォームを常に正四角形にしたい。
記事No11066
投稿日: 2008/01/05(Sat) 21:55
投稿者麻雀入門
フォームの隅にマウスカーソルを合わせて自由に変更する方です。
高さを変えた場合は幅を高さに合わせる。
幅を変えた場合は高さを幅に合わせる、これがしたいんです。
説明不足ですいません。

[ツリー表示へ]
タイトルRe^5: フォームを常に正四角形にしたい。
記事No11068
投稿日: 2008/01/05(Sat) 22:38
投稿者花ちゃん
下記ではだめでしょうか?

Option Explicit

Private frmWidth As Integer
Private frmHeight As Integer

Private Sub Form_Resize()
   If Me.WindowState = vbMaximized Then
      Me.WindowState = vbNormal
   End If
   If Me.WindowState = vbNormal Then
      If Me.Width <> frmWidth Then
         Me.Height = Me.Width
      End If
      If Me.Height <> frmHeight Then
         Me.Width = Me.Height
      End If
   End If
   frmWidth = Me.Width
   frmHeight = Me.Height
End Sub

[ツリー表示へ]
タイトルRe^6: フォームを常に正四角形にしたい。
記事No11072
投稿日: 2008/01/07(Mon) 09:44
投稿者よねKEN
花ちゃんがNo.11068で提示されているコードをカスタマイズして以下のような実装もできますね。
どんな風にリサイズしたいかという仕様次第ですが。

No.11068のコードとの違いは、
No.11068のコードは正方形に補正するときの基準を幅とする幅優先の仕様であるのに対して、
こちらのコードはユーザ操作によるリサイズでより大きく変更された方の長さ(幅or高さ)を使用して正方形に補正します。
※机上で書いたコードで動作は未検証です。

Option Explicit

Private frmWidth As Integer
Private frmHeight As Integer

Private Sub Form_Resize()
   If Me.WindowState = vbMaximized Then
      Me.WindowState = vbNormal
   End If
   If Me.WindowState = vbNormal Then
      If Abs(Me.Width - frmWidth) > Abs(Me.Height - frmHeight) Then
         Me.Height = Me.Width
      Else
         Me.Width = Me.Height
      End If
   End If
   frmWidth = Me.Width
   frmHeight = Me.Height
End Sub

[ツリー表示へ]
タイトルRe^7: フォームを常に正四角形にしたい。
記事No11074
投稿日: 2008/01/07(Mon) 10:56
投稿者花ちゃん
> ※机上で書いたコードで動作は未検証です。

縦・横の変りに、大・小に置き換わっているので、拡大又は、縮小のどちらかが
優先されるようです。
結局同じような動きになりますね。

四辺の移動のメッセージを四隅の移動のメッセージに置き換えれば、スムーズな
動きをするかも知れませんが。

[ツリー表示へ]
タイトルRe^8: フォームを常に正四角形にしたい。
記事No11075
投稿日: 2008/01/07(Mon) 11:47
投稿者よねKEN
> > ※机上で書いたコードで動作は未検証です。
>
> 縦・横の変りに、大・小に置き換わっているので、拡大又は、縮小のどちらかが
> 優先されるようです。
> 結局同じような動きになりますね。

あ!確かにそうですね(^^;
例えば、幅を大きく縮小し、高さを大きく拡大した場合、
幅の変化、高さの変化のどちらが勝っても違和感のある結果になりますね。

> 四辺の移動のメッセージを四隅の移動のメッセージに置き換えれば、
> スムーズな動きをするかも知れませんが。

そうですね。あるいは4つ角ではリサイズ禁止、4辺のみでリサイズを許可(できるかどうかわかりませんが)
するようなトリックを入れられればNo.11068 の花ちゃんのコードがよいように思います。

[ツリー表示へ]