Dimensione Form

domenica 14 giugno 2009 - 22.51

anallie0 Profilo | Newbie

Ciao a tutti
Ho un dubbio:
se realizzo un form per un pocket con risoluzione 240x320 questo ha una dimensione di 240x 268, se lo stesso form lo carico su un dispositivo con risoluzione superiore, questo mantiene le stesse dimensioni o si adatta allo schermo.
grazie
Angelo A.

freeteo Profilo | Guru

Ciao,
le dimensioni sono in pixel quindi di fatto sono fisse.
Potrebbe essere il dispositivo a fare qualcosa di adattamento o similari, ma non credo che avvenga...piuttosto se imposti la maschera come maximized allora in quel caso ovviamente windows lo adatta alle dimensioni, e mettendo i controlli "ancorati" (proprietà Anchor) si ridimensionerebbero.

Un comportamento grafico non a pixel, ma a "punti" quindi di fatto vettoriale, ce l'hai con WPF ma non credo sia la tua situazione...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

anallie0 Profilo | Newbie

ti ringrazio della risposta, vedo se riesco a farmi prestare un palmare con risoluzione diversa dal mio che uso per testare le applicazioni. Questo perchè vorrei scrivere un algoritmo per adattare in automatico le mie applicazioni a tutte le risoluzioni sfruttando le dimensioni del form.
Angelo A.

freeteo Profilo | Guru

Ciao,
la cosa più comoda, già inclusa nel framework, è sicuramente lavorare con le proprietà "Anchor" dei controlli, in modo da far un adattamento "intelligente" della form al relativo resize.

Altrimenti puoi pensare di farlo da codice ma è cmq qualcosa di laborioso e non so quanto ti convenga, dato che cmq qualcosa ha senso che venga ingrandito ed altro no, ad esempio i bottoni che a mio avviso non ha mai senso ridimensionarli al risize della form, piuttosto lasciare la parte centrale, liste, griglie o altro che ha senso "cresca con lo schermo" ...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

anallie0 Profilo | Newbie

ciao
è vero però con l'ancor i punti rimangono fissi, perciò se ho un contollo al centro tipo (40;20) questi resteranno = anche ad altre risoluzioni e se ancoro l'oggetto a 3 punti questo si deforma, e non sempre è gradito. Con un algoritmo che mi determina il rapporto tra la mia form e una ipotetica di grandezza diversa, potrei con una sola istruzione mantenere in centro il mio oggetto. Tanto bisogna quasi sempre gestire il resize per colpa della rotazione dello schermo perciò dire System.Drawing.Point(19, 13) o System.Drawing.Point(19*x, 13*x) non mi cambia la vita.Sinceramente ritengo una rottura il fatto di gestire sempre sta cavolo di rotazione e non ne ho mai trovato sti gran benefici Mah!. Ne approfitto per chiederti se esistono in VB istruzioni che bloccano la rotazione, e tutto sarebbe + semplice a livello di disegno del form.
grazie
Angelo A.

anallie0 Profilo | Newbie

OK funziona, in effetti il form si adatta alla risoluzione dello schermo. Ho fatto la prova utilizzando il rapporto tra le due risoluzioni (reale/progetto) e applicandolo alle coordinate degli oggetti, questi mantengono le posizioni originali impostate. Unica cosa è che le immagini devono avere la proprietà ImageLayout.Stretch in modo che si adattano alla risoluzione e devono essere della dimensione esatta della PictureBox.
Angelo A.

freeteo Profilo | Guru

Ciao,
come hai risolto allora, Anchor o hai fatto lo scale tu a mano delle dimensioni?
Parlavi di "rotazione", qualcosa simile all'IPhone che gira tra portrait-landscape? in questo caso è il dispositivo che fa questa "rotazione" quindi credo sia qualcosa di relativo a lui, più che da codice...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

anallie0 Profilo | Newbie

Ciao
Si ho fatto tutto da codice, utilizzando il rapporto calcolato tra il form reale e quello utilizzato durante la progettazione. Praticamente leggo i valori delle dimensioni del form( che viene automaticamente adattato dal sistema), lo divido per la dimensione che ho utilizzato nel progetto e il risultato lo uso per scalare le coordinate degli oggetti.Praticamente dovrebbe funzionare per tutte le risoluzioni a patto che siano superiori o = a quella di progettazione.


Private Sub Form6_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize

'lbv larghezza base verticale, abv altezza base verticale, abo idem orrizzontale,lx larghezza anonima

Dim lbv, abv, lx, ax, lbo, abo As Integer



'imposta nelle variabili larghezza e altezza corrente del form

lx = Me.Width
ax = Me.Height

'stabilisce il rapporto tra form reale e quello progettato che è di risoluzione 240x320
'le misure sono riferite al form e non allo schermo


lbv = lx / 240
abv = ax / 268
lbo = lx / 320
abo = ax / 188


If Screen.PrimaryScreen.Bounds.Height > Screen.PrimaryScreen.Bounds.Width Then

' Orientamento verticale
Me.PictureBox1.Location = New System.Drawing.Point(62 * lbv, 25 * abv)
ecc.

Else

' Orientamento orizzontale
Me.PictureBox1.Location = New System.Drawing.Point(19 * lbo, 13 * abo)
ecc.

End If

End Sub


Angelo A.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5