AUTO RESIZE

ALEXLUGON 01/11/2009 15:25:58
#326693
Gostaria de uma ajuda de vcs, estou usando a classe que segue e esta funcionando mas quando insiro um ImageList da erro, com faço para corrigir isso?


[ô] ======================================================================================== [ô]
[ô] 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
FISH40 01/11/2009 18:38:06
#326705
Amigo Verifique Bem Suas Variaveis,Não Sou Tão Bom Com Essas Coisas ^^
ALEXLUGON 01/11/2009 20:25:38
#326713
Deixa eu te explicar melhor, a classe esta funcionando so não funciona quando o coloco um ImageList no form, ai da erro.

Como poço resolver esse problema.

MARCOLACERA 01/11/2009 20:58:26
#326714
Caro colega o controle ImageList não aceita redimensionamento, você tem que alterar a classe para que não aplique o processo no controle ImageList!

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

HARRY.POTTER 03/11/2009 22:33:41
#326862
Ou coloque um
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
Tópico encerrado , respostas não são mais permitidas