投稿日 | : 2007/03/06(Tue) 17:23 |
投稿者 | : FR |
Eメール | : |
URL | : |
タイトル | : Re^3: ユーザーコントロールがある場合の最大化 |
ダンボさんやガッさんの御意見を元に自分なりに以下のコードを記述してみました。
結果はメインフォーム上のコントロール類とSSTabは最大化されますが、SSTab上の
ユーザーコントロール類は駄目でした・・・。
よろしくお願いします。
Class1
Option Explicit
Public csControl As Control
Public csParent 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
メインForm
Private Clipped As Boolean
Private ctls As Collection
Private clpScaleWidth As Double
Private clpScaleHeight As Double
Form_Load
Call ClipControl
Private Function ClipControl()
Dim Ctl As Control
Dim ctlst As Resize
On Error Resume Next
Set ctls = New Collection
clpScaleWidth = Me.ScaleWidth
clpScaleHeight = Me.ScaleHeight
For Each Ctl In Me.Controls
Set ctlst = New Resize
With ctlst
Set .csControl = Ctl
Set .csParent = Ctl.parent
.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 Ctl As Control, CtlCln As New Collection
Dim ratScaleWidth As Double
Dim ratScaleHeight As Double
Dim ctlst As Resize
On Error Resume Next
For Each Ctl In Controls
If Ctl.Left < 0 Then CtlCln.Add Ctl
Next
tabView.Visible = False
'水平、垂直方向の拡大率を決定する
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 * ScaleWidth
End With
Next
tabView.Visible = True
End Sub