-
Notifications
You must be signed in to change notification settings - Fork 0
/
modResize.bas
147 lines (117 loc) · 5.79 KB
/
modResize.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Attribute VB_Name = "modResize"
Option Explicit
'@IgnoreModule IntegerDataType, ModuleWithoutFolder
Public Type ControlPositionType
Left As Single
Top As Single
Width As Single
Height As Single
FontSize As Single
End Type
Public prefsControlPositions() As ControlPositionType
Public prefsCurrentWidth As Double
Public prefsCurrentHeight As Double
Public msgBoxAControlPositions() As ControlPositionType
Public msgBoxACurrentWidth As Double
Public msgBoxACurrentHeight As Double
'---------------------------------------------------------------------------------------
' Procedure : ResizeControls
' Author : adapted from Rod Stephens @ vb-helper.com
' Date : 16/04/2021
' Purpose : Arrange the controls for a new size.
'---------------------------------------------------------------------------------------
'
Public Sub resizeControls(ByRef thisForm As Form, ByRef m_ControlPositions() As ControlPositionType, ByVal m_FormWid As Double, ByVal m_FormHgt As Double, ByVal formFontSize As Long)
Dim I As Integer: I = 0
Dim Ctrl As Control
Dim x_scale As Single: x_scale = 0
Dim y_scale As Single: y_scale = 0
On Error GoTo ResizeControls_Error
' Get the form's current scale factors.
x_scale = thisForm.ScaleWidth / m_FormWid
y_scale = thisForm.ScaleHeight / m_FormHgt
' Position the controls.
I = 1
For Each Ctrl In thisForm.Controls
With m_ControlPositions(I)
If (TypeOf Ctrl Is CommandButton) Or (TypeOf Ctrl Is ListBox) Or (TypeOf Ctrl Is textBox) Or (TypeOf Ctrl Is FileListBox) Or (TypeOf Ctrl Is Label) Or (TypeOf Ctrl Is ComboBox) Or (TypeOf Ctrl Is CheckBox) Or (TypeOf Ctrl Is OptionButton) Or (TypeOf Ctrl Is Frame) Or (TypeOf Ctrl Is Image) Or (TypeOf Ctrl Is PictureBox) Or (TypeOf Ctrl Is Slider) Then
If (TypeOf Ctrl Is Image) Then
Ctrl.Stretch = True
Ctrl.Left = x_scale * .Left
Ctrl.Top = y_scale * .Top
Ctrl.Width = x_scale * .Width
Ctrl.Height = Ctrl.Width ' always square in our case
Ctrl.Refresh
Else
Ctrl.Left = x_scale * .Left
Ctrl.Top = y_scale * .Top
Ctrl.Width = x_scale * .Width
If Not (TypeOf Ctrl Is ComboBox) Then
' Cannot change height of ComboBoxes.
Ctrl.Height = y_scale * .Height
End If
On Error Resume Next
Ctrl.Font.Size = y_scale * formFontSize
Ctrl.Refresh
On Error GoTo 0
End If
End If
End With
I = I + 1
Next Ctrl
'If you want to adapt to a PictureBox (instead of the Form), then just replace all the Me.refs with your PicBox-Identifier.
Dim W: W = thisForm.ScaleX(thisForm.ScaleWidth, thisForm.ScaleMode, vbPixels)
Dim H: H = thisForm.ScaleY(thisForm.ScaleHeight, thisForm.ScaleMode, vbPixels)
' Set Me.Picture = Cairo.ImageList.AddImage("", B, W, H, True).Picture
' B = New_c.FSO.ReadByteContent(FileName)
' Set pic1.Picture = Cairo.ImageList.AddImage("", B, W, H, True).Picture
' pic1.AutoRedraw = True
' Cairo.ImageList.AddImage "myImage", B 'Load image to Bytes with no Resize
' With Cairo.CreateSurface(W, H)
' .CreateContext.RenderSurfaceContent "myImage", 0, 0, W, H, CAIRO_FILTER_BEST
' .DrawToDC pic1.hdc
' End With
' Set Me.Picture = Cairo.ImageList.AddImage("", B, W, H, True).Picture
On Error GoTo 0
Exit Sub
ResizeControls_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure ResizeControls of Form formSoftwareList"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : SaveSizes
' Author : Rod Stephens vb-helper.com
' Date : 16/04/2021
' Purpose : Resize controls to fit when a form resizes
' Save the form's and controls' dimensions.
' Credit : Rod Stephens vb-helper.com
'---------------------------------------------------------------------------------------
'
Public Sub SaveSizes(ByVal thisForm As Form, ByRef m_ControlPositions() As ControlPositionType, ByRef m_FormWid As Double, ByRef m_FormHgt As Double)
Dim I As Integer: I = 0
Dim Ctrl As Control
' Save the controls' positions and sizes.
On Error GoTo SaveSizes_Error
ReDim m_ControlPositions(1 To thisForm.Controls.Count)
I = 1
For Each Ctrl In thisForm.Controls
With m_ControlPositions(I)
If (TypeOf Ctrl Is CommandButton) Or (TypeOf Ctrl Is ListBox) Or (TypeOf Ctrl Is textBox) Or (TypeOf Ctrl Is FileListBox) Or (TypeOf Ctrl Is Label) Or (TypeOf Ctrl Is ComboBox) Or (TypeOf Ctrl Is CheckBox) Or (TypeOf Ctrl Is OptionButton) Or (TypeOf Ctrl Is Frame) Or (TypeOf Ctrl Is Image) Or (TypeOf Ctrl Is PictureBox) Or (TypeOf Ctrl Is Slider) Then
.Left = Ctrl.Left
.Top = Ctrl.Top
.Width = Ctrl.Width
.Height = Ctrl.Height
On Error Resume Next ' cater for any controls that do not have a font property that may cause an error
.FontSize = Ctrl.Font.Size
On Error GoTo 0
End If
End With
I = I + 1
Next Ctrl
' Save the form's size.
m_FormWid = thisForm.ScaleWidth
m_FormHgt = thisForm.ScaleHeight
On Error GoTo 0
Exit Sub
SaveSizes_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure SaveSizes of Form formSoftwareList"
End Sub