Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 - Risoluzione schermo 800x600

Mi servirebbero 2 sub che possano modificare
la risoluzione dello schermo.
Sub1
    ' Memorizza in una variabile pubblica
            l'attuale risoluzione dello schermo
   ' Imposta la risoluzione a 800x600
End
Sub2
     'Reimposta la risoluzione come prima
End
Quando ho creato la mia procedura anni fa' usavo
la risoluzione 800x600 e non mi ero posto il problema.
Oggi si usano risoluzioni maggiori e le finestre della
mia procedura sono troppo piccole.
Vorrei modificare automaticamente la risoluzione
all'avvio del programma per poi ripristinare quella
standard alla chiusura.
Grazie in aticipo a chi potesse e volesse aiutarmi.
Saluti a tutti.
Sauro

 vuoi, e non hai bisogno di componenti esterni o che.
Ho visto e provato; interessante.
Perň non risolve il mio problema in quanto la
dimensione dei caratteri rimane sempre la stessa.
....
Grazie per l'aiuto Andrea.
Ciao, Sauro

 dimensione dei caratteri rimane sempre la stessa.
Ma guarda che questo è il comportamento normale di tutte le applicazioni 
Windows...
Cerca di scrivere il programma in modo che sia indipendente dalla 
risoluzione, e poi lascia all'utente la scelta della risoluzione, che 
dipenderà dal suo monitor e (al limite) dai sui gusti personali.
Considera che sugli schermi LCD non puoi impostare una risoluzione a 
piacere senza avere una cospicua perdita di qualità. E' più leggibile un 
carattere piccolo alla risoluzione nativa, che una carattere grande a 
una risoluzione interpolata.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 una risoluzione interpolata.
Si, devi però tenere conto le segretarie di 50anni che non vedono una mazza
e hanno un 17" @1280.
Io ho aggiunto una property alla classe, MaxFontSize, così poi ognuno se la
può personalizzare.
Ingrandire proporzionalmente è eccessivo, se parti da 800 e arrivi a 1280.

 una risoluzione interpolata.
Purtroppo quanto dici è vero.
Nei portatili che quando usi una risoluzione diversa dalla
sua standard si vede in modo schifoso.
In realtà quando ho fatto il primo post, per sintetizzare,
non ho detto il vero.
Vorrei solo mettere due comandi nel menù principale
"Risoluzione 800x600" oppure "Risoluzione standard".
Sarebbe poi l'operatore a scegliere.
Ci sono diversi modi di lavorare al PC.
Alcuni tengono la risoluzione molto alta e lasciano aperti
diversi programmi contemporaneamente.
Altri (soprattutto coloro che hanno cominciato ad
utilizzare il PC dopo i 40 anni) usano un programma
per volta e gradiscono che i caratteri siano grandi.
In quest'ultimo caso mi sarebbe utile quanto descritto
senza dover fare:
Click dx sul desktop
Proprietà
Impostazioni
ecc.
Ciao Vitriol
Sauro

 ecc.
In tal caso avranno il PC impostato in quel modo, con una risoluzione
bassa.

 il codice.
Ora ho riprovato con le tue modifiche senza che
il risultato sia cambiato.
Mah.
Ciao, Sauro


Trovo particolarmente irritante chi si arroga il diritto di modificare 
le impostazioni del mio schermo e, in senso lato, del mio computer.
Va a pu##ane la posizione delle icone...
Se apro una altro programma ho risultati imprevedibili...
Un programmatore deve scrivere programmi, non modificare la risoluzione 
del mio schermo.
La soluzione è fare programmi ridimensionabili rispettando le regole 
della GUI indicate da Microsoft, senza inventarsi nulla.
Ciao cia'
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 saranno piů grandi (se imposti il pc in tale modo vedi
Beh, ma state scherzando?
Prova un po' a misurare col righello quanti millimetri
č alto un carattere sullo schermo.
Poi cambia la risoluzione e misura ancora lo stesso
carattere.
Vedrai se non č cambiato.
Ciao Andrea.
Sauro

 della GUI indicate da Microsoft, senza inventarsi nulla.
Credo sia piů importante che un programmatore
soddisfi le richieste dei propri clienti.
Se poi un programmatore, e non č il mio caso, fosse
cosě bravo da trovare soluzioni a problemi ancora non
risolti da nessuno, senza rispettare le regole Microsoft,
io potrei solo fargli i complimenti.
Ciao GbC.
Sauro

 ha scritto

nonsense. quanti millimetri *su che monitor*? io a casa uso da due anni un 
20" 1680*1050... ho 1680*1050 anche sul lap 15", dove i millimetri sono 
diversi...
mo' i 20" sono a 250e (l'ho preso per mia moglie), e stanno arrivando i 
22...
se non sai a quanti *pollici* verra' visto il tuo prog, evita giochetti con 
le risoluzioni. anzi, evitali comunque. se setto una risoluzione, ho i miei 
motivi. chiunque la pensi diversamente sta -- in senso lato -- invadendo la 
mia privacy. ben che vada, e' quasi certo che non uso il suo programma.
7 anni fa, avevo un 18" 1280, mi sono trovato un prog che si metteva 
massimizzato, non c'era pezza, e dovevo fare alt-tab per ogni copiaincolla, 
ed erano molti. per 1(una) tabella dbf. alla madre del programmatore hanno 
senz'altro fischiato le orecchie. al padre forse no, ma solo perche' agli 
atti e' ignoto.
ciao, a.

 22...
Ma allora sei misoneista solo con .NET :-D


 ciao, a.
Intendo il monitor che usi in questo momento.
Non mi interessa quanti millemetri sono alti i caratteri
prima o dopo il cambio di risoluzione.
Voglio solo che tu ti renda conto che la dimensione
cambia col cambiare della risoluzione.
Ciao Andrea.
Sauro

Scusami Andrea, ma mi sono incanalato in una
discussione sterile.
Volevo solo sapere se esisteva una istruzione VB o API
per modificare la risoluzione senza dover fare quei 5/6
click col mouse che per alcuni utenti sembrano uno sforzo
enorme.
Ciao Andrea.
Sauro


Scusa se dico una fesseria, ma sono un dilettante. Comunque funziona.
Io avevo qualche giorno fa questo problema e ho trovato il modo di adattare
il programma (800x600) alla risoluzione dello schermo, e non viceversa,
adattando sia le dimensioni del form, che dei vari oggetti, che dei font.
Certo se hai molti oggetti, la cosa è un po' lunga.(Io ho due bottoni, due
pictures e una casella testo).
Ti incollo quello che ho fatto:
Private Sub adasche_Click()Rem menu adatta schermo
f1w = Form1.Width Rem memorizza dimensioni attuali
f1h = Form1.Height
Form1.Width = Screen.Width
Form1.Height = Screen.Height
Picture1.Width = Picture1.Width * Screen.Width / f1w
Picture1.Height = Picture1.Height * Screen.Height / f1h
Command1.Top = Command1.Top * Screen.Height / f1h
Command1.Left = Command1.Left * Screen.Width / f1w
Command2.Left = Command1.Left
Command2.Top = Command1.Top
Text1.Top = Text1.Top * Screen.Height / f1h
Text1.Left = Text1.Left * Screen.Width / f1w
Form1.FontSize = Form1.FontSize * Screen.Height / f1h
Picture1.FontSize = Picture1.FontSize * Screen.Width / f1w
Picture2.Width = Picture2.Width * Screen.Width / f1w
Picture2.Height = Picture2.Height * Screen.Height / f1h
Picture2.Top = Picture2.Top * Screen.Height / f1h
Picture2.Left = Picture2.Left * Screen.Height / f1h
Form1.Move 0, 0
End Sub
In sostanza ho modificato le dimensioni e la posizione di ogni oggetto e le
dimensioni dei font in modo proporzionale al rapporto fra le vecchie
dimensioni e le nuove.
In un menu popup ho inserito una voce Adatta schermo: un click e tutto va a
posto.
Se invece metto tutto nel Form_load, va a posto automaticamente 
all'apertura.
Saluti
Franco


Copia e incolla questo codice in un form e lancia l'app.
Option Explicit
Const WM_DISPLAYCHANGE = &H7E
Const HWND_BROADCAST = &HFFFF&
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const CCDEVICENAME = 32
Const CCFORMNAME = 32
Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H4
Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1
Const BITSPIXEL = 12
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 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 Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long,
ByVal dwReserved As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal
nIndex As Long) As Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal
lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As
String, ByVal lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Dim OldX As Long, OldY As Long, nDC As Long
Sub ChangeRes(X As Long, Y As Long, Bits As Long)
Dim DevM As DEVMODE, ScInfo As Long, erg As Long, an As VbMsgBoxResult
'Get the info into DevM
erg = EnumDisplaySettings(0&, 0&, DevM)
'This is what we're going to change
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
DevM.dmPelsWidth = X 'ScreenWidth
DevM.dmPelsHeight = Y 'ScreenHeight
DevM.dmBitsPerPel = Bits '(can be 8, 16, 24, 32 or even 4)
'Now change the display and check if possible
erg = ChangeDisplaySettings(DevM, CDS_TEST)
'Check if succesfull
Select Case erg&
Case DISP_CHANGE_RESTART
an = MsgBox("You've to reboot", vbYesNo + vbSystemModal, "Info")
If an = vbYes Then
erg& = ExitWindowsEx(EWX_REBOOT, 0&)
End If
Case DISP_CHANGE_SUCCESSFUL
erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
ScInfo = Y * 2 ^ 16 + X
'Notify all the windows of the screen resolution change
SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal Bits, ByVal
ScInfo
MsgBox "Everything's ok", vbOKOnly + vbSystemModal, "It worked!"
Case Else
MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error"
End Select
End Sub
Private Sub Form_Load()
Dim nDC As Long
'retrieve the screen's resolution
OldX = Screen.Width / Screen.TwipsPerPixelX
OldY = Screen.Height / Screen.TwipsPerPixelY
'Create a device context, compatible with the screen
nDC = CreateDC("DISPLAY", vbNullString, vbNullString, ByVal 0&)
'Change the screen's resolution
ChangeRes 800, 600, GetDeviceCaps(nDC, BITSPIXEL)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'restore the screen resolution
ChangeRes OldX, OldY, GetDeviceCaps(nDC, BITSPIXEL)
'delete our device context
DeleteDC nDC
End Sub

 Ma allora sei misoneista solo con .NET :-D
no, ho solo fatto tutt'e due le cataratte a 46 anni :P
dell'hw non me ne e' mai fregata mezza. semplicemente, mi annoia. la rete di 
casa me l'ha fatta il mio sistemista, che grazie al cielo e' anche un caro 
amico. grafica esclusa, posso lavorare senza troppi problemi anche su un 
486. faccio programmini semplici, si compilano presto...
ma monitor mouse e tastiera sono la parte con cui ognuno di noi ha realmente 
a che fare ogni nanosecondo in cui la cpu lavora o cazzeggia, e per eme in 
linea di massima sono nanosecondi * 16-18h * giorno. risparmiare su quelli 
mi sembra alquanto stupido. infatti ci ho messo due mesi a abituarmi alla 
tastiera demente di questo hp.
su net il discorso e' lungo. c'entra ovviamente il pregresso, ma non solo. 
per rifare il sito dell'ufficio (se vuoi ti mando il link in privato) ho 
usato pesantemente vb. anche oggi, per una pagina, ho dovuto mettere dentro 
io i dati in un mdb, e in circa 6' ho fatto il codice che genera l'html. IN 
DAO :PP
dato che di web ne so ancora meno che di programmazione, e stavo 
rincretinendo fra accessibilita', css e immagini (*ognuna* delle circa 6500 
immagini di quel sito -- e non parlo delle 10k+ immagini di java e varie su 
sundaysw, che mi e' servito come allenamento -- l'ho passata in genere allo 
scanner, e sempre con photoshop *e* irfanview), avevo bisogno di dare per 
assodata almeno la parte linguaggio/db.
ecco, con net non ci riuscivo, semplicemente. e francamente dubito che ci 
sarebbe riuscito anche balena, dopo aver passato 10 ore su photoshop, 
cercando di fare una cosa accessibile, avendo giusto il tempo di scrivere il 
programma come pensierino per addormentarsi...
net e' piu' incasinato. se campo, mi consentira' senz'altro piu' cose, e 
almeno una incasinata per cui probabilmente mi serve meglio di vb6 ce l'ho 
in mente. ma allo stato attuale non mi sarebbe servito al benemerito tappo. 
in 6', stamattina, aspettavo che l'ide salisse, per non parlare del suo/mio 
complesso dialogo problematico e psicanalitico con sqlserver.. :P
e sul sito gli utenti sono decuplicati. bsognera' che oltre che autostitch 
io citi anche le tecnologie obsolete che uso, vb6/dao/mdb. che poi il mondo 
giri piu' veloce, vabbe', problemi suoi :)
ciao, a.

 cambia col cambiare della risoluzione.
ripeto: *e* col cambaire dei pollici. il font standard di windows, *a 
parita'* di risoluzione, e' piu' grande (in millimetri) su un 20" che su un 
15". seno' non farebbero portatili, chiamiamoli cosi', a 17" e 19"...
se qualcuno mi setta il 20" a 800*600 , il minimo che penso e' che programma 
coi piedi.
ciao, a.

Va a pu##ane la posizione delle icone...
Qui c'è rimedio, è una utility utile anche perchè se il pc dovesse partire in
modalità provvisoria poi si recupera il layout delle icone.
http://www.nthelp.com/50/save_desktop_layout.htm
--
ciao
  Stefano


http://www.nthelp.com/50/save_desktop_layout.htm
Ah, funziona anche su Xp
--
ciao
  Stefano


Condivido tutte le considerazioni fatte dagli altri intervenuti in questo
thread, relativamente all'opportunità di adattare la user interface di un
programma alla risoluzione e non viceversa.
Capisco però anche l'esigenza di fornire all'utente finale una "shortcut"
per cambiare al volo (su sua esplicità volontà) la risoluzione dello
schermo.
Ciò premesso, eccoti quindi la soluzione, fanne buon uso ;-)
http://vbnet.mvps.org/index.html?code/enums/enumdisplaychange.htm
Bye
Raf

 Condivido tutte le considerazioni fatte dagli altri intervenuti
ehm, se oltre a condividerle le leggevi anche ti risparmiavi un link :)
ciao, a.


 :) ciao, a.
Oi, stavolta arrivo proprio dopo la puzza...
Ciao Pal.
Raf

 Vedrai se non è cambiato.
Scusa, intendevo che il carattere standard è SEMPRE 96pt (mi pare), che
cambi di dimensione con la risuluzione a parità di monitor mi pare
pacifico.

 il risultato sia cambiato.
Hai de-remmato le aggiunte?
Oppure ho tralasciato io roba altrimenti. Perchè a me funziona.


http://vbnet.mvps.org/index.html?code/enums/enumdisplaychange.htm
Cosa manca al mio browser ie 5.5 
che a tale link mi compare solo la Home Page del sito ?
(non ho firewall)
mentre un mio amico riesce a piombare direttamente 
sulla pagina "enumdisplaychange.htm"  ?
Dato che ci sono,
perchč nelle pagine  aspx
come
http://technet.microsoft.com/en-us/library/ms942897.aspx
vedo solo la parte alta della pagina (logo e  qualche menu)
e non tutta la pagina?
(non ho firewall)
Dato che ci sono ancora un pň,
Google ha spostato il link 'Gruppi' 
da sopra la textbox di immissione in un sottolink accanto,
nelle pagine dei risultati uscite da una classica riceca su web?
(non ho firewall)
Cioč sono ulteriormente rincretiniti o lo fa solo a me?

 Cioč sono ulteriormente rincretiniti o lo fa solo a me?
Quello che ho notato č che adesso il link 'gruppi' nella home page di google 
mi appare in un menu a discesa posto in alto ("altro").
Bye
Raf

 Cioè sono ulteriormente rincretiniti o lo fa solo a me?
Se scarichi Opera per fare una ricerca in google gruppi, nella barra
indirizzo ti basterà scrivere "r quellochericerchi" e ti farà direttamente
la ricerca in ggruppi.