Newsgroup: it.comp.lang.visual-basic
Titolo: Come centrare un oggetto

Ciao a tutti.
Dovrei centrare all'interno di un form MDI una finestra, sapete darmi
una formula per farlo automaticamente senza che devo calcolarmi a mano i
valori ?
Grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 valori ?
azz... e` cosi` complicato fare delle divisioni per 2 ? ;-)
-- 
ciao, hal

Ho provato già ma non mi viene precisa al centro


 ha scritto nel messaggio 
news:c3a8d52c83fd958eb95...@mygate.mailgate.org...



:-O!! Tu devi avere studiato al MIT, per aver trovato una soluzione cosě semplice e mirabile!!! 
--
Ciao!
Luca Menegotto

Quando ho letto il testo della richiesta ho pensato alla soluzione di
El_Modifica.
Poi ho visto che si parlava di form ed ho pensato: "banale: basta impostare
la proprietà StartUpPosition del form al valore 1=CenterOwner"
Ma vedo che avete trovato soluzioni molto più complesse: perchè questa che
ho pensato io non va bene?? :-?


Cosa vuol dire ho provato??? non puoi fare copia e incolla e farci vedere
quelle de righe di codice che hai usato così è più semplice darti una mano
senza doverci fare noi un progetto apposta per vedere se davvero non
funziona?
Comunque io ho fatto così solo per prova e viene centratissimo..
Private Sub MDIForm_DblClick()
    Form1.Show
    Form1.Left = (Me.ScaleWidth - Form1.Width) / 2
    Form1.Top = (Me.ScaleHeight - Form1.Height) / 2
End Sub
Form1 è chiaramente il MDIChild..
Ad essere sinceri è meglio usare Move ma così è più leggibile.
Questo sopra è se devi centrare un Child nel MDI, per il quale le coordinate 
vanno misurate con riferimento all'area interna del MDI.
Se devi centrare un form non MDIChild rispetto ad una MDI (ma anche rispetto 
a qualsialsi altra form fai così:
Private Sub MDIForm_DblClick()
    Form1.Show
    Form1.Left = Me.Left + (Me.Width - Form1.Width) / 2
    Form1.Top = Me.Top + (Me.Height - Form1.Height) / 2
End Sub
Attenzione che così centri fra loro i rettangoli che definiscono il contorno 
della finestra.. Se vuoi centrare La form non MDI rispetto all'area di 
lavoro MDI devi tenere conto che c'è lo spessore della barra del titolo 
della MDI che è presente solo sopra. In pratica dovresti aggiungere mezza 
barra del titolo (meno lo spessore inferiore).
A questo punto la cosa non è propriamente banale nel caso generale perchè lo 
spessore mangiato ai bordi varia se soo presenti barre di stato, toolbar e 
altre cose simili.
Nel caso queste cose siano presenti solo sopra il codice seguente funziona:
Private Sub MDIForm_DblClick()
    Dim MDITop As Single
    Dim SpessoreOrizzontale As Single, SpessoreVerticale As Single
    Dim SpessoreSuperiore As Single, SpazioLibero As Single
    Form1.Show
    Form1.Left = Me.Left + (Me.Width - Form1.Width) / 2
    MDITop = Me.Top
    SpessoreVerticale = Me.Height - Me.ScaleHeight
    SpessoreOrizzontale = Me.Width - Me.ScaleWidth
    SpessoreSuperiore = SpessoreVerticale - SpessoreOrizzontale / 2
    SpazioLibero = Me.ScaleHeight - Form1.Height
    Form1.Top = MDITop + SpessoreSuperiore + SpazioLibero / 2
End Sub
il concetto è quello di calcolare lo spessore della barra del titolo ed 
eventuali toolbar presenti sopra in questo modo:
1) dalla MDI.Height - MDI.ScaleHeight = lo spazio occupato verticalmente dai 
bordi.
2) dalla MDI.Width - MDI.ScaleWidth = lo spazio occupato orizzontalmente dai 
bordi.
3) Il bordo sotto è uguale a quello laterale quindi lo conosco..
4) La differenza fra lo spazio tot e quello sotto mi da lo spessore 
superiore.
Ovviamente se uno ha toolbar o altre cose lateralmente ne deve tenere conto 
e calcolare i relativi *.Width che vanno a far parte dello spessore occupato 
lateralmente.
Nota: attenzione all'unità di misura: Twip / pixel / stadi... :-p
Buon divettimento.. ..ma la prossima volta almeno fai in modo che non serva 
darti tre risposte distinte.. basta semplicemente un po' di precisione: la 
stessa che serve guarda caso per spiegare al programma cosa fare..
Diego 

 ha scritto nel messaggio 
news:1dxdzqcuqalnx.1...@40tude.net...

Mah.. secondo me va benissimo ma non si puo usare con i MDIChild..
E se lo fai con un form non Child te lo centra sul bordo esterno come a fare
Form1.Top=(Me.Height - Form1.Height)/2
e secondo me lui voleva fare il centraggio sull'area di lavoro, altrimenti 
non si sarebbe lamentato che non veniva proprio centrato bene.. ..il fatto è 
che doveva essere più preciso secondo me..
Ciao! 

 Nota: attenzione all'unità di misura: Twip / pixel / stadi... :-p
stadium
unita` di misura predefinita dell' in cospectu basic, usato
dai romani per programmare gli abachi :-)
FormaI.GradusNodus = vbStadium
FormaI.Latitudo = 640
FormaI.Altitudo = 480
-- 
ciao, hal