販売管理ソフトを作る - ヘッダ部を動的に生成する

ヘッダ部を動的に生成する



Option Explicit

Private Const MARGIN As Integer = 6
Private Const PADING As Currency = 2.8
Private Const TEXT_PADING As Integer = 16
Private Const LINE_HIGHT As Integer = 17
Private Const FONT_SIZE As Currency = 11.25
Private Const FONT_NAME As String = "MS ゴシック"

Public Sub Main()
Dim objForm As clsFormMain
Set objForm = New clsFormMain
Set objForm.Form = frmMain

With frmMain
.Caption = "見積入力"
.Font.Name = FONT_NAME
.Font.Size = FONT_SIZE
.Height = 480 '適当に調整する
.Width = 640 '適当に調整する
End With

'ヘッダ部 初期化
Call InitHeader(objForm)

'終了ボタン
Set objForm.cmdExit = frmMain.Controls.Add("Forms.CommandButton.1")
With objForm.cmdExit
.Width = 66
.Height = 21
.Left = frmMain.Width - .Width - MARGIN - 5 '5 は 微調整
.Top = frmMain.Height - .Height - MARGIN - 25 '25 は 微調整
End With

objForm.Show
End Sub

'ヘッダ部 初期化
Private Sub InitHeader(objForm As clsFormMain)

'パネル
Dim pnlHeader As MSForms.Label
Set pnlHeader = frmMain.Controls.Add("Forms.Label.1")
With pnlHeader
.Left = MARGIN
.Top = MARGIN
.Height = 150 '適当に設定しておく
.Width = frmMain.Width - MARGIN - MARGIN - 5 '5 は 微調整
.BorderStyle = fmBorderStyleSingle
.BorderColor = &HC0C0C0
End With

'Caption, TextBox, Label
Dim pnlDummy(5) As MSForms.Label
Dim capDummy(5) As MSForms.Label
Dim txtDummy(5) As MSForms.TextBox
Dim pnlDummy2(5) As MSForms.Label
Dim lblDummy(5) As MSForms.Label

Const CAPTION_WIDTH As Integer = 84 '適当に調整する

Dim i As Integer
Dim iTop As Integer: iTop = MARGIN + MARGIN
For i = 0 To 5
'標題の背景
Set pnlDummy(i) = frmMain.Controls.Add("Forms.Label.1")
With pnlDummy(i)
.Left = MARGIN + MARGIN
.Top = iTop
.Height = LINE_HIGHT
.Width = CAPTION_WIDTH
.BorderStyle = fmBorderStyleSingle
.BorderColor = &HFF8080
.BackColor = &HFFC0C0
End With

'標題
Set capDummy(i) = frmMain.Controls.Add("Forms.Label.1")
With capDummy(i)
.Left = MARGIN + MARGIN
.Top = iTop + PADING
.Height = FONT_SIZE
.Width = CAPTION_WIDTH
.BackStyle = fmBackStyleTransparent
.BorderStyle = fmBorderStyleNone
.TextAlign = fmTextAlignCenter
.Font.Name = FONT_NAME
.Font.Size = FONT_SIZE
Select Case i
Case 0: .Caption = "伝票番号"
Case 1: .Caption = "日付"
Case 2: .Caption = "部署"
Case 3: .Caption = "担当者"
Case 4: .Caption = "得意先"
Case 5: .Caption = "摘要"
End Select
End With

'TextBox
Set txtDummy(i) = frmMain.Controls.Add("Forms.TextBox.1")
With txtDummy(i)
.Left = MARGIN + MARGIN + CAPTION_WIDTH + MARGIN
.Top = iTop
Select Case i
Case 0: .MaxLength = 8 '伝票番号
Case 1: .MaxLength = 10 '日付
Case 2: .MaxLength = 4 '部署
Case 3: .MaxLength = 2 '担当者
Case 4: .MaxLength = 4 '得意先
Case 5: .MaxLength = 0 '摘要
End Select
If i = 5 Then
.Width = 400 '適当に調整する
Else
.Width = .MaxLength * (FONT_SIZE / 2) + TEXT_PADING
End If
.Height = LINE_HIGHT
.Font.Name = FONT_NAME
.Font.Size = FONT_SIZE
If i = 5 Then
.Text = "NNNNNNNNNNNNNNNNNNNN"
Else
.Text = String(.MaxLength, "9")
End If
End With

Select Case i
Case 2, 3, 4 '部署, 担当者, 得意先
'ラベルの背景
Set pnlDummy2(i) = frmMain.Controls.Add("Forms.Label.1")
With pnlDummy2(i)
.Left = MARGIN + MARGIN + CAPTION_WIDTH + MARGIN + (4 * (FONT_SIZE / 2) + TEXT_PADING) + MARGIN
.Top = iTop
.Width = 350 '適当に調整する
.Height = LINE_HIGHT
.BorderStyle = fmBorderStyleSingle
.BorderColor = &HC0C0C0
.BackColor = &H80000016
End With

'ラベル
Set lblDummy(i) = frmMain.Controls.Add("Forms.Label.1")
With lblDummy(i)
.Left = MARGIN + MARGIN + CAPTION_WIDTH + MARGIN + (4 * (FONT_SIZE / 2) + TEXT_PADING) + MARGIN + PADING
.Top = iTop + PADING
.Width = pnlDummy2(i).Width - (PADING * 2) '適当に調整する
.BorderStyle = fmBorderStyleNone
.BackStyle = fmBackStyleTransparent
.Font.Name = FONT_NAME
.Font.Size = FONT_SIZE
.Caption = "NNNNNNNNNN"
End With
End Select

iTop = iTop + LINE_HIGHT + MARGIN
Next
pnlHeader.Height = iTop - pnlHeader.Top
End Sub