Newsgroup: it.comp.lang.visual-basic
Titolo: Adattamento dei form alla risoluzione dello schermo

Salve a tutti.
Da pivello doc ho sviluppato la mia applicazione sul mio pc utilizzando una
risoluzione 1024x768, convinto che le cose sarebbero andate bene anche con
le altre tipo 800x600... invece oggi ho fatto la prova e mi sono accorto che
non č affatto cosě.
Solo il form mantiene le sue dimensioni mentre invece i controlli risultano
piů grandi nella 800x600 e di conseguenza alcuni rimangono nascosti.
Come fare per ovviare a quest'inconveniente?
Vi ringrazio tutti anticipatamente e buon lavoro!

Devi farti un mazzo enorme ... ti devi scivere una funzione che all'avvio 
controlla le dimensioni dello schermo in pixel(mi raccomando altrimenti
muori) e ridimensiona i controlli.
Se non ti č chiaro o ti manca qualche elemento chiedi pure.
Non consoco altro metodo.
Ciao
Paolo C. ha scritto:

-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

beh, si...
ho utilizzato la classe sul sito comune per il ridimensionamento dei
controlli nei form...
ora mi serve solo la funzione che mi controlli e mi ridimensioni il form,
cosicchè i controlli si ridimensionino da soli grazie a quella classe....
però il problema rimangono i font che ovviamente non vengono ridimensionati
insieme al controllo...
cavolo mica è così semplice

ok... ci ho sbattuto la testa ma non sono arrivato alla soluzione... erciň
mi rivolgo nuovamente a voi... illuminatemi :-)
come mi accorgo da codice che il form sfora le dimensioni dello schermo? ok,
questo lo so, con l'oggetto screen, ma l'importante č come faccio per
impostare le dimensioni che esso avrebbe avuto, in proporzione, con una
risoluzione diversa?
grazie mille mila a tutti :.)

 grazie mille mila a tutti :.)
io di solito vado in proporzione:
Private Sub Form_Load()
    With Screen
        Width = .Width * 0.85: Height = .Height * 0.85
        Move (.Width - Width) / 2, (.Height - Height) / 3
    End With
se usi la classe che dicevi, imposta dei select case o simili
    case is 800
    case is 1024
seno' usa l'ocx che trovi a
http://business.vsnl.com/rationalbrains/index.html
ciao, j.

 ciao, j.



Testa le dimensioni dello schermo ...
puoi usare le proprieta di Width e Height unitamente a TwipsPerPixelX e
TwipsPerPixelY
Calcolati con una semplice equazione il fattore di proporzione ...
In una sub o fuction che chiamerai al load del form ...
genera un Loop che testa la tipologia dei controlli presenti sul form
For Each Controllo in Form1.Controls
    '...
    'Resize dei Controlli usando il fattore di proporzione precedentemente
calcolato
    'Puoi testare anche la tipologia del controllo sul tuo form
    ' e quindi decidere di trattarli in maniera differente usando una
semplice SELECT
    'Per esempio potresti decidere di Cambiare le impostazioni del Font dei
tuoi controlli
    ', ma dovresti essere sicuro che il controllo a cui stai cercando di
cambiare tale proprietà
    ',possegga effettivamente tale proprietà...
    '...
Next
....
Prova a vedere se c'è qualcosa quì che ti può servire ...
{
... questo è un esperimento di un controllino che avevo in mente di
realizzare qualche anno fa (e si vede perchè il codice fa schifo) ...
... posizionato su un form riempie una TreeView con tutti i controlli
presenti nel form ...
... per ognuno ne memorizza Posizione e Dimensioni ...
... Selezionando le CheckBox della TreeView relative ai Controlli o anche
singole Proprietà dei Controlli ...
... puoi decidere se esse saranno affette da un eventuale Resize del Form
}
... No pretendo di fornirti una soluzione definitiva .... ma magari puoi
prendere spunto  o anche solo farti venire un'idea ...
Ciao, Ettore.
'Dichiarazioni Modulo
Public Type TYP_PROP
    VALUE As Long
    STATUS As Boolean
End Type
Public Type TYP_CTRL
    NAME As String
    TOP As TYP_PROP
    LEFT As TYP_PROP
    WIDTH As TYP_PROP
    HEIGHT As TYP_PROP
End Type
Public CONTROLLI(0 To 5000) As TYP_CTRL, NCONTROLS As Long
----------------------------------------------------------------------------
--------
'Codice UserControl
Const WV = 4500
Const WNV = 1100
Const HV = 4000
Const HNV = 225
Enum ENM_STATUS
    [NON VISIBILE]
    [VISIBILE]
End Enum
Type TYP_DRAGWINDOW
    STATUS As Boolean
    X As Long
    Y As Long
End Type
Dim DUC As TYP_DRAGWINDOW
Dim STATUS As ENM_STATUS
Dim UC As Control
Private Sub fraControlResizer_DblClick()
    If STATUS = [NON VISIBILE] Then
        STATUS = VISIBILE
        CONFIGURE
    Else
        STATUS = [NON VISIBILE]
    End If
    USERCONTROLResize STATUS
End Sub
Private Sub cmdAction_Click(Index As Integer)
    Dim N As Node
    USERCONTROLResize [NON VISIBILE]
    If Index = 1 Then
    Else
        For Each N In tvwCONTROLS.Nodes
            If InStr(N.Key, ".") <> 0 Then
                For I = 1 To NCONTROLS
                    OGGETTO = LEFT(N.Key, InStr(N.Key, ".") - 1)
                    PROPRIETA = Mid(N.Key, InStr(N.Key, ".") + 1)
                    If CONTROLLI(I).NAME = OGGETTO Then
                        Select Case PROPRIETA
                        Case "TOP"
                            CONTROLLI(I).TOP.STATUS = N.Checked
                        Case "LEFT"
                            CONTROLLI(I).LEFT.STATUS = N.Checked
                        Case "WIDTH"
                            CONTROLLI(I).WIDTH.STATUS = N.Checked
                        Case "HEIGHT"
                            CONTROLLI(I).HEIGHT.STATUS = N.Checked
                        End Select
                    End If
                Next I
            End If
        Next
        CONTROLLI(0).NAME = Parent.NAME
        CONTROLLI(0).TOP.VALUE = Parent.TOP
        CONTROLLI(0).LEFT.VALUE = Parent.LEFT
        CONTROLLI(0).HEIGHT.VALUE = Parent.HEIGHT
        CONTROLLI(0).WIDTH.VALUE = Parent.WIDTH
    End If
End Sub
Private Sub fraControlResizer_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
    Dim C As Control
    For Each C In Parent.Controls
        If TypeOf C Is ControlResizer Then
            Set UC = C
        End If
    Next
    DUC.STATUS = True
    DUC.X = X
    DUC.Y = Y
End Sub
Private Sub fraControlResizer_MouseMove(Button As Integer, Shift As Integer,
X As Single, Y As Single)
    If DUC.STATUS = True Then
        UC.LEFT = UC.LEFT + (X - DUC.X)
        UC.TOP = UC.TOP + (Y - DUC.Y)
    End If
End Sub
Private Sub fraControlResizer_MouseUp(Button As Integer, Shift As Integer, X
As Single, Y As Single)
    DUC.STATUS = False
End Sub
Private Sub tvwCONTROLS_NodeCheck(ByVal Node As MSComctlLib.Node)
    On Error Resume Next
    If InStr(Node.Key, ".") = 0 Then
        If tvwCONTROLS.Nodes.Item(Node.Key).Checked = True Then
            For I = 1 To 4
                CH = Choose(I, ".TOP", ".LEFT", ".WIDTH", ".HEIGHT")
                tvwCONTROLS.Nodes(Node.Key & CH).Checked = True
                fraControlResizer.Caption = "CONTROLLO: " & Node.Key
            Next I
        Else
            For I = 1 To 4
                CH = Choose(I, ".TOP", ".LEFT", ".WIDTH", ".HEIGHT")
                tvwCONTROLS.Nodes(Node.Key & CH).Checked = False
                fraControlResizer.Caption = "CONTROLLO: " & Node.Key
            Next I
        End If
    Else
    End If
    On Error GoTo 0
End Sub
Private Sub UserControl_Show()
    USERCONTROLResize [NON VISIBILE]
End Sub
Sub USERCONTROLResize(ST As ENM_STATUS)
    If ST = [NON VISIBILE] Then
        fraControlResizer.WIDTH = WNV
        fraControlResizer.HEIGHT = HNV
    Else
        fraControlResizer.WIDTH = WV
        fraControlResizer.HEIGHT = HV
    End If
    UserControl.WIDTH = fraControlResizer.WIDTH
    UserControl.HEIGHT = fraControlResizer.HEIGHT
End Sub
Sub CONFIGURE()
    Dim C As Control
    Dim CONTROLNAME As String
    For Each C In Parent.Controls
        If TypeOf C Is ControlResizer Then
            Set UC = C
        Else
            NCONTROLS = NCONTROLS + 1
            CONTROLNAME = 
C.NAME
            On Error Resume Next
            CONTROLNAME = 
C.NAME
 & IIf(C.Index <> -1, "(" & C.Index & ")",
"")
            CONTROLLI(NCONTROLS).NAME = CONTROLNAME
            CONTROLLI(NCONTROLS).TOP.VALUE = C.TOP
            CONTROLLI(NCONTROLS).LEFT.VALUE = C.LEFT
            CONTROLLI(NCONTROLS).HEIGHT.VALUE = C.HEIGHT
            CONTROLLI(NCONTROLS).WIDTH.VALUE = C.WIDTH
            CONTROLLI(NCONTROLS).TOP.STATUS = False
            CONTROLLI(NCONTROLS).LEFT.STATUS = False
            CONTROLLI(NCONTROLS).HEIGHT.STATUS = False
            CONTROLLI(NCONTROLS).WIDTH.STATUS = False
            'Debug.Print 
C.NAME
, C.TOP, C.LEFT, C.HEIGHT, C.WIDTH
            'Debug.Print CONTROLLI(NCONTROLS).NAME,
CONTROLLI(NCONTROLS).TOP.VALUE, CONTROLLI(NCONTROLS).LEFT.VALUE,
CONTROLLI(NCONTROLS).HEIGHT.VALUE, CONTROLLI(NCONTROLS).WIDTH.VALUE
            tvwCONTROLS.Nodes.Add , , CONTROLNAME, CONTROLNAME
            tvwCONTROLS.Nodes.Add CONTROLNAME, tvwChild, CONTROLNAME &
".TOP", "TOP = " & C.TOP
            tvwCONTROLS.Nodes.Add CONTROLNAME, tvwChild, CONTROLNAME &
".LEFT", "LEFT = " & C.LEFT
            tvwCONTROLS.Nodes.Add CONTROLNAME, tvwChild, CONTROLNAME &
".WIDTH", "WIDTH = " & C.WIDTH
            tvwCONTROLS.Nodes.Add CONTROLNAME, tvwChild, CONTROLNAME &
".HEIGHT", "HEIGHT = " & C.HEIGHT
            On Error GoTo 0
        End If
    Next
End Sub
Public Sub RESIZEWINDOW()
    Dim C As Control
    Dim CONTROLNAME As String
    If CONTROLLI(0).NAME <> "" Then
        PW = (Parent.WIDTH - CONTROLLI(0).WIDTH.VALUE) /
CONTROLLI(0).WIDTH.VALUE
        PH = (Parent.HEIGHT - CONTROLLI(0).HEIGHT.VALUE) /
CONTROLLI(0).HEIGHT.VALUE
        For I = 1 To NCONTROLS
            OGGETTO = CONTROLLI(I).NAME
            For Each C In Parent.Controls
                CONTROLNAME = 
C.NAME
                On Error Resume Next
                CONTROLNAME = 
C.NAME
 & IIf(C.Index <> -1, "(" & C.Index &
")", "")
                If CONTROLNAME = OGGETTO Then
                    If CONTROLLI(I).NAME = OGGETTO Then
                        If CONTROLLI(I).TOP.STATUS = True Then C.TOP =
CONTROLLI(I).TOP.VALUE * PH + CONTROLLI(I).TOP.VALUE
                        If CONTROLLI(I).LEFT.STATUS = True Then C.LEFT =
CONTROLLI(I).LEFT.VALUE * PW + CONTROLLI(I).LEFT.VALUE
                        If CONTROLLI(I).WIDTH.STATUS = True Then C.WIDTH =
CONTROLLI(I).WIDTH.VALUE * PW + CONTROLLI(I).WIDTH.VALUE
                        If CONTROLLI(I).HEIGHT.STATUS = True Then C.HEIGHT =
CONTROLLI(I).HEIGHT.VALUE * PH + CONTROLLI(I).HEIGHT.VALUE
                    End If
                    Exit For
                End If
                On Error GoTo 0
            Next
        Next I
    End If
End Sub
'Codice Form di Esempio
Private Sub Form_Resize()
    Me.ControlResizer1.RESIZEWINDOW
End Sub