UserForm - Autodimensionamento per variazione Risoluzione Schermo. - dal 04/09/04 pagina vista: volte Sappiamo tutti cosa è la "Dimensione Video": è la "Risoluzione Schermo", che viene espressa in Pixel e che normalmente viene impostata alla risoluzione di 800 x 600 sugli home-computer, mentre sui portatili normalmente è impostata a 1024 x 768. Ovviamente è possibile modificare queste impostazioni su altri valori, valori che sono determinati dalle capacità e dalle dimensioni del monitor usato (14", 15", 17", 19", 21", 24") e soprattutto dalle possibilità della scheda video installata sul computer, nel gestire un numero maggiore di possibili risoluzioni schermo. In pratica la "risoluzione schermo" influisce sulla dimensione degli oggetti che vediamo sul monitor, e maggiore è il valore della risoluzione, maggiore è la quantità di area visiva che vediamo, con la conseguenza che vedremo gli oggetti più piccoli. Quindi ad esempio, in una cartella Excel aperta a tutto schermo, vedremo un maggior numero di righe e di colonne (maggior area visibile), ma le celle, colonne, barre menu, testo, ecc, li vedremo più piccoli. L'argomento di questo esercizio è : realizzare istruzioni che rilevino le dimensioni della risoluzione schermo impostata, e che adattino, al variare della risoluzione, le dimensioni di una UserForm alla nuova risoluzione impostata. Va comunque precisato che i valori e i suggerimenti che seguiranno, vanno intesi come valori di esempio in quanto, per ogni computer-monitor, le dimensioni dell'area visiva (a tutto schermo) sono influenzati da altri parametri che è impossibile predeterminare (frequenza di refresh impostata per la scheda video, posizionamento verticale o orizzontale, ecc.. tutte impostazioni che ogni utente può aver settato a valori diversi, e che modificano sensibilmente l'effettiva dimensione della videata tra un computer ed un altro). Esistono già sul Web degli OCX (librerie di istruzioni) che svolgono la funzione di regolare automaticamente le dimensioni di una Form, e degli "oggetti" nella Form inseriti (TextBox, CommandButton, Label, ecc. ecc.), al variare della risoluzione dello schermo, ma noi ci affideremo ad istruzioni specifiche per il VBA di Excel. Sfrutteremo due proprietà dell'oggetto Application e dell'oggetto Window, e sono:
Sarà appunto all'apertura della UserForm (evento Activate) che rileveremo le dimensioni della finestra, ed useremo i valori restituiti per determinare le nuove misure da tenere. Comunque per capire meglio l'area a cui si riferiscono le due proprietà, vediamo l'immagine sotto: l'area bordata di rosso è l'area letta dalle due proprietà, e si riferisce alla finestra (window) che corrisponde al solo foglio di lavoro e non a tutto Excel. Bisogna fare un presupposto: considereremo le misure standard della window, risultanti alla risoluzione 800 x 600, e per conoscerle, potremo usare queste semplici istruzioni:
ed otterremo il messaggio che ci avvisa con le seguenti misure : 597 x 309 (ripeto, sono misure che possono variare tra computer e computer, ma possiamo assumerle come valori base per le spiegazioni che seguono). Se la risoluzione la impostiamo a 1024 x 768, le misure saranno : 765 x 435, chiaramente maggiori rispetto alle misure viste con l'altra risoluzione. Passiamo ora a fare alcune considerazioni: quando inseriamo una UserForm nel nostro progetto, generalmente la dimensioniamo in modo adeguato, e soprattutto la rendiamo atta a contenere i vari "oggetti" ActiveX che ci serviranno (textBox, CommandButton, Label, ListBox, ecc.); tutti questi "oggetti" prendono il nome di "Controls" (Controlli ActiveX). Normalmente usiamo dimensionare la Userform direttamente nell'editor di visual basic, salvo aggiustamenti quando proviamo poi a chiamarla sul foglio. Probabilmente lo facciamo senza accorgerci che stiamo agendo su quattro proprietà della UserForm, proprietà che ci serviranno se vorremo usare l'autodimensionamento, queste proprietà sono:
In genere le ultime due proprietà, se non le modifichiamo, consentono l'autocentraggio della UserForm all'interno di Excel, in quanto sono impostate con valore a zero, e viene sfruttata un'altra proprietà della UserForm, la proprietà StatUpPosition che di default è impostata a CenterOwner (praticamente: al centro dello schermo in funzione delle misure altezza e larghezza impostate dall'utente). Se passeremo quindi da una risoluzione 800x600 a una 1024x768 vorremo che la dimensione della nostra UserForm si adegui, ingrandendosi in proporzione al fattore di ingrandimento che esiste tra le due risoluzioni. Dovremo tenere presente però, che ingrandendo le dimensioni della UserForm, avremo bisogno che vengano ridimensionati anche i "controlli" inseriti nella userform. Anche tutti i "Controls" possiedono le stesse proprietà della UserForm che determinano larghezza ed altezza, come pure possiedono le proprietà Top e Left, che indicano la loro posizione all'interno della UserForm (e non più all'interno della finestra di Excel), cioè con Top si indica la distanza del controllo dal bordo superiore della UserForm, e con Left la distanza dal suo bordo sinistro. Regolando anche le nuove dimensioni per i Controls manterremo pressochè invariate le proporzioni tra UserForm e i suoi Controls. Possiamo esaminare due esempi: una UserForm che avremo impostato ad una certa dimensione, lasciando che si autocentri automaticamente adeguandosi alla nuova risoluzione, ed una userform che avremo già impostato a tutto schermo e che vorremo ancora a tutto schermo all'aumentare della risoluzione. In entrambi i casi dovremo stabilire il coefficiente di variazione (fattore di conversione). Vediamo il primo esempio, in verde le spiegazioni: in questo caso, non disponendo di posizioni fisse per determinare "dove si trova" la UserForm sullo schermo(Top e Left), dovremo utilizzare altri parametri per impostare le nuove posizioni, mentre per larghezza ed altezza della userform utilizzeremo l'ingrandimento dato dal fattore di conversione: esempio con UserForn NON a tutto schermo:
Il centraggio della UserForm orizzontale è assicurato, se noteremo invece necessità di aggiustamenti per il centraggio verticale basterà aggiungere un valore in punti alla variabile "toppa", per esempio:
Esempio con UferForm a tutto schermo: In questo esempio invece consideriamo una UserForm che, manualmente, avremo impostato a tutto schermo ad una risoluzione 800x600, e che vorremo sempre a tutto schermo se aumenteremo la risoluzione video. Le istruzioni sono simili a quelle appena viste; dovremo solo intervenire in maniera diversa sull' altezza della Userform, per aggiungere un valore al rapporto di conversione; non ci scordiamo che per quanto riguarda l'altezza, il termine di confronto non è l'altezza schermo, ma l'altezza della window. Per i Controls le istruzioni saranno uguali. Vediamo la routine e le spiegazioni solo sulle istruzioni modificate:
Spero di essere stato chiaro e di aver suggerito un metodo "fai da te" senza ricorrere ad OCX specifici. Buon lavoro. prelevato sul sito www.ennius.altervista.org |