Newsgroup: it.comp.lang.visual-basic
Titolo: Resize controlli non funziona





Ho scritto questa piccola routine per cercare di 
ridimensionare i controlli con con il ridimensionamento del form, ma se 
rimpicciolisco troppo il form ,una volta riallargato sballa le posizioni. Come 
mai?


Ho sbagliato qualcosa io?


Grazie sin da ora del vostro aiuto


 


Private lar_form As 
Single
Private alt_form As Single


 


Private Sub Form_Load()
lar_form = 
Me.ScaleWidth
alt_form = Me.ScaleHeight
End Sub


 


Private Sub Form_Resize()


Dim ctl As Control
Dim ratiox As Double
Dim 
ratioy As Double


ratiox = Me.ScaleWidth / lar_form
ratioy = 
Me.ScaleHeight / alt_form


On Error Resume Next


For Each ctl In Me.Controls
ctl.Top = ctl.Top * 
ratioy
ctl.Left = ctl.Left * ratiox
ctl.Width = ctl.Width * 
ratiox
ctl.Height = ctl.Height * ratioy
Next


lar_form = Me.ScaleWidth
alt_form = 
Me.ScaleHeight


End Sub



 wrote in message
news:OE33goFT3kMUV...@hotmail.com...
Ho scritto questa piccola routine per cercare di ridimensionare i controlli
con con il ridimensionamento del form, ma se rimpicciolisco troppo il form
,una volta riallargato sballa le posizioni. Come mai?
...(omissis)...





Grazie hal, non avevo pensato a memorizzare prima 
la posizione relativa iniziale dei controlli.


il mio codice dava problemi perchè  la width e 
la height dei controlli non possono scendere sotto determinati valori quindi 
rimpicciolendo troppo per esempio la resize li avrebbe dovuti settare per 
esempio a 40 twips di altezza ma loro non potendo andare sotto una determinata 
altezza (a seconda del font) rimanevano per esempio alti 200 twips.


Ma quando andavo a riaumentare l'altezza del form 
questi potevano riaumentare, ma non partivavo da 40 twips bensì da 200 e questo 
faceva sballare tutto.


Se tuuti i controlli avessero potuto raggiungere lo 
0 sia n altezza che in larghezza penso che la mia routine avrebbe funzionato! 
Comunque grazie ancora.



 Una soluzione alla veloce potrebbe essere questa:
(questo si' che e' partecipare... il mio era solo inoltrare :)
grazie per il codice.
come fa a ridimensionare anche un cbo, che normalmente ha altezza in sola
lettura (secondo il font usato) ?


Ed anche la listbox, di conseguenza.
La solita soluzione ultrarapida potrebbe lavorare quindi anche sulla
proprieta' Size del Font del controllo:
'''''''''''''''''''''''''''''''''
Option Explicit
Private lar_form As Single
Private alt_form As Single
Private nLastControl As Long
Private Type tagCtlInfo
  Left As Single
  Top As Single
  Width As Single
  Height As Single
  FontSize As Single
End Type
Private rc() As tagCtlInfo
'/////////////////////////////////////////
Private Sub Form_Load()
  StoreRates
End Sub
Private Sub Form_Resize()
  ResizeControls
End Sub
Private Sub Form_Unload(Cancel As Integer)
  Erase rc()
End Sub
Private Sub StoreRates()
  Dim conta As Long
  lar_form = Me.ScaleWidth
  alt_form = Me.ScaleHeight
  On Local Error Resume Next
  nLastControl = Controls.Count - 1
  ReDim rc(0 To nLastControl)
  For conta = 0 To nLastControl
    With Controls(conta)
      rc(conta).Top = .Top / alt_form
      rc(conta).Left = .Left / lar_form
      rc(conta).Width = .Width / lar_form
      rc(conta).Height = .Height / alt_form
      rc(conta).FontSize = .Font.Size / alt_form
    End With
  Next conta
End Sub
Private Sub ResizeControls()
  lar_form = Me.ScaleWidth
  alt_form = Me.ScaleHeight
  Dim ctl As Control
  Dim conta As Long
  On Local Error Resume Next
  For conta = 0 To nLastControl
    Set ctl = Controls(conta)
    ctl.Top = rc(conta).Top * alt_form
    ctl.Left = rc(conta).Left * lar_form
    ctl.Width = rc(conta).Width * lar_form
    ctl.Height = rc(conta).Height * alt_form
    ctl.Font.Size = rc(conta).FontSize * alt_form
  Next
End Sub
'''''''''''''''''''''''''
L' On Error Resume Next e' ovviamente necessario per i casi di assenza di
proprieta', tentativi di scrittura di proprieta' in sola lettura, ecc.
Del resto, considererei questo discorso da un punto di vista puramente
astratto. Diffilmente impiegherei un codice cosi' per il resize dei
controlli di molti form. Di solito preferisco gestire il resize caso per
caso.
Ciao
Aldo

 caso.
giustissimo. pero' in certi casi (form semplici, o quando si deve andare di
fretta) il tuo codice puo' fare tanto comodo. mi sembra che ne avesse
postato uno anche, non vorrei sbagliare, alessandro. se lo ripesco provo
anche quello. intanto ringrazio anche lui.