Condividi tramite

Controlli ActiveX e cambio risoluzione

Anonimo
2019-06-17T18:04:09+00:00

Ciao a tutti.

Non so con altre versioni ma con Excel 2007 riscontro questo particolare problema utilizzando dei controlli ActiveX nel caso in cui la risoluzione utilizzata, magari per utilizzo con un monitor differente, rispetto a quella con cui i controlli sono stati creati.

In particolare i controlli si rimpiccioliscono "all'infinito".

Il problema l'ho riscontrato inizialmente con un controllo checkbox inserito in un foglio.

Una volta utilizzato il foglio con una risoluzione differente (da 1366x768 a 1920x1080) la "capiton" del controllo diventava sempre più piccola fino a diventare illegibile. Tale modifica risultava irreversibile. Al punto che ho sostituito il controllo ActiveX con un controllo "modulo".

Ho provato un altro file dove, in maniera dinamica, rendo visibile, ridimensiono in base alle impostazioni di zoom un "controllo calendario" basato su un frame presente in un foglio, popolato da una serie di altri controlli (commandbutton, combobox, spinbutton).

Il controllo viene reso visibile o meno a seconda che venga selezionata una particolare cella.

Se tale azione non dà problemi con la risoluzione originaria mantendendo l'oggetto tutte le dimesioni originarie nel momento in cui l'utilizzo avviene con una risoluzione differente i controlli si rimpiccioliscono.

Ad es. situazione di partenza con risoluzinoe originaria:

Questo è quello che accade se cambio risoluzione dove la prima immagine presenta il "calendario" alle dimensioni previste:

se ad es. mi sposto in una cella differente (dove il calendario viene reso non visibile) e poi mi risposto sulla cella della data (dove il calendario viene reso visibile) succede che a parità di dimensioni del frame (le cui dimensioni sono fissate dinamicamente) i controlli interni si rimpiccioliscono:

ripetendo l'operazione si ha un ulteriore rimpicciolimento:

e avanti così fino all' "infinito".

In questo caso poiché ho la possibilità di impostare diversi livelli di Zoom se imposto uno Zoom differente da quello di partenza tutti i controlli si ridimensionano al nuovo Zoom.

Ma poi ad ogni azione si ha un rimpicciolimento fino a che non modifico nuovamente lo zoom ex novo.

In questo file specifico, poiché come ho detto, il "controllo" viene dimensionato dinamicamente ho ripetuto le istruzioni .Zoom, .Width e .Height come di seguito:

   With oCalendario

      .Zoom = ZoomCalendario * 1.1

      .Width = CalendarioWidth * .Zoom / 100 * 1.1

      .Height = CalendarioHeight * .Zoom / 100 * 1.1

      .Zoom = ZoomCalendario

      .Width = CalendarioWidth * .Zoom / 100

      .Height = CalendarioHeight * .Zoom / 100

....

In pratica modifico sempre prima lo zoom per poi impostarlo a quello desiderato (ZoomCalendario è una function che legge un nome excel dove è indicato un livello di zoom personalizzato che può essere 100, 105, ecc. ecc. mentre CalendarioWidth  e CalendarioHeight  sono delle costanti che rapprsentano le dimensioni iniziali di creazione del frame che contiene i vari controlli) e così facendo ottengo che la riduzione si produca una sola volta avendosi una situazione "stabile" alla terza immagine presente in questo topic (ma pur sempre con uno "sfalsamento" delle dimensioni dei controlli interni rispetto al frame che li contiene).

Aggiungo che se ritorno alla risoluzione originaria le dimensioni rispettano sempre quelle inizialmente impostate e che si modificano solo in base allo zoom personalizzato impostato dall'utente.

C'è qualcuno che ha notato questa anomalia per i controlli activex in caso di cambio di risoluzione utilizzata?

Grazie e ciao

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-06-19T11:35:10+00:00

Ciao Casanmaner,

Apro Excel e il file con il monitor con risoluzione 1920x1080 e utilizzo il file.

Non chiudo Excel ma lo lascio aperto.

Vado in "Risoluzione dello schermo" e imposto 1366x768.

Mi sposto nuovamente nel file e lo utilizzo spostandomi nelle celle in modo che il "calendario" venga di volta in volta reso visibile o meno.

Man mano i controlli interni cambiano di dimensioni.

Ebbene, sono riuscito a replicare il comportamento problematico del controllo calendario.

Sono stato in grado di eliminare il problema sostituendo nella procedura ImpostaCalendario  le istruzioni 

        .Width = CalendarioWidth * .Zoom / 100

        .Height = CalendarioHeight * .Zoom / 100

con:

  .Width = 217.5

.Height = 215.25

        .Width = CalendarioWidth * .Zoom / 100

        .Height = CalendarioHeight * .Zoom / 100

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-06-19T08:47:30+00:00

    Ciao Casanmaner,

    Ho scaricato il tuo file.

    Vorresti enumerare i passi per riprodurre il fenomeno problematico?

    A proposito, ho modificato la procedura Worksheet_SelectionChange per rivisualizzare il calendario solo se la cella selezionata si trova nella colonna E.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-06-18T15:21:21+00:00

    Ciao Ermanno,

    Vedi il seguente thread (in inglese) su Stackoverflow:

    Excel: the Incredible Shrinking and Expanding Controls

    Se dovessi avere ancora un problema, ti chiederei di caricare gentilmente un file di esempio.

    Postscriptum:

    Per ulteriori letture, vedi qui.

    ===

    Regards,

    Norman

    Ciao Norman,

    grazie per la risposta.

    In pratica è lo stesso problema riscontrato da me.

    Nel caso specifico del "calendario" ho notato che il problema si presenta se l'oggetto viene reso non visibile e successivamente visibile e se Excel è in esecuzione nel cambio di di risoluzione.

    Se ad es. apro excel con la risoluzione 1920x1080, magari apro il file e lo utilizzo le dimensioni dei controlli rimangono invariate.

    Se per un qualche motivo modifico la risoluzione a 1366x768, mantenendo Excel aperto, e poi lavoro sul file ecco che i controlli si rimpiccioliscono.

    Ciò non accade se il "calendario" rimane sempre visibile.

    Qui trovi in file che simula il funzionamento del calendario

    In questo file ad ogni selezione il calendario viene spostato in una posizione specifica rendendolo prima non visibile e poi visibile.

    Nella realtà il calendario viene reso visibile se la cella selezionata è una cella della colonna delle date mentre non è visibile se sono selezionate altre celle.

    Ma alla fine è in concreto ciò che accade sempre perché il calendario alternativamente è visibile o non è visibile.

    https://www.dropbox.com/s/e9m0p2z2yzapctq/TestResizeControlli.xlsm?dl=0

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-06-18T09:45:37+00:00

    Ciao Ermanno,

    Aggiungo un altro particolare.

    Il problema si riscontra quando excel è in esecuzione durante la modifica della risoluzione dello schermo (in particolare questa cosa accade con un portatile dove alla chiusura dello sportello il monitor del portatile viene sostituito, in automatico, da un monitor secondario (24" con risoluzione maggiore).

    Se invece Excel non è in esecuzione e viene aperto quando si è già in una risoluzione (o l'altra a seconda del monitor utilizzato) tutto torna a funzionare regolarmente e non è nemmeno necessario avere quella "doppia serie" di istruzioni.

    Il problema però si pone per gli activex fissi perché ho l'impressione che occorra modificarne lo zoom manualmente (anche se non ho ancora provato in realtà se la cosa funziona ma vado a logica sulla base di quello che accade con questo "controllo" dove da codice modifico lo zoom iniziale).

    Mah?

    Vedi il seguente thread (in inglese) su Stackoverflow:

    Excel: the Incredible Shrinking and Expanding Controls

    Se dovessi avere ancora un problema, ti chiederei di caricare gentilmente un file di esempio.

    Postscriptum:

    Per ulteriori letture, vedi qui.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-06-17T18:42:13+00:00

    Aggiungo un altro particolare.

    Il problema si riscontra quando excel è in esecuzione durante la modifica della risoluzione dello schermo (in particolare questa cosa accade con un portatile dove alla chiusura dello sportello il monitor del portatile viene sostituito, in automatico, da un monitor secondario (24" con risoluzione maggiore).

    Se invece Excel non è in esecuzione e viene aperto quando si è già in una risoluzione (o l'altra a seconda del monitor utilizzato) tutto torna a funzionare regolarmente e non è nemmeno necessario avere quella "doppia serie" di istruzioni.

    Il problema però si pone per gli activex fissi perché ho l'impressione che occorra modificarne lo zoom manualmente (anche se non ho ancora provato in realtà se la cosa funziona ma vado a logica sulla base di quello che accade con questo "controllo" dove da codice modifico lo zoom iniziale).

    Mah?

    La risposta è stata utile?

    0 commenti Nessun commento