AUTO RESIZE
[ô] ======================================================================================== [ô]
[ô] Componente: clsResize Creata: 18/11/2002 [ô]
[ô] Nome del File: clsResize.cls Autore: Massimiliano Mazzoli [ô]
[ô] [ô]
[ô] Scopo: Ridimensionare e Riposizionare tutti i controlli all[ô]interno di una form [ô]
[ô] ======================================================================================== [ô]
[ô] Commenti: la classe è stata creata prendendo spunto da altre due trovate in internet. [ô] [ô]
[ô] ======================================================================================== [ô]
Option Explicit
[ô] ======================================================================================== [ô]
[ô] Dichiarazione API. [ô]
[ô] ======================================================================================== [ô]
[ô] Questa API previene dall[ô]aggiornamento della Form in determinate situazione
Private Declare Function LockWindowUpdate Lib [Ô]user32.dll[Ô] (ByVal hwndLock As Long) As Long
[ô] ======================================================================================== [ô]
[ô] Dichiarazioni Costanti. [ô]
[ô] ======================================================================================== [ô]
Private Const ssTabOffset = -75000 [ô] Offeset per i controlli ssTab
[ô] ======================================================================================== [ô]
[ô] Dichiarazioni Tipi. [ô]
[ô] ======================================================================================== [ô]
Private Type udtControlloDati
lngLeft As Long [ô] Valore iniziale della proprietà Left del controllo
lngTop As Long [ô] Valore iniziale della proprietà Top del controllo
lngWidth As Long [ô] Valore iniziale della proprietà Width del controllo
lngHeight As Long [ô] Valore iniziale della proprietà Height del controllo
lngIndex As Long [ô] Contiene il numero progressivo del controllo all[ô]interno della form
lngLevel As Long [ô] Contiene il livello del controllo all[ô]interno di un container
lngGrigliaWidth As Integer [ô] Contiene l[ô]ampiezza della griglia qual[ô]ora lo sia
lngGrigliaTag As String [ô] Contiene il valore contenuto nel campo Tag
lngContainerWidth As Long [ô] Contiene la larghezza del container che contiene l[ô]oggetto
lngContainerHeight As Long [ô] Contiene l[ô]altezza del container che contiene l[ô]oggetto
End Type
[ô] ======================================================================================== [ô]
[ô] Dichiatazioni Enumerazioni. [ô]
[ô] ======================================================================================== [ô]
[ô] ======================================================================================== [ô]
[ô] Dichiarazioni Eventi. [ô]
[ô] ======================================================================================== [ô]
[ô] ======================================================================================== [ô]
[ô] Dichiarazioni Variabili Pubbliche. [ô]
[ô] ======================================================================================== [ô]
[ô] ======================================================================================== [ô]
[ô] Dichiarazioni Variabili Private. [ô]
[ô] ======================================================================================== [ô]
Private ctrControlli() As udtControlloDati [ô] Contiene tutti i controlli della Form
Private lngFormWidthMin As Long [ô] Contiene la larghezza minima della Form oltre il quale non si può ridimensionare
Private lngFormHeightMin As Long [ô] Contiene l[ô]altezza minima della Form oltre il quale non si può ridimensionare
[ô] ========================================================================================= [ô]
[ô] Routine: Class_Initialize Creata: 18/11/2002 [ô]
[ô] Visibilità : Private Autore: Massimiliano Mazzoli [ô]
[ô] Descrizione: Costruttore utilizzato quando viene creata un[ô]istanza della classe, [ô]
[ô] cioè un oggetto. [ô]
[ô] ========================================================================================= [ô]
Private Sub Class_Initialize()
Erase ctrControlli
lngFormHeightMin = 0
lngFormWidthMin = 0
End Sub
[ô] ======================================================================================== [ô]
[ô] Routine: Class_Terminate Creata: 18/11/2002 [ô]
[ô] Visibilità : Private Autore: Massimiliano Mazzoli [ô]
[ô] Descrizione: Distruttore usato quando un[ô]istanza di questa classe è distrutta. [ô]
[ô] ======================================================================================== [ô]
Private Sub Class_Terminate()
Erase ctrControlli
lngFormHeightMin = 0
lngFormWidthMin = 0
End Sub
[ô] ========================================================================================= [ô]
[ô] Routine: Inizializza Creata: 18/11/2002 [ô]
[ô] Visibilità : Public Autore: Massimiliano Mazzoli [ô]
[ô] Descrizione: Memorizza le dimensioni e le posizioni di tutti i controlli inseriti nella [ô]
[ô] Form. [ô]
[ô] ========================================================================================= [ô]
Public Sub Inizializza(ByRef frmForm As Form, _
Optional lngHeightMin As Long = 0, _
Optional lngWidthMin As Long = 0)
Dim lngCont01 As Long
Dim lngLeft As Long
Dim lngCont02 As Long
Dim ctrControlloTemp As udtControlloDati
Dim strTag As String
If (lngHeightMin <> 0) Then
lngFormHeightMin = lngHeightMin
End If
If (lngWidthMin <> 0) Then
lngFormWidthMin = lngWidthMin
End If
Erase ctrControlli
ReDim ctrControlli(0 To (frmForm.Controls.Count - 1))
For lngCont01 = 0 To frmForm.Controls.Count - 1
ctrControlli(lngCont01).lngIndex = lngCont01
ctrControlli(lngCont01).lngGrigliaWidth = -1
ctrControlli(lngCont01).lngGrigliaTag = [Ô][Ô]
ctrControlli(lngCont01).lngLevel = LivelloConta(frmForm.Controls(lngCont01))
ctrControlli(lngCont01).lngContainerHeight = frmForm.Controls(lngCont01).Container.Height
ctrControlli(lngCont01).lngContainerWidth = frmForm.Controls(lngCont01).Container.Width
If (TypeOf frmForm.Controls(lngCont01) Is Line) Then
ctrControlli(lngCont01).lngLeft = frmForm.Controls(lngCont01).X1
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).Y1
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).X2
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Y2
Else
On Error Resume Next
lngLeft = frmForm.Controls(lngCont01).Left
If (lngLeft < 0) Then
lngLeft = Abs(ssTabOffset - frmForm.Controls(lngCont01).Left)
End If
ctrControlli(lngCont01).lngLeft = lngLeft
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).Top
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).Width
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Height
strTag = TagEstrai(frmForm.Controls(lngCont01).Tag, [Ô]rs=[Ô])
strTag = UCase(strTag)
If (CBool(InStr(strTag, [Ô]G[Ô]))) Then
ctrControlli(lngCont01).lngGrigliaWidth = frmForm.Controls(lngCont01).Width
For lngCont02 = 0 To frmForm.Controls(lngCont01).Cols - 1
ctrControlli(lngCont01).lngGrigliaTag = ctrControlli(lngCont01).lngGrigliaTag & Format(frmForm.Controls(lngCont01).ColWidth(lngCont02), [Ô]00000[Ô])
Next lngCont02
End If
End If
Next lngCont01
If (frmForm.Controls.Count > 0) Then
For lngCont01 = 0 To (frmForm.Controls.Count - 2)
For lngCont02 = lngCont01 + 1 To (frmForm.Controls.Count - 1)
If (ctrControlli(lngCont01).lngLevel > ctrControlli(lngCont02).lngLevel) Then
ctrControlloTemp = ctrControlli(lngCont01)
ctrControlli(lngCont01) = ctrControlli(lngCont02)
ctrControlli(lngCont02) = ctrControlloTemp
End If
Next lngCont02
Next lngCont01
End If
End Sub
[ô] ========================================================================================= [ô]
[ô] Routine: Ridimensiona Creata: 23/11/2002 [ô]
[ô] Visibilità : Public Autore: Massimiliano Mazzoli [ô]
[ô] Descrizione: Ridimensiona i controlli posizionati su di una Form
Como poço resolver esse problema.
Citação:For lngCont01 = 0 To frmForm.Controls.Count - 1
[ô]\\marco
If (TypeOf frmForm.Controls(lngCont01) Is ImageList) Then GoTo NaoAltera
[ô]//marco
ctrControlli(lngCont01).lngIndex = lngCont01
ctrControlli(lngCont01).lngGrigliaWidth = -1
ctrControlli(lngCont01).lngGrigliaTag = [Ô][Ô]
ctrControlli(lngCont01).lngLevel = LivelloConta(frmForm.Controls(lngCont01))
ctrControlli(lngCont01).lngContainerHeight = frmForm.Controls(lngCont01).Container.Height
ctrControlli(lngCont01).lngContainerWidth = frmForm.Controls(lngCont01).Container.Width
If (TypeOf frmForm.Controls(lngCont01) Is Line) Then
ctrControlli(lngCont01).lngLeft = frmForm.Controls(lngCont01).x1
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).y1
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).X2
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Y2
Else
On Error Resume Next
lngLeft = frmForm.Controls(lngCont01).Left
If (lngLeft < 0) Then
lngLeft = Abs(ssTabOffset - frmForm.Controls(lngCont01).Left)
End If
ctrControlli(lngCont01).lngLeft = lngLeft
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).Top
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).Width
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Height
strTag = TagEstrai(frmForm.Controls(lngCont01).Tag, [Ô]rs=[Ô])
strTag = UCase(strTag)
If (CBool(InStr(strTag, [Ô]G[Ô]))) Then
ctrControlli(lngCont01).lngGrigliaWidth = frmForm.Controls(lngCont01).Width
For lngCont02 = 0 To frmForm.Controls(lngCont01).Cols - 1
ctrControlli(lngCont01).lngGrigliaTag = ctrControlli(lngCont01).lngGrigliaTag & Format(frmForm.Controls(lngCont01).ColWidth(lngCont02), [Ô]00000[Ô])
Next lngCont02
End If
End If
[ô]\\marco
NaoAltera:
[ô]//marco
Next lngCont01
on error goto proximo
e um label [Ô]proximo[Ô] antes do next, pois assim não há perigo de dar este erro quando você colocar outro componente (que não o imagelist) que não aceite redimensionamento...
on error goto proximo
For lngCont01 = 0 To frmForm.Controls.Count - 1
ctrControlli(lngCont01).lngIndex = lngCont01
ctrControlli(lngCont01).lngGrigliaWidth = -1
ctrControlli(lngCont01).lngGrigliaTag = [Ô][Ô]
ctrControlli(lngCont01).lngLevel = LivelloConta(frmForm.Controls(lngCont01))
ctrControlli(lngCont01).lngContainerHeight = frmForm.Controls(lngCont01).Container.Height
ctrControlli(lngCont01).lngContainerWidth = frmForm.Controls(lngCont01).Container.Width
If (TypeOf frmForm.Controls(lngCont01) Is Line) Then
ctrControlli(lngCont01).lngLeft = frmForm.Controls(lngCont01).x1
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).y1
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).X2
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Y2
Else
On Error Resume Next
lngLeft = frmForm.Controls(lngCont01).Left
If (lngLeft < 0) Then
lngLeft = Abs(ssTabOffset - frmForm.Controls(lngCont01).Left)
End If
ctrControlli(lngCont01).lngLeft = lngLeft
ctrControlli(lngCont01).lngTop = frmForm.Controls(lngCont01).Top
ctrControlli(lngCont01).lngWidth = frmForm.Controls(lngCont01).Width
ctrControlli(lngCont01).lngHeight = frmForm.Controls(lngCont01).Height
strTag = TagEstrai(frmForm.Controls(lngCont01).Tag, [Ô]rs=[Ô])
strTag = UCase(strTag)
If (CBool(InStr(strTag, [Ô]G[Ô]))) Then
ctrControlli(lngCont01).lngGrigliaWidth = frmForm.Controls(lngCont01).Width
For lngCont02 = 0 To frmForm.Controls(lngCont01).Cols - 1
ctrControlli(lngCont01).lngGrigliaTag = ctrControlli(lngCont01).lngGrigliaTag & Format(frmForm.Controls(lngCont01).ColWidth(lngCont02), [Ô]00000[Ô])
Next lngCont02
End If
End If
proximo:
Next lngCont01