Italian Strumento per il calcolo veloce di SetLayout.

ivanomonti

Expert
Licensed User
Longtime User
Tu fai riferimento al panel, ma il parent del panel chi è ?
Secondo me dovresti ridimensionare prima il contenitore padre, poi i figli del padre e di conseguenza i figli del panel.

Ciao

Come posso, come devo, dove... La funzione, dove viene passato il pannello in questione ( con object parentati)

B4X:
settingLayout(Panel1)

funzione

B4X:
Sub settingLayout(pn As Panel)

Dim xleft, xtop, xwidth, xheight, lwidth, lheigh, ldip, lmar

lmar = 0 ' margini dx e sx
lwidth = 480-lmar ' larghezza display
lheigh = 800-lmar ' altezza display
ldip = 160 ' risoluzione display

For i = 0 To pn.NumberOfViews-1
   ' calculate
   xleft = pn.GetView(i).Left * lwidth / pn.Width
   xtop = pn.GetView(i).Top * lheigh / pn.Height
   xwidth = pn.GetView(i).Width * lwidth / pn.Width
   xheight = pn.GetView(i).Height * lheigh / pn.Height
   ' setting object
   pn.GetView(i).SetLayout(xleft,xtop,xwidth,xheight)
Next

End Sub

Ho fatto delle prove dove modificando i valori width e height del dispositivo 800x480 la grafica comincia ad addattarsi, mi vengono mangiati gli spazi laterali, ora per completare avrei bisogno di recuparare le dimensioni del diplay corrente o attivo come si recuparano queste info, mi piacere perfezionare il codice con un aiuto da parte vostra.
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User

no non ho dato ancora visione al topic, ma il seguente cocide sembra andare bene, unica cosa che il design di da una form 320x480 che non rispecchia, vale a dire che se creo un pannello 320x480 risulta + grande dell'area di lavoro, se adatto il pannello all'area nel display viene tagliato il pannello non facendo vedere gli object associati.

ecco la versione corretta della funzione che sembra andare alla perfezione

Sub settingLayout(pn As Panel)

B4X:
Dim xleft, xtop, xwidth, xheight, lwidth, lheigh, ldip, lmar

lmar = 0 ' margini dx e sx  // possibile eliminarlo in quanto e sempre a 0
lwidth = Activity.Width-lmar ' larghezza display
lheigh = Activity.Height-lmar ' altezza display
ldip = 160 ' risoluzione display // possibile eliminarlo in quanto non lo uso

For i = 0 To pn.NumberOfViews-1
   ' calculate
   xleft = pn.GetView(i).Left * lwidth / pn.Width
   xtop = pn.GetView(i).Top * lheigh / pn.Height
   xwidth = pn.GetView(i).Width * lwidth / pn.Width
   xheight = pn.GetView(i).Height * lheigh / pn.Height
   ' setting object
   pn.GetView(i).SetLayout(xleft,xtop,xwidth,xheight)
Next

End Sub

Provatelo se ne avete il tempo, perchè io ho solo un galsxy sII, grazie a tutti.
 
Top