RISOLUZIONE DELLO SCHERMO vb.net

venerdì 11 marzo 2005 - 15.11

nikol84 Profilo | Junior Member

Salve ragazzi!!

Il mio problema è che vorrei sapere come ridurre o ingrandire gli oggetti della mia form in base alla risoluzione della macchina. io ho una schermo con una risoluzione 120x768 quando installo i programmi su altre macchine,con risoluzioni diverse,ho problemi perchè a volte gli oggetti non sono ben visibili,utilizzo vb.net 2003

nikol84 Profilo | Junior Member

Esistono delle istruzione per ridimensionare i controlli!!per esempio "scale" ma non trovo nessuna documentazione.

alextyx Profilo | Expert

Io uso questo metodo.....funzionicchia benino, almeno con i controlli che ho usato io:

Nell'evento load della form, scrivo:

GIN.SubRidimensiona(Me)
Me.CenterToScreen()
Me.Refresh()

GIN è il nome del progetto. Il metodo pubblico è la SubRidimensiona, cui viene passato il form come parametro. Purtroppo il codice è un po' lunghetto, comunque provo a postarlo:


Public Sub SubRidimensiona(ByRef F As Form)

'If F.Visible = False Then Exit Sub
'Si ricava il rapporto fra dimensione dello schermo e dimensione della form
Dim RO As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Orizzontale)
Dim RV As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Verticale)

'Bisogna tenere conto che nel rapporto tra schermo e Form va considerato quello minore tra i due possibili (Vert. e Orizz.)
' altrimenti si rischia di portare al limite corretto l'altezza di una Form e vederne scomparire i lati oltre l'area visibile, o viceversa
Dim R As Single = RV 'Si assegna a RV, tanto per partire con uno
If RO < RV Then 'Poi si controlla se anzichè RV nn sia il caso di considerare RO
R = RO
End If

'Ora si estrae dal file dei settaggi il valore del cofficente in percentuale
Dim Coefficente As Double

'Ottiene il numero associato al nome della chiave presente nella enumerazione
Dim NumeroChiave As Integer = GIN.ChiaviDelFileDiSetup.PERCENTORIDIMENSIONAMENTOFORM

'Dal numero della chiave, se ne ottiene il nome, così come scritto nella enumerazione
Dim Chiave As String = [Enum].GetName(GetType(ChiaviDelFileDiSetup), NumeroChiave)

'Si estrae il valore e lo si assegna a coefficente
If GIN.ScriviLeggiFileDiTesto.ManeggiaValoriSetup.EstraiValoreDellaChiave(Chiave, 0) Then
Coefficente = Chiave
End If

Dim K As Double = Math.Round(Double.Parse(Coefficente / 100), 2) ' Un valore 90, ad esempio, diventa 0.9

If Not ((1 / R) > K - 0.05 And (1 / R) < K + 0.05) Then 'Se il rapporto è già accettabilmente corretto nn si tocca
'altrimenti si riduce un po' la dimensione x nn coprire del tutto lo schermo e si prosegue
R = R * K
Classi.RiDimensionaForm.SubVariaSecondoRapporto(F, R)
End If

End Sub

Ad un certo punto, viene estratto un coefficente dal mio file dei settaggi, ma tu potresti metterlo fisso, magari a 90 (=90% della dimensione dello schermo). Io nn massimizzo le mie form, ma uso espanderle fino a lasciare comunque un po' di desktop visibile intorno! Ora, come vedi, la Subridimensiona usa un metodo shared di una classe. Dato che il metodo è shared, nn serve istanziare la classe., che cerco di passarti qui sotto. Spero tu nn perda il filo, anche se mi rendo conto che, come minimo dovrai divertirti nn poco col copia-incolla! Io l'ho messa nel modilo 'Classi', ovviamente nella chiamata devi sostituire il nome del modulo o dell'eventuale namespace. Comunque, una volta buttato dentro questo codice, puoi ridimensionare qualunque form ed i controlli in essa contenuti, con quelle 3 istruzioncine nell'evento LOAD. Prossimamente penso di ricavarmi una form personalizzata con questa funzione già integrata e trasparente all'utente, insieme ad altre due o tre che ho in mente, ma x adesso nn ho il tempo necessario, ahimè! Buon lavoro :-)

Public Class RiDimensionaForm

Public Shared Function FnzRapportoTraSchermoEForm(ByRef F As Form, ByVal D As Dimensione) As Single
'Restituisce il rapporto tra risoluzione orizzontale dello schermo e
' dimensione orizzontale della Form, oppure fa lo stesso con le componenti verticali.
Dim orizz As Integer
Dim vert As Integer

alextyx Profilo | Expert

Io uso questo metodo.....funzionicchia benino, almeno con i controlli che ho usato io:

Nell'evento load della form, scrivo:

GIN.SubRidimensiona(Me)
Me.CenterToScreen()
Me.Refresh()

GIN è il nome del progetto. Il metodo pubblico è la SubRidimensiona, cui viene passato il form come parametro. Purtroppo il codice è un po' lunghetto, comunque provo a postarlo:


Public Sub SubRidimensiona(ByRef F As Form)

'If F.Visible = False Then Exit Sub
'Si ricava il rapporto fra dimensione dello schermo e dimensione della form
Dim RO As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Orizzontale)
Dim RV As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Verticale)

'Bisogna tenere conto che nel rapporto tra schermo e Form va considerato quello minore tra i due possibili (Vert. e Orizz.)
' altrimenti si rischia di portare al limite corretto l'altezza di una Form e vederne scomparire i lati oltre l'area visibile, o viceversa
Dim R As Single = RV 'Si assegna a RV, tanto per partire con uno
If RO < RV Then 'Poi si controlla se anzichè RV nn sia il caso di considerare RO
R = RO
End If

'Ora si estrae dal file dei settaggi il valore del cofficente in percentuale
Dim Coefficente As Double

'Ottiene il numero associato al nome della chiave presente nella enumerazione
Dim NumeroChiave As Integer = GIN.ChiaviDelFileDiSetup.PERCENTORIDIMENSIONAMENTOFORM

'Dal numero della chiave, se ne ottiene il nome, così come scritto nella enumerazione
Dim Chiave As String = [Enum].GetName(GetType(ChiaviDelFileDiSetup), NumeroChiave)

'Si estrae il valore e lo si assegna a coefficente
If GIN.ScriviLeggiFileDiTesto.ManeggiaValoriSetup.EstraiValoreDellaChiave(Chiave, 0) Then
Coefficente = Chiave
End If

Dim K As Double = Math.Round(Double.Parse(Coefficente / 100), 2) ' Un valore 90, ad esempio, diventa 0.9

If Not ((1 / R) > K - 0.05 And (1 / R) < K + 0.05) Then 'Se il rapporto è già accettabilmente corretto nn si tocca
'altrimenti si riduce un po' la dimensione x nn coprire del tutto lo schermo e si prosegue
R = R * K
Classi.RiDimensionaForm.SubVariaSecondoRapporto(F, R)
End If

End Sub

Ad un certo punto, viene estratto un coefficente dal mio file dei settaggi, ma tu potresti metterlo fisso, magari a 90 (=90% della dimensione dello schermo). Io nn massimizzo le mie form, ma uso espanderle fino a lasciare comunque un po' di desktop visibile intorno! Ora, come vedi, la Subridimensiona usa un metodo shared di una classe. Dato che il metodo è shared, nn serve istanziare la classe., che cerco di passarti qui sotto. Spero tu nn perda il filo, anche se mi rendo conto che, come minimo dovrai divertirti nn poco col copia-incolla! Io l'ho messa nel modilo 'Classi', ovviamente nella chiamata devi sostituire il nome del modulo o dell'eventuale namespace. Comunque, una volta buttato dentro questo codice, puoi ridimensionare qualunque form ed i controlli in essa contenuti, con quelle 3 istruzioncine nell'evento LOAD. Prossimamente penso di ricavarmi una form personalizzata con questa funzione già integrata e trasparente all'utente, insieme ad altre due o tre che ho in mente, ma x adesso nn ho il tempo necessario, ahimè! Buon lavoro :-)

Public Class RiDimensionaForm

Public Shared Function FnzRapportoTraSchermoEForm(ByRef F As Form, ByVal D As Dimensione) As Single
'Restituisce il rapporto tra risoluzione orizzontale dello schermo e
' dimensione orizzontale della Form, oppure fa lo stesso con le componenti verticali.
Dim orizz As Integer
Dim vert As Integer

alextyx Profilo | Expert

Io uso questo metodo.....funzionicchia benino, almeno con i controlli che ho usato io:

Nell'evento load della form, scrivo:

GIN.SubRidimensiona(Me)
Me.CenterToScreen()
Me.Refresh()

GIN è il nome del progetto. Il metodo pubblico è la SubRidimensiona, cui viene passato il form come parametro. Purtroppo il codice è un po' lunghetto, comunque provo a postarlo:


Public Sub SubRidimensiona(ByRef F As Form)

'If F.Visible = False Then Exit Sub
'Si ricava il rapporto fra dimensione dello schermo e dimensione della form
Dim RO As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Orizzontale)
Dim RV As Single = Classi.RiDimensionaForm.FnzRapportoTraSchermoEForm(F, Classi.RiDimensionaForm.Dimensione.Verticale)

'Bisogna tenere conto che nel rapporto tra schermo e Form va considerato quello minore tra i due possibili (Vert. e Orizz.)
' altrimenti si rischia di portare al limite corretto l'altezza di una Form e vederne scomparire i lati oltre l'area visibile, o viceversa
Dim R As Single = RV 'Si assegna a RV, tanto per partire con uno
If RO < RV Then 'Poi si controlla se anzichè RV nn sia il caso di considerare RO
R = RO
End If

'Ora si estrae dal file dei settaggi il valore del cofficente in percentuale
Dim Coefficente As Double

'Ottiene il numero associato al nome della chiave presente nella enumerazione
Dim NumeroChiave As Integer = GIN.ChiaviDelFileDiSetup.PERCENTORIDIMENSIONAMENTOFORM

'Dal numero della chiave, se ne ottiene il nome, così come scritto nella enumerazione
Dim Chiave As String = [Enum].GetName(GetType(ChiaviDelFileDiSetup), NumeroChiave)

'Si estrae il valore e lo si assegna a coefficente
If GIN.ScriviLeggiFileDiTesto.ManeggiaValoriSetup.EstraiValoreDellaChiave(Chiave, 0) Then
Coefficente = Chiave
End If

Dim K As Double = Math.Round(Double.Parse(Coefficente / 100), 2) ' Un valore 90, ad esempio, diventa 0.9

If Not ((1 / R) > K - 0.05 And (1 / R) < K + 0.05) Then 'Se il rapporto è già accettabilmente corretto nn si tocca
'altrimenti si riduce un po' la dimensione x nn coprire del tutto lo schermo e si prosegue
R = R * K
Classi.RiDimensionaForm.SubVariaSecondoRapporto(F, R)
End If

End Sub

Ad un certo punto, viene estratto un coefficente dal mio file dei settaggi, ma tu potresti metterlo fisso, magari a 90 (=90% della dimensione dello schermo). Io nn massimizzo le mie form, ma uso espanderle fino a lasciare comunque un po' di desktop visibile intorno! Ora, come vedi, la Subridimensiona usa un metodo shared di una classe. Dato che il metodo è shared, nn serve istanziare la classe., che cerco di passarti qui sotto. Spero tu nn perda il filo, anche se mi rendo conto che, come minimo dovrai divertirti nn poco col copia-incolla! Io l'ho messa nel modilo 'Classi', ovviamente nella chiamata devi sostituire il nome del modulo o dell'eventuale namespace. Comunque, una volta buttato dentro questo codice, puoi ridimensionare qualunque form ed i controlli in essa contenuti, con quelle 3 istruzioncine nell'evento LOAD. Prossimamente penso di ricavarmi una form personalizzata con questa funzione già integrata e trasparente all'utente, insieme ad altre due o tre che ho in mente, ma x adesso nn ho il tempo necessario, ahimè! Buon lavoro :-)

Public Class RiDimensionaForm

Public Shared Function FnzRapportoTraSchermoEForm(ByRef F As Form, ByVal D As Dimensione) As Single
'Restituisce il rapporto tra risoluzione orizzontale dello schermo e
' dimensione orizzontale della Form, oppure fa lo stesso con le componenti verticali.
Dim orizz As Integer
Dim vert As Integer

alextyx Profilo | Expert

Uhmmmm....ho tentato di postare una soluzione, evidentemente troppo lunga ed il servere me la rifiuta. Ho tentato di allegarla come file .txt, ma nn mi accetta la selezione del path! Se mi posti un indirizzo e-mail, ti spedisco la mia proposta, con tutto il codice!

kontimatteo Profilo | Newbie

Ciao, potresti inviare anche a me il codice del resize che utilizzi in vb.net? Ti ringrazio
Oppure comunque quello che hai postato qui è comunque tutto il codcie?

DomA Profilo | Expert

ciao alex,
io ho lo stesso problema mi potresti inviare la solozione al post. La mia mail è m.doom21@gmail.com

Domenico

cippico Profilo | Newbie

sto cercando anch'io qualcosa di simile che adegui i miei programmi. se puoi inviarmi il codice la mia e mail è capezzati@tin.it. grazie

magicofrate Profilo | Newbie

potresti postarlo anche a me. la mia mail è
alex.fratini@riscali.it

argento01 Profilo | Newbie

sto cercando anch'io qualcosa di simile se puoi inviarmi il codice la mia e mail è argento01@libero.it

Grazie

DomA Profilo | Expert

Ciao,
non hai bisogno di alcun codice devi solo agire sulle proprietà anchor e dock dei controlli.


Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.

http://www.infomidia.it

Domenico

alextyx Profilo | Expert

La soluzione di Doma, mi sembra abbastanza gettonata e credo di aver guardato qualcosa anch'io in quel senso, ma mi pareva ci fossero delle controindicazioni, tipo che in certe condizioni i controlli si sovrappongono o comunque non vengono mantenute certe proporzioni, magari sulle distanze tra i controlli. Comunque, se mi ricordo male, o se comunque quella soluzione fa al caso tuo, chiusa qui, altrimenti do un'occhiata per vedere a che punto ho lasciato quel codice, visto che è passato qualche annetto :)

DomA Profilo | Expert

Ciao alextyx ,
ci vuole un po' ma se usate anchor e dock danno risultati soddisfacenti

cmq se postassi ancora la suoluzione sarebbe interessante...




http://www.infomidia.it

Domenico

alextyx Profilo | Expert

Ciao Doma...non spingere;) Se basta la tua, non sto a riaprire vecchi progetti. Sono pigro io! :)
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5