Fryderyk,
ho modificato la Sub di cui trattasi, prendendo lo spunto dall'articolo che ti ho segnalato della Microsoft; il codice può essere migliorato anche se sembra funzionare:
codice:
Sub Riproporziona()
On Error Resume Next
Dim picTemp As VB.PictureBox
'Variabile per le PictureBox:
Dim c As Control
'Variabile per le Line:
Dim c2 As Control
Dim btRid As Byte
If (sngHAtt And sngLAtt) <> (sngH And sngL) Then
Dim ii As Integer
For ii = 0 To Form1.Controls.Count - 1
'Se alcuni controlli sono invisibili non si deve fare nulla:
If TypeOf Form1.Controls(ii) Is Timer Or TypeOf Form1.Controls(ii) Is ImageList Then
'non fa nulla
ElseIf TypeOf Form1.Controls(ii) Is CommonDialog Then
'non fa nulla
' Qualora il controllo sia il ComboBox riduce la dimensione della Font:
ElseIf TypeOf Form1.Controls(ii) Is ComboBox Then
Form1.Controls(ii).FontSize = Form1.Controls(ii).FontSize * ((0.5 * dblRapL) + (0.5 * dblRapH))
Form1.Controls(ii).Move _
ArrayProportion(ii).LeftProportions * Form1.ScaleWidth * dblRapL, _
ArrayProportion(ii).TopProportions * Form1.ScaleHeight * dblRapH, _
ArrayProportion(ii).WidthProportions * Form1.ScaleWidth * dblRapL
Else
'i controlli vengoni ridimensionati e spostati:
Form1.Controls(ii).Move _
ArrayProportion(ii).LeftProportions * Form1.ScaleWidth * dblRapL, _
ArrayProportion(ii).TopProportions * Form1.ScaleHeight * dblRapH, _
ArrayProportion(ii).WidthProportions * Form1.ScaleWidth * dblRapL, _
ArrayProportion(ii).HeightProportions * Form1.ScaleHeight * dblRapH
End If
'Riproporziona le linee:
For Each c2 In Form1.Controls
If TypeOf c2 Is Line And btRid = 0 Then
c2.X1 = c2.X1 * dblRapL
c2.Y1 = c2.Y1 * dblRapH
c2.X2 = c2.X2 * dblRapL
c2.Y2 = c2.Y2 * dblRapH
btRid = 1
End If
Next
Next ii
'Adatta l'immagine al nuovo controllo PictureBox:
For Each c In Form1.Controls
'Controlla che si tratti di una PictureBox e che la ris. larghezza
'del controllo sia diversa da quella di sviluppo:
If TypeOf c Is PictureBox And btLoad = 0 Then
'PictureBox temporanea:
Set picTemp = Form1.Controls.Add("VB.PictureBox", "picTemp")
'La PictureBox temporanea assume le dimensioni del controllo:
picTemp.Width = c.Width
picTemp.Height = c.Height
picTemp.AutoRedraw = True
picTemp.AutoSize = False
'Disegna l'immagine sulla PictureBox Temporanea
'tenuto conto delle nuove dimensioni del controllo PictureBox:
picTemp.PaintPicture c.Picture, 0, 0, (picTemp.Width), (picTemp.Height)
'Carica l'immagine grafica nella PictureBox:
c.Picture = LoadPicture()
c.Picture = picTemp.Image
'Rimuove l'immagine temporanea:
Form1.Controls.Remove picTemp
btLoad = 1
End If
Next
'Rapporta la dimensione Altezza della Frm considerata:
'l'altezza della barra superiore del Titolo,la barra dei menu e la TollBar:
Form1.Height = ((Form1.Height - Hs) * dblRapH) + Hs
Form1.Width = Form1.Width * dblRapL
End If
End Sub
Spero che ti sia d'aiuto.