Newsgroup: it.comp.lang.visual-basic
Titolo: disporre controlli via codice

perchè se ho più controlli disposti orizzontalmente su un form (es. picture
box, button-bar ecc...) e cerco di disporli uno affianco all'altro via
codice non ho sempre delle sovrapposizioni o buchi ? praticamente io imposto
la dimensione del controllo a sinistra, per il secondo imposto la proprietà
left uguale alla width del primo e (ammettendo di lavorare solo con tre
controlli) la prorietà width del secondo (che è in centro quindi) uguale
alla dimensione del form meno la larghezza del controllo a sinistra meno la
larghezza del controllo di destra... ma ho sempre delle disposizioni non
precise come dovrebbero essere dati i conti. dove sbaglio ?
grazie!!!!
Marco

 left uguale alla width del primo
Più la sua left, ovviamente

 ha scritto

scalewidth/scaleheight.
qui c'e' un listview sopra e due command al 50% sotto.
ciao, j.
Private Sub Form_Resize()
    Dim sw As Integer: sw = ScaleWidth \ 2
    With cmdLoad
        .Left = 0
        .Top = ScaleHeight - .Height
        .Width = sw
    End With
    With cmdUnload
        .Left = sw
        .Top = ScaleHeight - .Height
        .Width = sw
    End With
    Dim lw As Integer: lw = LV.Width \ 8
    With LV
        .Height = ScaleHeight - cmdLoad.Height
        .Width = ScaleWidth
        .ColumnHeaders(1).Width = lw * 1
        .ColumnHeaders(2).Width = lw * 2
        .ColumnHeaders(3).Width = lw * 4.4
    End With
End Sub

 scalewidth/scaleheight.
Esatto, ma solo quando si fa riferimento all'area _interna_ del form (o di
una picture), non per gli altri controlli che servono da
riferimento/posizionamento per left e top. Per questi si usa width e height
per riferirsi alla dimensione esterna

 ha scritto nel messaggio
news:OhPA9.29813$Zn2.8...@twister1.libero.it...

prob non ho capito quello che intendi.
left e top mi danno l'angolo sup sx _rispetto allo schermo_.
marco sta parlando di normali controlli dentro il form.
per quelli che hanno l'align automatico, di solito setto larghezza o
altezza secondo il caso. gli altri mi regolo sul contenitore, di
solito un picbox.
se ho tre command e li voglio in basso a sx, centro e dx, mi regolo
solo su scalew/scaleh. se non metto resume next, faccio un controllo
sul width del form per evitare che sia minore della somma dei 3, o che
i command non si sovrappongano, e simili.
qui sotto un picbox contiene un treeview e un filebox.
left e width li uso solo per i form children che devono occupare
esattamente l'area lasciata libera dal picbox.
ciao, a.
Public Sub SetDimensions()
    'On Error GoTo errman
    With frmMain
        If .WindowState = 1 Then Exit Sub
        If .Width <= minW Then .Width = minW
        If .Height <= minH Then .Height = minH
        Dim fL As Integer, fT As Integer, fW As Integer, fH As Integer
        fW = .picFile.ScaleWidth
        fH = .ScaleHeight \ 2
        .TV.Top = 0
        .TV.Width = fW
        .TV.Height = fH
        .LV.Top = .TV.Height
        .LV.Width = fW
        .LV.Height = fH
        If bFormImage Then
            With frmImage
                .Left = 0: .Top = 0
                .Width = frmMain.ScaleWidth: .Height =
frmMain.ScaleHeight
            End With
        ElseIf bFormBack Then
            With frmBack
                .Left = 0: .Top = 0
                .Width = frmMain.ScaleWidth: .Height =
frmMain.ScaleHeight
            End With
            LoadBack
'        ElseIf bFormSetting Then
'            With frmSettings
'                .Left = 0: .Top = 0
'                .Width = frmmain.ScaleWidth: .Height =
frmmain.ScaleHeight
'            End With
        End If
        .SB.Panels(7) = "Window: " & Int(.Width / sX) & " × " &
Int(.Height / sY)
    End With
    Exit Sub
errman: MsgBox Error
End Sub

 ha scritto nel messaggio
news:ar0g3v$e5r67$1...@ID-51318.news.dfncis.de...


 Marco
in assoluto, direi al form.
in
    with command1
        .left=999
        .top=999
    end with
al command, con riferimento all'angolo sup sx del suo contenitore.
prova semplice:
apri un form normale.
metti un picbox con align=right.
metti un command. clic sul command. ^x. clic nel picbox. ^v.
prova nelle proprieta' a variare left e top del command.
se invece cambi il left del picbox non te lo lascia fare causa align.
ciao, j.

 se invece cambi il left del picbox non te lo lascia fare causa align.
ok, grazie! era come avevo in mente, tutto ok allora!
ciao,
Marco

 i command non si sovrappongano, e simili.
Mi spiego meglio (ma forse stiamo dicendo la stessa cosa): Se devo centrare
una picture (scelgo apposta questo oggetto) all'interno del suo contenitore,
supponiamo il form, facciamo pic.left=(me.scalewidth-pic.width)/2. In questo
esempio si vede bene che le misure relative al contenitore sono sempre
riferite al suo spazio interno disponibile (scale..., ovviamente se sopporta
questa proprietà come non credo sia, per esempio, per un frame), mentre le
misure relative all'oggetto sono riferite ad un punto del suo esterno, in
questo caso il left indica da dove, in senso orizzontale, inizia l'oggetto
stesso e per la sua intera larghezza esterna (width e non scalewidth che
pure la picture sopporta).
In altri termini, quando ci si deve riferire all'aria disponibile si userà
la misura interna della stessa, quando si deve posizionare un controllo ci
si riferisce sempre alla sua reale e totale dimensione.
Altro esempio: Centratura verticale di un form nel video (che non ha la
scale...): Me.top=(screen.height-me.height)/2 e NON invece
Me.top=(screen.height-me.SCALEheight)/2 che scarterebbe, errando, i bordi
sopra e sotto e la barra del titolo della finestra.

 sopra e sotto e la barra del titolo della finestra.
yes. in questo caso lo scaleheight sarebbe del video, che e' poi
quello che bisognerebbe andare a cercare con screen.realestate. seno'
uno fa i suoi bei calcoli e poi si trova l'utente che tiene la taskbar
tipo mac, o come a me a dx, che ci sta piu' roba, e zac! il form e'
tutto fuori centro :)
ciao, a.

generalmente la dimensione di un mezzo bordo) 
Perché "arrotondare? 
ScaleX(GetSystemMetrics(SYSM_CXEDGE), vbPixels, ScaleMode)
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------