Newsgroup: it.comp.lang.visual-basic
Titolo: Individuare la risoluzione

Salve a tutti.
Il programma che ho fatto deve comportarsi diversamente a seconda
della risoluzione dello schermo, ed in particolare alla presenza dei
caratteri grandi o piccoli.
Vorrei pertanto sapere se tali impostazioni siano memorizzate in un
qualche set di variabili di sistema, o qualcosa del genere.
Grazie in anticipo.

 caratteri grandi o piccoli.
Per la risoluzione puoi usare queste fomulette:
Larghezza in pixel = Screen.Width / Screen.TwipsPerPixelX
Altezza in pixel = Screen.Height / Screen.TwipsPerPixelY
Per i caratteri piccoli e grandi, tieni presente che non esistono solo
queste due scelte, l'utente potrebbe aver personalizzato la dimensione
o cambiato il font di sistema... Questo può far sbarellare qualunque form,
per quanto accuratamente calcolato :-((
Bye, G.
--
---------------------------------------------
    Le risposte alle tue domande le trovi
    sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
       ... e nell'help in linea !
---------------------------------------------
Real E-address: 
gaet...@hotmail.com

per quanto accuratamente calcolato :-((
Gia'. :(
Comunque non e' possibile individuarla, almeno per mettere un
avvertimento del tipo "Il programma non funziona se non hai delle
impostazioni da cristiano" o cmq per contemplare quel paio di
combinazioni (tra le infinite) piu' diffuse?

 combinazioni (tra le infinite) piu' diffuse?
Oh, kaiser, hai ragione. Mi sono scordato di specificarlo. Il problema
è che non si può fare, o almeno non si può _in modo affidabile_.
Anche la M$ è al corrente del problema, e lo dice specificatamente qui:
INFO: Large Fonts Versus Small Fonts Use in Windows
http://support.microsoft.com/support/kb/articles/Q177/7/95.ASP
Traduco (molto) alla buona dal doc di cui sopra:
"... il sistema operativo non conosce la differenza, e specificatamente
non sa se l'utente ha selezionato caratteri piccoli o grandi. Di conseguenza,
non può riferire quali siano i settaggi effettivi."
E più giù:
"Nota: i valori e le stringhe che appaiono nella finestra Impostazioni Schermo
del pannello di controllo sono forniti dal driver di schermo o sono solo dati
archiviati nel registro di sistema. La presenza di questi dati non implica che
il sistema operativo possa riportarli in modo significativo."
Comunque un modo approssimativo è quello di vedere screen.twipsperpixelx,
se è 12 _dovresti_ avere caratteri grandi, con 15 i piccoli.
Un altro sistema è quello di vedere il valore di ritorno di GetDeviceCaps,
nei flags LOGPIXELSX e LOGPIXELSY. Un valore di 96 _dovrebbe_
indicare caratteri piccoli, un valore di 120 grandi. Guarda qua:
How to use GetDeviceCaps within Visual Basic
http://support.microsoft.com/support/kb/articles/Q114/7/09.asp
Dovrebbe esserci anche un metodo più semplice, guardando nel registro,
ma non ricordo dove. L'affidabilità di tutti questi metodi comunque è
simile, usa Twipsperpixel e spera in bene...
Un'altra cosa che puoi fare è giocare con un loop e la funzione StringWidth
per vedere con che FontSize una stringa ti risulta della lunghezza giusta.
Oppure prevedere due settaggi: font grandi e piccoli e lasciare la scelta
all'utente. Non mi viene in mente altro, a quest'ora poi, sono già in ferie...
Sorry :-((


Bye, G.
Mi sei stato enormemente d'aiuto, grazie!
Mi vedro' bene cio' che mi hai consigliato, alla peggio lascero'
all'utente la possibilita' di scegliere tra le due impaginazioni (a
car. grandi e piccoli).
Ciao e buone vacanze!

 E più giù:





scusate il ritardo, ma vedo ora i msg arretrati.
io normalmente tengo caratteri piccoli, 15 twips-x/y. ho provato ora a
mettere personalizzati, 110%. dopo il riavvio (a parte che ora mi sembra di
avere il monitor spiaccicato sulla punta del naso) ho lanciato il mini vbp
qui sotto. vb ha colto il passaggio da 15 twips a 13. il codice l'allego per
l'uso della fx GetSystemMetrics adattato dalla guida del kpd: nelle costanti
si intravede che qualcosa delle regolazioni utente si puo' cogliere. non
capisco bene ms quando dice che win non ci riesce, perche' per alcune cose
ci riesce perfino vb.
d'altra parte, si programma per un'utenza media. pensare a un'interfaccia
che regga in tutte le installazioni di windows esistenti -- boh.
ciao, a.
Option Explicit
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As
Long) As Long
Const SM_CXSCREEN = 0 'X Size of screen
Const SM_CYSCREEN = 1 'Y Size of Screen
Const SM_CXVSCROLL = 2 'X Size of arrow in vertical scroll bar.
Const SM_CYHSCROLL = 3 'Y Size of arrow in horizontal scroll bar
Const SM_CYCAPTION = 4 'Height of windows caption
Const SM_CXBORDER = 5 'Width of no-sizable borders
Const SM_CYBORDER = 6 'Height of non-sizable borders
Const SM_CXDLGFRAME = 7 'Width of dialog box borders
Const SM_CYDLGFRAME = 8 'Height of dialog box borders
Const SM_CYHTHUMB = 9 'Height of scroll box on horizontal scroll bar
Const SM_CXHTHUMB = 10 ' Width of scroll box on horizontal scroll bar
Const SM_CXICON = 11 'Width of standard icon
Const SM_CYICON = 12 'Height of standard icon
Const SM_CXCURSOR = 13 'Width of standard cursor
Const SM_CYCURSOR = 14 'Height of standard cursor
Const SM_CYMENU = 15 'Height of menu
Const SM_CXFULLSCREEN = 16 'Width of client area of maximized window
Const SM_CYFULLSCREEN = 17 'Height of client area of maximized window
Const SM_CYKANJIWINDOW = 18 'Height of Kanji window
Const SM_MOUSEPRESENT = 19 'True is a mouse is present
Const SM_CYVSCROLL = 20 'Height of arrow in vertical scroll bar
Const SM_CXHSCROLL = 21 'Width of arrow in vertical scroll bar
Const SM_DEBUG = 22 'True if deugging version of windows is running
Const SM_SWAPBUTTON = 23 'True if left and right buttons are swapped.
Const SM_CXMIN = 28 'Minimum width of window
Const SM_CYMIN = 29 'Minimum height of window
Const SM_CXSIZE = 30 'Width of title bar bitmaps
Const SM_CYSIZE = 31 'height of title bar bitmaps
Const SM_CXMINTRACK = 34 'Minimum tracking width of window
Const SM_CYMINTRACK = 35 'Minimum tracking height of window
Const SM_CXDOUBLECLK = 36 'double click width
Const SM_CYDOUBLECLK = 37 'double click height
Const SM_CXICONSPACING = 38 'width between desktop icons
Const SM_CYICONSPACING = 39 'height between desktop icons
Const SM_MENUDROPALIGNMENT = 40 'Zero if popup menus are aligned to the left
of the memu bar item. True if it is aligned to the right.
Const SM_PENWINDOWS = 41 'The handle of the pen windows DLL if loaded.
Const SM_DBCSENABLED = 42 'True if double byte characteds are enabled
Const SM_CMOUSEBUTTONS = 43 'Number of mouse buttons.
Const SM_CMETRICS = 44 'Number of system metrics
Const SM_CLEANBOOT = 67 'Windows 95 boot mode. 0 = normal, 1 = safe, 2 =
safe with network
Const SM_CXMAXIMIZED = 61 'default width of win95 maximised window
Const SM_CXMAXTRACK = 59 'maximum width when resizing win95 windows
Const SM_CXMENUCHECK = 71 'width of menu checkmark bitmap
Const SM_CXMENUSIZE = 54 'width of button on menu bar
Const SM_CXMINIMIZED = 57 'width of rectangle into which minimised windows
must fit.
Const SM_CYMAXIMIZED = 62 'default height of win95 maximised window
Const SM_CYMAXTRACK = 60 'maximum width when resizing win95 windows
Const SM_CYMENUCHECK = 72 'height of menu checkmark bitmap
Const SM_CYMENUSIZE = 55 'height of button on menu bar
Const SM_CYMINIMIZED = 58 'height of rectangle into which minimised windows
must fit.
Const SM_CYSMCAPTION = 51 'height of windows 95 small caption
Const SM_MIDEASTENABLED = 74 'Hebrw and Arabic enabled for windows 95
Const SM_NETWORK = 63 'bit o is set if a network is present. Const SM_SECURE
= 44 'True if security is present on windows 95 system
Const SM_SLOWMACHINE = 73 'true if machine is too slow to run win95.
Private Sub cmdInfo1_Click()
    Dim sx As Integer, sy As Integer
    sx = Screen.TwipsPerPixelX
    sy = Screen.TwipsPerPixelY
    lblMsg = _
        "SX: " & sx & vbCrLf & _
        "SY: " & sy & vbCrLf & _
        "Screen.Width: " & Screen.Width / sx & vbCrLf & _
        "Screen.Height: " & Screen.Height / sy
End Sub
Private Sub cmdInfo2_Click()
    'KPD-Team 1998
    'URL: 
http://www.allapi.net/
    'E-Mail: KPD...@Allapi.net
    lblMsg = "Number of mouse buttons:" +
Str$(GetSystemMetrics(SM_CMOUSEBUTTONS)) & vbCrLf & _
    "Screen X:" + Str$(GetSystemMetrics(SM_CXSCREEN)) & vbCrLf & _
    "Screen Y:" + Str$(GetSystemMetrics(SM_CYSCREEN)) & vbCrLf & _
    "Height of windows caption:" + Str$(GetSystemMetrics(SM_CYCAPTION)) &
vbCrLf & _
    "Width between desktop icons:" +
Str$(GetSystemMetrics(SM_CXICONSPACING)) & vbCrLf & _
    "Maximum width when resizing a window:" +
Str$(GetSystemMetrics(SM_CYMAXTRACK)) & vbCrLf & _
    "Is machine is too slow to run windows?" +
Str$(GetSystemMetrics(SM_SLOWMACHINE))
    End Sub
Private Sub cmdOK_Click()
    Unload Me
End Sub