+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

[VB6] Impostare la risoluzione dello schermo

  1. #1
    L'avatar di UbySoft71
    UbySoft71 non è in linea Scolaretto
    So per sentito dire che con vb6 è impossibile cambiare la risoluzione dello schermo.
    Mi chiedo Perchè? non è possibile.
    Possibile che nessuno al mondo sia riuscito a fare una funzione una classe un qualcosa insomma x cambiare la risoluzione dello schermo in base alla risoluzione dell'applicazione!?
    Senza resize senza modificare l'applicazione in base alla risoluzione corrente.
    Perche non si puo!? è impossibile davvero?? ne sapete qualcosa?? possibile che si deve per foza adattare i controlli alla risoluzione, e non si può invece a rovescio!!!??
    ℹ️ Leggi di più su UbySoft71 ...

  2. #2
    L'avatar di TheTruster
    TheTruster ora è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Quote Originariamente inviato da UbySoft71 Visualizza il messaggio
    So per sentito dire che con vb6 è impossibile cambiare la risoluzione dello schermo.
    Mi chiedo Perchè? non è possibile.
    Possibile che nessuno al mondo sia riuscito a fare una funzione una classe un qualcosa insomma x cambiare la risoluzione dello schermo in base alla risoluzione dell'applicazione!?
    Senza resize senza modificare l'applicazione in base alla risoluzione corrente.
    Perche non si puo!? è impossibile davvero?? ne sapete qualcosa?? possibile che si deve per foza adattare i controlli alla risoluzione, e non si può invece a rovescio!!!??
    infatti non è impossibile... e d'altronde sarebbe bastata una semplice ricerca su Google per scoprirlo...

    ChangeScreenResolution

    il problema però è un'altro...
    a me sinceramente scoccerebbe tantissmo se un'applicazione sei permettesse la libertà di modificarmi la risoluzione dello schermo!

    Una regola che tengo sempre presente quando programmo è che deve essere l'applicazione ad adattarsi all'ambiente che potrebbe incontrare sulla macchina di un utente, e non viceversa.

    Le impostazioni dell'utente sono "sacre" e non vanno modificate discrezionalmente dalla tua applicazione. Ecco qual è il motivo per cui, se necessario, è meglio predisporre una routine di adattamento dei form alla risoluzione, piuttosto che il contrario.

    E poi, pensaci: se la tua applicazione volesse cambiare la risoluzione del mio monitor ad una grandezza non supportata dalla mia scheda video?
    Che fine pensi che faccia la tua applicazione, una volta che sono riuscito a ripristinare le mie impostazioni personali?

    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  3. #3
    L'avatar di gibra
    gibra non è in linea Very Important Person
    A parte quello che dice giustamente TheTruster, i problemi sono molteplici.

    Ovviamente, come detto, è sicuramente possibile cambiare non solo la risoluzione, ma anche la profondità di colore dello schermo.

    La questione però è molto complessa.
    Se lo fai poi devi rimettere tutto a posto, cioè l'utente non deve essere costretto ad intervenire in alcun modo in entrambe le operazioni, cioè sia nella modifica che nel ripristino della risoluzione.
    Per intenderci, tutto deve essere trasparente all'utente, anche quando egli dovesse passare da un'applicazione all'altra, ad esempio con premendo ALT+TAB.
    Oppure quando vi sono altre applicazioni che modificano a loro volta le impostazioni dello schermo.

    Tutto questo comporta un'attenta e precisa implementazione delle routine di modifica e ripristino che tengano conto di qualsiasi evento o azione si verificano relativamente allo schermo. Il tutto, ovviamente, implementato esclusivamente tramite funzioni API apposite!

    Per fare un lavoro 'abbastanza buono', la tua applicazione dovrebbe:
    1 - leggere tutte le possibili combinazioni previste dalla scheda video
    2 - memorizzare la combinazione corrente
    3 - impostare la tua risoluzione (che deve comunque essere compresa tra quelle elencate al punto 1
    4 - implementare la gestione del passaggio da una risoluzione all'altra nel caso l'utente passi ad una applicazione diversa, memorizzando di volta in volta la risoluzione della applicazione corrente, per poi ripristinare la tua quando ripassa al tuo programma.
    5 - alla chiusura ripristinare la risoluzione precedente, ma tenedo conto quale la combinazione usata più recentemente rispetto alla tua.

    Per capirci meglio:
    A = combinazione predefinita dello schermo
    B = tua combinazione
    C = altra combinazione impostata da un terzo programma
    ecc...

    Se io passo da A a B, devo ripristinare A
    Se io passo da A a B, poi da B a C, da C di nuovo a B, devo ripristinare C
    Se io passo da A a C, poi da C ad A, poi da A a B, devo ripristinare A
    e via discorrendo...
    Come vedi, se vi sono più di 2 programmi che cambiano le impostazioni la cosa si complica notevolmente...


    A complicare ulteriormente la cosa, oggi si sono messi anche i pc portatili!
    E' noto infatti che i portatili (diversamente dai normali monitor 15-17 pollici)utilizzano risoluzioni 'native' perchè sempre più spesso lo schermo non è standard (e qui chi più ne ha, più ne metta).
    Questo implica che, per una corretta visualizzazione DEVI utilizzare la 'sua' risoluzione. Diversamente la qualità video scade vertiginosamente.

    Ovviamente, come ti ha già detto TheTruster, se l'utente vede cose del genere ci mette poco a rimuovere il programma, e buonanotte a tutti!
    A me è successa proprio questo con il pcAnywhere che una volta installato sul mio portatile mi ha impostato la risoluzione a 1024x768 e da lì non si schiodava.
    Con molto dispiacere, ho dovuto rimuoverlo, ma se non uso la risoluzione nativa 1280x800 nel mio pc si vede piuttosto maluccio.

    Spero di averti aiutato a chiarire le idee.

    Ciao
    ℹ️ Leggi di più su gibra ...

  4. #4
    L'avatar di Louis
    Louis non è in linea Scribacchino
    Ciò che hanno detto gli amici del forum che mi hanno preceduto è verissimo (pertanto ciò che espongo non è per contradirli), ma se proprio devi modificare la risoluzione ci potrebbe essere una via mediana garbata, mi spiego:
    - all'avvio del tuo prog. potresti verificare la risoluzione in uso, qualora non fosse compatibile, potresti far emergere un avviso con OK e Annulla, se viene accettata la modifica (OK) della risoluzione in uso, potresti far aprire il pannello di controllo di Win per la modifica.
    Ciao.
    ℹ️ Leggi di più su Louis ...

  5. #5
    Wally non è in linea Scolaretto
    Dico la mia.

    Cambiare i settaggi al s.o. di un cliente è da evitare, assolutamente, e fin qui ci siamo.

    Mi sembra però altresì fuori standard l'idea di adattare l'interfaccia di un software alla risoluzione dello schermo dell'utente.

    Di norma si utilizza una risoluzione di riferimento (la classica "risoluzione minima") che deve far parte del "requisito di sistema" per un corretto utilizzo del sw.
    Il mio parere è quello di progettare sempre applicazioni che girino correttamente a tale risoluzione (che sia 640x480, 800x600, ecc.). Sarà compito del cliente variare la risoluzione dello schermo per poter usufruire del sw.
    Ovviamente tale discorso decade per sw il cui ambiente di lavoro è, ad esempio, in stile MSWord in cui l'interfaccia è costituita dalla sola toolbar.

    Spero di essere stato chiaro nel mio ragionamento.

    Nonostante ciò, purtroppo, alle volte può essere indispensabile effettuare una modifica alla risoluzione. Un classico esempio è la realizzazione di videogiochi (per chi, come me, ha mai avuto la fortuna di addentrarsi in un campo così interessante, anche se a scopo personale). In tal caso, quindi, oltre ad usare il codice sopra linkato, è necessario prevedere una routine che si occupi di rilevare la risoluzione corrente!

    Il flusso sarà: Ricavare impostazioni originali --> Cambiare risoluzione --> Ripristinare impostazioni originali

    Di seguito un estratto di codice che adempie al compito, preparato per il mio "figlio prediletto"... un gioco di scacchi!

    Ovviamente è solo una porzione di un codice ben più vasto ed il tutto va quindi adattato alle relative esigenze. Ripeto: tali procedure andrebbero utilizzate soltanto in casi "eccezionali" (vedi appunto l'ambito dei videogame) ma sono *sconsigliatissime* in ambito di applicazioni Win32, per cui vale la regola della "Risoluzione minima"

    '************************************************************************
    '* Funzione per modificare la risoluzione dello schermo e ripristinarla *
    '************************************************************************
    Public Function fnChangeRes(enRes As enChangeRes, Optional lResWidth As Long = RES_WIDTH, Optional lResHeight As Long = RES_HEIGHT)
        If enRes = StartApp Then
            RetrieveCurrentScreenResolution
            ChangeScreenResolution lResWidth, lResHeight, lpDevModeCurr.dmBitsPerPel, lpDevModeCurr.dmDisplayFrequency
        ElseIf enRes = CloseApp Then
            ChangeScreenResolution lpDevModeCurr.dmPelsWidth, lpDevModeCurr.dmPelsHeight, lpDevModeCurr.dmBitsPerPel, lpDevModeCurr.dmDisplayFrequency
        ElseIf enRes = NormalChange Then
            ChangeScreenResolution lResWidth, lResHeight, lpDevModeCurr.dmBitsPerPel, lpDevModeCurr.dmDisplayFrequency
        End If
    End Function
    '************************************************************************
    
    '************************************************************************
    '*Ricavo la risoluzione corrente e la memorizzo su lpDevModeCurr        *
    '************************************************************************
    Private Function RetrieveCurrentScreenResolution()
        lpDevModeCurr.dmSize = Len(lpDevModeCurr)
        lpDevModeCurr.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
    
        EnumDisplaySettings 0, ENUM_CURRENT_SETTINGS, lpDevModeCurr
    End Function
    
    '************************************************************************
    '*Funzione per variare risoluzione dello schermo                        *
    '************************************************************************
    Private Function ChangeScreenResolution(ByVal Width As Long, ByVal Height As Long, _
        ByVal NumColors As Long, Optional Frequency As Long) As Boolean
        Dim lpDevMode As DEVMODE
        Dim Index As Long
        
        ' set the DEVMODE flags and structure size
        lpDevMode.dmSize = Len(lpDevMode)
        lpDevMode.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
        
        ' retrieve info on the Nth display mode, exit if no more
        Do While EnumDisplaySettings(0, Index, lpDevMode) > 0
            ' check whether this is the mode we're looking for
            If lpDevMode.dmPelsWidth = Width And lpDevMode.dmPelsHeight = Height _
                And lpDevMode.dmBitsPerPel = NumColors Then
                ' check that the frequency is also the one we're looking for
                If Frequency = 0 Or Frequency = lpDevMode.dmDisplayFrequency Then
                    ' try changing the resolution
                    If ChangeDisplaySettings(lpDevMode, CDS_FORCE) = 0 Then
                        ' zero means success
                        ChangeScreenResolution = True
                        Exit Do
                    End If
                End If
            End If
            ' skip to next screen mode
            Index = Index + 1
        Loop
    
    End Function
    
    ℹ️ Leggi di più su Wally ...

  6. #6
    ZEUSsat non è in linea Scribacchino
    Sarebbe bastato ancora meno , una ricerca ad esempio sul forum, personalmente mi ricordo che è stato trattato almeno 3/4 volte questo argomento...

    ℹ️ Leggi di più su ZEUSsat ...

  7. #7
    L'avatar di UbySoft71
    UbySoft71 non è in linea Scolaretto
    Quote Originariamente inviato da ZEUSsat Visualizza il messaggio
    Sarebbe bastato ancora meno , una ricerca ad esempio sul forum, personalmente mi ricordo che è stato trattato almeno 3/4 volte questo argomento...

    Già visto nel forum e sinceramente non ho trovato tutte queste informazioni, che mi hanno dato i nostri amici qui in questa discussione, descrizione. Vi ringrazio a tutti!! adesso ho veramente le idee molto più chiare.

    Credo che non serva a molto scrivere che sarebbe bastata una ricerca nel forum, forse è meglio non scrivere nulla!! in questi casi, almeno cosi' io faccio non so se è giusto ho sbagliato, nussuno costringe nessuno a rispondere no!?
    Ciao Ragazzi e grazie!!
    ℹ️ Leggi di più su UbySoft71 ...

  8. #8
    ZEUSsat non è in linea Scribacchino
    Hai ragione (in parte), ne riparliamo quando per 10 anni frequenti forum, e alla fine leggi e rileggi le stesse domande.... Ciao ciao
    ℹ️ Leggi di più su ZEUSsat ...

  9. #9
    L'avatar di UbySoft71
    UbySoft71 non è in linea Scolaretto
    Quote Originariamente inviato da ZEUSsat Visualizza il messaggio
    Hai ragione (in parte), ne riparliamo quando per 10 anni frequenti forum, e alla fine leggi e rileggi le stesse domande.... Ciao ciao
    Si in parte hai ragione anche tu!
    A parte il fatto che sul forum ribadisco non avevo trovato tutte queste informazioni che invece ho ricevuto in questo post, poi c'è il fatto che in 10 anni come dici tu le cose cambiano, cosi' come le esigenze, in fatto di sviluppo.
    se poi vedo la data di inscrizione a questo forum di ZEUSsat non mi sembrano affatto che sono 10 anni che leggi le stesse domande in questo forum, poi c'è il fatto che persone come TheTraster, Gibra, Wally e tutti gli altri, che sono inscritti da più tempo di te, si sono comunque scomodati a darmi delle informazioni utili a me e credo anche a tutto il forum.
    E quindi non credo siano domande inutili, domandare è lecito rispondere é ........
    CIAO!!
    ℹ️ Leggi di più su UbySoft71 ...

  10. #10
    ZEUSsat non è in linea Scribacchino
    Guarda, non ho parole... ti darò una delusione, ma non c'è solo MD come forum sai? Come altri in questo forum , ne frequento altri, "10 anni" non tutti in questo ovviamente ehehe
    Inoltre non ho mai scritto che hai fatto una domanda inutile, e se hai interpretato così mi spiace e me ne scuso. Forse dovresti essere un po meno permaloso
    Comunque è solo flame, mi scuso con tutti (gli altri) e chiudo qui...
    ℹ️ Leggi di più su ZEUSsat ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Come adattare un Form alla risoluzione dello schermo
    Da g.guido nel forum Visual Basic .Net
    Risposte: 17
    Ultimo Post: 18-07-2015, 07:15
  2. Ricavare la risoluzione dello schermo
    Da Fapic nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 06-02-2011, 14:15
  3. VBA: cambiare risoluzione dello schermo
    Da JPetrucci nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 17-11-2006, 23:19
  4. Risoluzione dello schermo
    Da Vercingetorige nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 24-12-2005, 15:03
  5. [Win32] Risoluzione dello schermo
    Da squalokiller nel forum C/C++
    Risposte: 4
    Ultimo Post: 25-07-2005, 00:15