tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
フォームのサイズに合せてコントロール類を拡大・縮小する(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2009/12/26 17:00
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[フォーム][コントロール共通][応用コード]                             *
* キーワード:Form_Resize,スクリーンサイズ,画面サイズ,可変表示,コントロールのサイズ*
***********************************************************************************
記事No  :No.8546
投稿時間:2007/03/03(Sat) 13:11
元質問者:まり
タイトル:スクリーンサイズに合わせた可変サイズ画面の表示

複数の異なる動作マシンのスクリーンサイズに合わせてウインドウサイズを可変表示し、
そのフォーム内のオブジェクトのサイズ、表示位置なども全て連動して、
可変表示させたいのですが、どのようにすれば良いのでしょうか?

-----------------------------------------------------------------------------------
記事No : No.8550
投稿日 : 2007/03/03(Sat) 16:55
回答者 : ガッ  
-----------------------------------------------------------------------------------
詳しくは元のスレッドをご覧下さい。--- by 花ちゃん ---
http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=8546&page=270
-----------------------------------------------------------------------------------

1.新しいプロジェクトを作り、Class1とForm1を用意します。
2.Class1には以下のコードを書き入れます
'-------Class1
Option Explicit
Public csControl    As Control
Public csLeft       As Double
Public csTop        As Double
Public csWidth      As Double
Public csHeight     As Double
Public csFontSize   As Double

3.Form1には適当にツールボックスからコントロールを2、3個貼り付けておきます。
4.最後にForm1に以下のコードを書き入れます。
'-------Form1
Option Explicit

Private Clipped         As Boolean
Private ctls            As Collection
Private clpScaleWidth   As Double
Private clpScaleHeight  As Double

Private Sub Form_Load()
    Call ClipControl
End Sub

Private Function ClipControl()
    'コントロールの現在の状態をクリップする
    Dim ctl             As Control
    Dim ctlst           As Class1
    
    On Error Resume Next
    
    Set ctls = New Collection
    clpScaleWidth = Me.ScaleWidth
    clpScaleHeight = Me.ScaleHeight
    For Each ctl In Me.Controls
        Set ctlst = New Class1
        With ctlst
            Set .csControl = ctl
            .csLeft = ctl.Left
            .csTop = ctl.Top
            .csWidth = ctl.Width
            .csHeight = ctl.Height
            .csFontSize = ctl.FontSize
        End With
        Call ctls.Add(ctlst)
    Next
    Clipped = True
End Function

Private Sub Form_Resize()
    'クリップしたコントロールをリサイズする
    Dim ctlst           As Class1
    Dim ratScaleWidth   As Double
    Dim ratScaleHeight  As Double
    
    If Clipped Then
        On Error Resume Next
        '水平、垂直方向の拡大率を決定する
        ratScaleWidth = Me.ScaleWidth / clpScaleWidth
        ratScaleHeight = Me.ScaleHeight / clpScaleHeight
        'それぞれのコントロールを拡大する
        For Each ctlst In ctls
            With ctlst
                .csControl.Top = .csTop * ratScaleHeight
                .csControl.Left = .csLeft * ratScaleWidth
                .csControl.Width = .csWidth * ratScaleWidth
                .csControl.Height = .csHeight * ratScaleHeight
                .csControl.FontSize = .csFontSize * ratScaleWidth  'フォントサイズの拡大幅は適当です
            End With
        Next
    End If
End Sub

5.実行してフォームをリサイズしてください。
  気持ち悪いほど拡大縮小されるはずです。



 上記実行結果の画像
 (クリックすると元のサイズでご覧になれます。)

   標準のサイズ            フォームのサイズを小さくした場合  フォームのサイズを大きくした場合



 [スレッド一覧へ] [親スレッドへ]