Newsgroup: it.comp.lang.visual-basic
Titolo: modifica in scala di un form

se disegno un form ed in fase di esecuzione lo porto a grandezza
schermo tutto quello che contiene non viene ingrandito in
corrispondenza per occupare tutto lo spazio, ma rimane della stessa
grandezza creando cosi' spazi vuoti in basso ed a destra. Analogo
problema per il caso inverso: se disegno un form a grandezza schermo e
poi in fase di esecuzione lo riduco gli elementi non si riducono in
proporzione e quindi mi visualizza solo parte di quello che contiene.
Come posso fare per far si che gli elementi si
ingrandiscano/rimpiccioliscano in scala seguendo eventuali
ingrandimenti/rimpicciolimenti del form?
Partecipa alla protesta contro la Tariffa Urbana
a Tempo. Perche' la Rete sia un diritto di tutti.
http://notut.ml.org
--------------------------------------
Aranar
http://www.nettaxi.com/citizens/Aranar/
   (above all VgaPlanets)
http://www.tempolibero.com/user/aranar
    (sopratutto VgaPlanets)

In data: Tue, 05 Jan 1999 17:59:26 GMT
,da: 
ara...@nospam.usa.net
 (Aranar)
,Ricevo: modifica in scala di un form, Postato da: it.comp.lang.visual-basic
Linee:19
:}se disegno un form ed in fase di esecuzione lo porto a grandezza

prova con questo codice, non è mio, l'ho reperito su una rivista in edicola:
l'ho solo un po' adattato alle mie esigenze. Non è esente da "alcuni difetti"
(prova a massimizare il form e poi a riadattarlo premendo il realativo bottone
affianco a quello della chiusura...) comunque mi sembra un buon punto di
partenza. 
Mi scuso con tutti per la lunghezza del post... :(
------------------
'*****************************************************************************
'*                                                                           *
'* DIMOSTRAZIONE DI RIDIMENSIONAMENTO DEI CONTROLLI PRESENTI SU UN FORM.     *
'* ---------------------------------------------------------------------     *
'*                                                                           *
'* ROUTINE ORIGINALE FORNITA DA: ANDREA T. M. FROSINI                        *
'* DA: DEV. DI OTTOBRE 1998, N. 56 A PAGINA 34.                              *
'*                                                                           *
'* MODIFICATA DA: STEFANO BETTOCCHI, E-MAIL: 
STEF...@COL.IT
                 *
'* IL: 8/1/99                                                                *
'*                                                                           *
'*****************************************************************************
Option Explicit
'*** STRUTTURA PRIVATA CHE CONTIENE I DATI PRINCIPALI ***
'*** DEI CONTROLLI PRESENTI SUIL FORM.
Private Type TCoord
   Left As Double
   Top As Double
   Height As Double
   Width As Double
   FontSize As Double
End Type
Dim Mostra As Integer
Dim gCoordCtrl() As TCoord
Dim mForm_Lar As Integer
Dim mForm_Alt As Integer
Dim gForm_Lar As Double
Dim gForm_Alt As Double
'*********************************************************
'*                                                       *
'* QUESTA SUB VIENE ESEGUITA ALLA PARTENZA DEL PROGRAMMA *
'* E INIZIALIZZA LE VARIABILI NECESSARIE AL RIDIMENSIO-  *
'* NAMENTO DEL PROGRAMMA.                                *
'*                                                       *
'*********************************************************
Private Sub Form_Load()
 
'*** Prepariamo all'evento FORM_LOAD ***
   Dim old_scalemode As Integer '* Salviamo il "vecchio" FORM_SCALEMODE
   Dim j As Integer
 
   ReDim gCoordCtrl(Controls.Count) '* Ridimensioniamo la matrice con il numero
                                    '* di controlli presenti sul FORM.
 
   mForm_Lar = Form1.Width
   mForm_Alt = Form1.Height
 
   old_scalemode = Form1.ScaleMode  '* Qui salviamo il vecchio FORM_SCALEMODE
 
   Form1.ScaleMode = 3              '* SCALEMODE = VBPIXEL
 
 
'*** QUESTA PARTE SALVA I VALORI INIZIALI DEI CONTROLLI PRESENTI SUL FORM ***
   For j = 0 To Controls.Count - 1
        If TypeOf Controls(j) Is TextBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is CheckBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is Picture Then GoSub SalvaOLD
        If TypeOf Controls(j) Is Label Then GoSub SalvaOLD
        If TypeOf Controls(j) Is CommandButton Then GoSub SalvaOLD
        If TypeOf Controls(j) Is Frame Then GoSub SalvaOLD
        If TypeOf Controls(j) Is OptionButton Then GoSub SalvaOLD
        If TypeOf Controls(j) Is ComboBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is ListBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is HScrollBar Then GoSub SalvaOLD1
        If TypeOf Controls(j) Is VScrollBar Then GoSub SalvaOLD1
        If TypeOf Controls(j) Is DriveListBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is DirListBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is FileListBox Then GoSub SalvaOLD
        If TypeOf Controls(j) Is Data Then GoSub SalvaOLD
   Next
'*** SALVIAMO LA LARGHEZZA E L'ALTEZZA DEL FORM ***
   gForm_Lar = Form1.ScaleWidth
   gForm_Alt = Form1.ScaleHeight
 
   Form1.ScaleMode = old_scalemode  '* Ripristiniamo il vecchio SCALEMODE.
Exit Sub
'*** QUA SALVIAMO I VALORI DEI CONTROLLI PRESENTI SUL FORM ***
SalvaOLD:
      gCoordCtrl(j).Left = Form1.Controls(j).Left
      gCoordCtrl(j).Top = Form1.Controls(j).Top
      gCoordCtrl(j).Height = Form1.Controls(j).Height
      gCoordCtrl(j).Width = Form1.Controls(j).Width
      gCoordCtrl(j).FontSize = Form1.Controls(j).Font.Size
Return
'*** QUI INVECE PERCHE' NON TUTTI I CONTROLLI SUPPORTANO LA FONTSIZE ****
SalvaOLD1:
      gCoordCtrl(j).Left = Form1.Controls(j).Left
      gCoordCtrl(j).Top = Form1.Controls(j).Top
      gCoordCtrl(j).Height = Form1.Controls(j).Height
      gCoordCtrl(j).Width = Form1.Controls(j).Width
Return
End Sub
'****************************************************
'*                                                  *
'* QUESTA SUB è L'EVENTO RESIZE CHE VIENE SCATENATO *
'* OGNI VOLTA CHE VIENE RIDIMENSIONATA LA FINESTRA. *
'*                                                  *
'****************************************************
Private Sub Form_Resize()
 
'*** SE LA FINESTRA VIENE RIDOTTA A ICONA ALLORA USCIAMO SENZA CALCOLARE NULLA
***
   If Form1.WindowState = vbMinimized Then Exit Sub
 
'*** SE LE DIMENSIONI VERTICALI SONO MINORI DI QUELLE SALVATE ALL'INIZIO...
   If Form1.Height <= mForm_Alt Then
        Form1.Height = mForm_Alt
   End If
'*** SE LE DIMENSIONI ORIZZONTALI SONO MINORI DI QUELLE SALVATE ALL'INIZIO...
   If Form1.Width <= mForm_Lar Then
        Form1.Width = mForm_Lar
   End If
 
'*** QUI PREPARIAMO TUTTO PER CALCOLARE LE NUOVE DIMENSIONI ***
   Dim new_Form_Alt As Double
   Dim new_Form_Lar As Double
   Dim ratio_x As Double
   Dim ratio_y As Double
   Dim j As Integer
   Dim old_scalemode As Integer
 
'*** MOSTRA = 0, SIGNIFICA CHE NASCONDE I CONTROLLI SULLO SCHERMO ****
   Mostra = 0
 
'*** CICLA SU TUTTI I CONTROLLI CHE TROVA SUL FORM ***
   For j = 0 To Controls.Count - 1
 
        If TypeOf Controls(j) Is TextBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is CheckBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is Picture Then GoSub MostraControllo
        If TypeOf Controls(j) Is Label Then GoSub MostraControllo
        If TypeOf Controls(j) Is CommandButton Then GoSub MostraControllo
        If TypeOf Controls(j) Is Frame Then GoSub MostraControllo
        If TypeOf Controls(j) Is OptionButton Then GoSub MostraControllo
        If TypeOf Controls(j) Is ComboBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is ListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is HScrollBar Then GoSub MostraControllo
        If TypeOf Controls(j) Is VScrollBar Then GoSub MostraControllo
        If TypeOf Controls(j) Is DriveListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is DirListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is FileListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is Data Then GoSub MostraControllo
   Next
 
'*** CALCOLA L'INDICE D'INGRANDIMENTO (RATIO_X/Y) CALCOLANDO ***
'*** IN BASE AI PIXEL.
 
   old_scalemode = Form1.ScaleMode
   Form1.ScaleMode = 3
 
   new_Form_Lar = Form1.ScaleWidth
   new_Form_Alt = Form1.ScaleHeight
 
   ratio_x = new_Form_Lar / gForm_Lar
   ratio_y = new_Form_Alt / gForm_Alt
 
'*** CICLA SU TUTTI I CONTROLLI CHE TROVA SUL FORM ***
'*** PER CALCOLARNE LE NUOVE DIMENSIONI IN BASE A
'*** RATIO_X/Y.
   For j = 0 To Controls.Count - 1
        If TypeOf Controls(j) Is TextBox Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is CheckBox Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is Picture Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is Label Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is CommandButton Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is Frame Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is OptionButton Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is ComboBox Then GoSub CalcolaSize
        If TypeOf Controls(j) Is ListBox Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is HScrollBar Then GoSub CalcolaSize1
        If TypeOf Controls(j) Is VScrollBar Then GoSub CalcolaSize1
        If TypeOf Controls(j) Is DriveListBox Then GoSub CalcolaSize
        If TypeOf Controls(j) Is DirListBox Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is FileListBox Then GoSub CalcolaNewSize
        If TypeOf Controls(j) Is Data Then GoSub CalcolaNewSize
 
   Next
 
   gForm_Lar = Form1.ScaleWidth
   gForm_Alt = Form1.ScaleHeight
   Form1.ScaleMode = old_scalemode
 
'*** MOSTRA = 1, SIGNIFICA CHE MOSTRA I CONTROLLI SULLO SCHERMO ****
 
   Mostra = 1
 
'*** CICLA SU TUTTI I CONTROLLI CHE TROVA SUL FORM ***
   For j = 0 To Controls.Count - 1
        If TypeOf Controls(j) Is TextBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is CheckBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is Picture Then GoSub MostraControllo
        If TypeOf Controls(j) Is Label Then GoSub MostraControllo
        If TypeOf Controls(j) Is CommandButton Then GoSub MostraControllo
        If TypeOf Controls(j) Is Frame Then GoSub MostraControllo
        If TypeOf Controls(j) Is OptionButton Then GoSub MostraControllo
        If TypeOf Controls(j) Is ComboBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is ListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is HScrollBar Then GoSub MostraControllo
        If TypeOf Controls(j) Is VScrollBar Then GoSub MostraControllo
        If TypeOf Controls(j) Is DriveListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is DirListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is FileListBox Then GoSub MostraControllo
        If TypeOf Controls(j) Is Data Then GoSub MostraControllo
 
   Next
Exit Sub
'*** QUESTA SUB MOSTRA O NASCONDE I CONTROLLI PRESENTI SUL FORM ***
MostraControllo:
        If Mostra = 1 Then Form1.Controls(j).Visible = True
        If Mostra = 0 Then Form1.Controls(j).Visible = False
Return
'*** QUESTA SUB CALCOLA LE NUOVE DIMENSIONI DEI CONTROLLI ****
CalcolaNewSize:
      gCoordCtrl(j).Left = CDbl(gCoordCtrl(j).Left) * ratio_x
      gCoordCtrl(j).Top = gCoordCtrl(j).Top * ratio_y
      gCoordCtrl(j).Height = gCoordCtrl(j).Height * ratio_y
      gCoordCtrl(j).Width = gCoordCtrl(j).Width * ratio_x
      Form1.Controls(j).Left = gCoordCtrl(j).Left
      Form1.Controls(j).Top = gCoordCtrl(j).Top
      Form1.Controls(j).Height = gCoordCtrl(j).Height
      Form1.Controls(j).Width = gCoordCtrl(j).Width
      Form1.Controls(j).FontSize = gCoordCtrl(j).FontSize * ratio_x
Return
'*** QUESTA SUB CALCOLA LE NUOVE DIMENSIONI DEI CONTROLLI ****
'*** ALCUNI NON SUPPORTANO HEIGHT & WIDTH, QUINDI...
CalcolaSize:
      gCoordCtrl(j).Left = CDbl(gCoordCtrl(j).Left) * ratio_x
      gCoordCtrl(j).Top = gCoordCtrl(j).Top * ratio_y
      gCoordCtrl(j).Height = gCoordCtrl(j).Height * ratio_y
      gCoordCtrl(j).Width = gCoordCtrl(j).Width * ratio_x
      Form1.Controls(j).Left = gCoordCtrl(j).Left
      Form1.Controls(j).Top = gCoordCtrl(j).Top
      Form1.Controls(j).FontSize = gCoordCtrl(j).FontSize * ratio_x
Return
'*** QUESTA SUB CALCOLA LE NUOVE DIMENSIONI DEI CONTROLLI ****
'*** ALTRI INVECE NON SUPPORTANO LA FONTSIZE...
CalcolaSize1:
      gCoordCtrl(j).Left = CDbl(gCoordCtrl(j).Left) * ratio_x
      gCoordCtrl(j).Top = gCoordCtrl(j).Top * ratio_y
      gCoordCtrl(j).Height = gCoordCtrl(j).Height * ratio_y
      gCoordCtrl(j).Width = gCoordCtrl(j).Width * ratio_x
      Form1.Controls(j).Left = gCoordCtrl(j).Left
      Form1.Controls(j).Top = gCoordCtrl(j).Top
Return
End Sub
-----------------------
adesso, crea un form e posiziona sopra i controlli che preferisci: Label,
Textbox, Combo.... e poi lancia il programma.
Un saluto...
--------------------------- 
 Stefano Bettocchi          
 e-mail to: 
stef...@col.it
 
---------------------------