VB6、WindowsNTにて質問です。
ディスプレイ一杯にフォームがあるのですが、開発環境で画面いっぱいにしても開発環境より大きい解像度のディスプレイになると一杯ではなくなります。
仕事での開発なのでソースは記載できませんがヒントらしいものを教えていただけるとうれしいです。
フォームの大きさだけでいうなら、最大化すればいいのでは・・・?
中にあるコントロールなどの大きさも変えるなら、フォームを最大化してそのフォームの大きさから計算させれば問題ないかと
単純に、
Private Sub Form_Load()
Call Me.Move(0, 0, Screen.Width, Screen.Height)
End Sub
だとまずいのでしょうか?
フォームのプロパティにある「WindowState」を「2 - 最大化」にすれば、
解像度関係なくディスプレイいっぱいに表示されると思いますが…
説明不足でした。
画面自体は最大化・最小化・閉じるボタンは使えないようにしてあり、
テキストボックスやコンボボックス、ボタンなどもその解像度の比率に合わせ、高さや幅、XY座標も変えたいのです。
やはりScreen.Width, Screen.Height をうまく使うしかないのでしょうか?
そうですね。
基準となる解像度のフォーム(例えば800x600)を最初に作っておいて
そこから実行時のScreen.Width,Heightから基準フォームとの縦、横
それぞれの倍率を求め
For Each 〜 In Controls
とかでループして各コントロールの大きさ、フォント等に指定倍率を掛けて
やると案外楽に出来るかも。
>やはりScreen.Width, Screen.Height をうまく使うしかないのでしょうか?
他力本願ならResizerコントロールの購入かなぁ
そうじゃなければScreen・・・から自力で計算しないと解像度ってわかりませんよね
> テキストボックスやコンボボックス、ボタンなどもその解像度の比率に合わせ、高さや幅、XY座標も変えたいのです。
横から失礼して…投稿にしては非常に長いですが何かの役に立ててください(_orz
Option Explicit
'class ClipControl
'単純に、親フォームに有る子コントロールの縦横比を等倍するクラスです
' 使い方
' 1 親フォームにこのクラスのインスタンス hoge を作る
' 2 hoge.enClipControls Me などとして、親自身を登録する
Public Event Resize()
Private WithEvents ParentEventForm As Form
Private ClipControls As Collection
Public Sub enClipControls(ByRef ParentForm As Form)
Dim Child As Object
Dim ParentWidth As Double
Dim ParentHeight As Double
Set ClipControls = New Collection
Set ParentEventForm = ParentForm
ParentWidth = ParentForm.ScaleWidth
ParentHeight = ParentForm.ScaleHeight
For Each Child In ParentForm.Controls
ClipControls.Add GetSize(Child, ParentWidth, ParentHeight)
Next
End Sub
Public Sub deClipControls()
Set ClipControls = Nothing
Set ParentEventForm = Nothing
End Sub
Private Function GetSize(ByRef Control As Object, ByRef ParentWidth As Double, ByRef ParentHeight As Double) As Variant()
Dim ret(0 To 4) As Variant
On Error Resume Next
Set ret(0) = Control
ret(1) = Control.Left / ParentWidth
ret(2) = Control.Top / ParentHeight
ret(3) = Control.Width / ParentWidth
ret(4) = Control.Height / ParentHeight
GetSize = ret
End Function
Private Sub ParentEventForm_Resize()
Dim Child As Variant
Dim ParentWidth As Double
Dim ParentHeight As Double
If ClipControls.Count > 0 Then
ParentWidth = ParentEventForm.ScaleWidth
ParentHeight = ParentEventForm.ScaleHeight
On Error Resume Next
For Each Child In ClipControls
With Child(0)
.Left = Child(1) * ParentWidth
.Top = Child(2) * ParentHeight
.Width = Child(3) * ParentWidth
.Height = Child(4) * ParentHeight
End With
Next
End If
RaiseEvent Resize
End Sub
環境によって、ということは途中で解像度が変わるわけではないのでしょうから
最初から最大化にしておけばいいのではないでしょうか?
最大化ボタンがあるかどうかではなく、初期状態で最大化にしておくだけです
中身のコントロールに関しては、フォームの大きさから・・・というのは説明済みなので省略
返答遅くなりました。
最初から最大化するとして、ボタンやラベルなどを数値で表した際、
解像度によってははみ出てしまうのですが・・・。
っ殿
一回試してみます
っ さんのソースで確認しました。
長い時間ありがとうございました。
ツイート | ![]() |