Newsgroup: it.comp.appl.access
Titolo: Cambiare la risoluzione video dal db

Salve ragazzi,
ho il seguente problema: il cliente per il quale ho creato un db usa
l'ORRENDA risoluzione 640 x 480, mentre io ho fatto il db in 800 x 600 per
poter far stare nelle maschere un numero sufficiente di controlli.
Ovviamente io ho provato ad invitarlo a passare all'800
x 600, ma lui dice che in un'altra procedura installata sul medesimo pc i
caratteri risultano troppo
piccoli. Allora vi chiedo; c'è modo di cambiare risoluzione video all'avvio
del db e ripristinare la vecchia in uscita? Ho scaricato dal sito comune
l'utility ScreenAccess di Carlo Costarella, ma è troppo bella, cioè permette
un'ampia scelta. Io preferirei fare tutto in modo trasparente all'utente
secondo due settaggi predefniti; devo dire che ho anche provato a dare
un'occhiata al codice, ma è veramente tosto e non sono riuscita ad
estrapolare le righe di codice che mi servirebbero.
Grazie anticipatamente.
Bye
Ilaria


Prova con questa.
Metti tutto in un modulo, modificando checkRes() secondo le
tue esigenze.
Poi all'avvio e alla chiusura della tua applicazione lancia
la sub 'checkRes'
Cosi' com'e' la procedura imposta la risoluzione a 800x600
se quella corrente e' minore.
Attenzione se l'utente chiude access non viene ripristinata
la risoluzione!
Dovrebbe funzionare
Bye
------------------------------------------------------
Private Declare Function EnumDisplaySettings Lib "user32" _
        Alias "EnumDisplaySettingsA" _
        (ByVal lpszDeviceName As Long, _
        ByVal iModeNum As Long, _
        lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32"
_
        Alias "ChangeDisplaySettingsA" _
        (lpDevMode As Any, _
        ByVal dwflags As Long) As Long
Private Const ENUM_CURRENT_SETTINGS = -1
Private Const CDS_FORCE As Long = &H80000000
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DM_PELSWIDTH As Long = &H80000
Private Const DM_PELSHEIGHT As Long = &H100000
Private Const CCDEVICENAME As Long = 32
Private Const CCFORMNAME As Long = 32
 
Private Type DEVMODE
   dmDeviceName      As String * CCDEVICENAME
   dmSpecVersion     As Integer
   dmDriverVersion   As Integer
   dmSize            As Integer
   dmDriverExtra     As Integer
   dmFields          As Long
   dmOrientation     As Integer
   dmPaperSize       As Integer
   dmPaperLength     As Integer
   dmPaperWidth      As Integer
   dmScale           As Integer
   dmCopies          As Integer
   dmDefaultSource   As Integer
   dmPrintQuality    As Integer
   dmColor           As Integer
   dmDuplex          As Integer
   dmYResolution     As Integer
   dmTTOption        As Integer
   dmCollate         As Integer
   dmFormName        As String * CCFORMNAME
   dmUnusedPadding   As Integer
   dmBitsPerPel      As Integer
   dmPelsWidth       As Long
   dmPelsHeight      As Long
   dmDisplayFlags    As Long
   dmDisplayFrequency As Long
End Type
Private Type TRes
    lHoriz As Long
    lVert As Long
End Type
Global DM As DEVMODE
Global g_curRes As TRes
Private Function ChangeCurrentRes(newRes As TRes) As
Boolean
    With DM
        .dmPelsWidth = newRes.lHoriz
        .dmPelsHeight = newRes.lVert
        .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
        .dmSize = LenB(DM)
    End With
    If ChangeDisplaySettings(DM, CDS_FORCE) =
DISP_CHANGE_SUCCESSFUL Then
        ChangeCurrentRes = True
    End If
End Function
Private Function GetCurrentRes() As TRes
    Dim DM As DEVMODE
    DM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
    DM.dmSize = LenB(DM)
    Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, DM)
    GetCurrentRes.lHoriz = DM.dmPelsWidth
    GetCurrentRes.lVert = DM.dmPelsHeight
End Function
Public Sub checkRes()
    Dim curRes As TRes
    Dim newRes As TRes
    Dim bRes As Boolean
    If g_curRes.lHoriz = 0 Then
        curRes.lHoriz = GetCurrentRes.lHoriz
        curRes.lVert = GetCurrentRes.lVert
        'Modifica secondo le tue esigenze
        If curRes.lHoriz < 800 Then
            newRes.lHoriz = 800
            newRes.lVert = 600
            bRes = ChangeCurrentRes(newRes)
            If bRes = True Then
                g_curRes = curRes
                MsgBox "La risoluzione è stata cambiata!",
vbInformation, "Operazione eseguita"
            Else
                MsgBox "Impossibile cambiare la risoluzione
corrente.", vbCritical, "ERRORE"
            End If
        End If
    Else
        newRes = g_curRes
        bRes = ChangeCurrentRes(newRes)
        If Not bRes = True Then
            MsgBox "Impossibile reimpostare la
risoluzione.", vbCritical, "ERRORE"
        End If
    End If
End Sub
------------------------------------------------------
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------


Grazie, ma io ho un problema: richiamo checkRes all'evento "su caricamento"
della maschera iniziale dell'applicazione e ricevo il seguente messaggio di
errore "Impossibile trovare il nome della funzione immesso nell'espressione:
l'espressione non corrisponde al nome di una macro, di una funzione definita
dall'utente, oppure a una routine evento". Cioč access non trova la
funzione, ma io ho salvato il codice che hai scritto in un modulo generale
che dovrebbe essere accessibile a tutt il db. Dove sbaglio?
So che deve essere un errore madornale, ma non  lo vedo...
Bye
Ilaria

Scusate se mi intrometto, ma avendo lo stesso problema di Ilaria, ho usato
il tuo codice....funziona tutto perfettamente (dovevo passare da 800x600 a
1024x768) il problema sorge quando uso il tuo codice per fare l'operazione
contraria, in quanto lo scherma mi risulta praticamente tagliato.
Mi puoi consigliare?
Grazie comunque per la prima parte di codice.
Ciao Bobbit

 Ilaria
Probabilemnte perche' l'hai scritto nella finestra delle proprieta'!
Non va bene, perche' checkRes e' una sub e non una function.
Scrivilo nel codice, cosi:
Private Sub Form_Load()
    checkRes
End Sub


 Mi puoi consigliare?
Questo ti succede, naturalmente, con le finestre delle altre applicazioni che
in quel momento sono aperte.
Se hai una applicazione massimizzata e riduci la risoluzione video, purtroppo
questa viene tagliata (succede anche se lo fai agendo sulle proprieta' dello
schermo). Basta iconizzarla e rimassimizzarla.
Per evitare l'effetto bisognerebbe (prima di ridurre la risoluzione)
intercettare tutte le applicazioni aperte e iconizzarle!
Non so se ne vale la pena. :-)
