VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/03/03(Sat) 16:55
投稿者ガッ
Eメール
URL
タイトルRe^3: スクリーンサイズに合わせた可変サイズ画面の表示

> ご返信ありがとうございます。
> 具体的には、フォーム内に貼られているボタン、ラベル、SPREAD フォントサイズなど、様々な
> コントロールのプロパティなどを座標、サイズなどを操作するしか方法がないのでしょうか?
> ということです。
> どれくらい大変なのかも含めてご教授していただけないでしょうか?
> よろしくお願い致します。
様々なコントロールの様々なメンバを操作しなければならないので、結果としてその実装が適当だと思います。
もしかしたらネットにサンプルや便利なコントロールが落ちている(売っている)"かも"しれませんが、
すみませんが私には見当がつきません。



追伸といっては何ですが、
操作するコントロールと操作するコントロールのメンバがある程度定まっているならば
VB6には幸いオブジェクトの多様な解釈ができるようになっていますので、
意外と簡単に何とかなるかもしれません。

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.実行してフォームをリサイズしてください。
  気持ち悪いほど拡大縮小されるはずです。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -