tagCANDY CGI VBレスキュー(花ちゃん) - フォームのサイズに合せてコントロール類を拡大・縮小する(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
フォームのサイズに合せてコントロール類を拡大・縮小する(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

フォームのサイズに合せてコントロール類を拡大・縮小する(VB6.0) [No.195の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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.実行してフォームをリサイズしてください。
  気持ち悪いほど拡大縮小されるはずです。



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

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

Page: 1 |

フォームのサイズに合せてコントロール類を拡大・縮小する(VB6.0)_1  (No.1の個別表示) [スレッド一覧へ]
日時: 2011/04/05 11:15
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[フォーム][コントロール共通][応用コード]                             *
* キーワード:Form_Resize,スクリーンサイズ,画面サイズ,可変表示,コントロールのサイズ*
***********************************************************************************

SSTabの上にユーザーコントロールを5つ配置した箇所は最大化できず、また
2から5番目のユーザーコントロールは表示すら出来なくなりました。
これらを最大化するにはどうしたら良いのでしょうか?

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

(SSTabの中にFlameがあって更にその中にあるコントロールは失敗する?)
(75000こそマジックナンバーと呼ぶべきだなぁ)

'-------Class1
Option Explicit
Public csControl    As Control
Public csHideSSTab  As Boolean
Public csLeft       As Double
Public csTop        As Double
Public csWidth      As Double
Public csHeight     As Double
Public csFontSize   As Double

'-------Form1
Option Explicit
Private Clipped         As Boolean
Private ctls            As Collection
Private clpScaleWidth   As Double
Private clpScaleHeight  As Double

Private Function ClipControl()
    'コントロールの現在の状態をクリップする
    Dim ctl             As Control
    Dim ctlst           As Class1
    
    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
            If (TypeOf ctl.Container Is SSTab) And (ctl.Left < 0) Then
                .csHideSSTab = True
                .csLeft = ctl.Left + 75000
            Else
                .csHideSSTab = False
                .csLeft = ctl.Left
            End If
            .csTop = ctl.Top
            .csWidth = ctl.Width
            .csHeight = ctl.Height
            On Error Resume Next
            .csFontSize = ctl.FontSize
            On Error GoTo 0
        End With
        Call ctls.Add(ctlst)
    Next
    Clipped = True
End Function

Private Sub Form_Load()
    Call ClipControl
End Sub

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
                If .csHideSSTab Then
                    .csControl.Left = .csLeft * ratScaleWidth - 75000
                Else
                    .csControl.Left = .csLeft * ratScaleWidth
                End If
                .csControl.Top = .csTop * ratScaleHeight
                .csControl.Width = .csWidth * ratScaleWidth
                .csControl.Height = .csHeight * ratScaleHeight
                .csControl.FontSize = .csFontSize * ratScaleWidth  'フォントサイズの拡大幅は適当です
            End With
        Next
    End If
End Sub
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ