Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Cambiar Resolucion de Pantalla

Estas en el tema de Cambiar Resolucion de Pantalla en el foro de Visual Basic clásico en Foros del Web. Quiero que cuando se entre en mi programa cambie la resolución a 800x600 pero manteniendo 32bits en colores, y que cuando se salga de mi ...
  #1 (permalink)  
Antiguo 23/05/2005, 16:46
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Cambiar Resolucion de Pantalla

Quiero que cuando se entre en mi programa cambie la resolución a 800x600 pero manteniendo 32bits en colores, y que cuando se salga de mi programa restablezca la resolución.

¿tienen alguna idea foreros?

__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #2 (permalink)  
Antiguo 24/05/2005, 01:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 9
Antigüedad: 19 años, 1 mes
Puntos: 0
Hola. mandame tu direccion de correo y te mando una aplicacion que justo hace esto. Mi direccion es: [email protected]
  #3 (permalink)  
Antiguo 24/05/2005, 05:58
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por saroaes21
Hola. mandame tu direccion de correo y te mando una aplicacion que justo hace esto. Mi direccion es: [email protected]
No aportéis el email, esto es un foro. Responde aquí.
  #4 (permalink)  
Antiguo 24/05/2005, 06:35
Avatar de vbx3m  
Fecha de Ingreso: febrero-2005
Ubicación: Venezuela
Mensajes: 524
Antigüedad: 19 años, 3 meses
Puntos: 1
Revisa este hilo http://www.forosdelweb.com/f69/cambiar-resolucion-pantalla-272991/
__________________
ホルヘ・ラファエル・マルティネス・レオン
  #5 (permalink)  
Antiguo 24/05/2005, 07:07
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 3 meses
Puntos: 1
Al entrar al programa, puedes grabar en un fichero .ini, modificar la resolucion con el hilo que te puso vbx3m y al salir volver a modificar la resolucion leyendo del .ini

(funcion readini ) (API)
  #6 (permalink)  
Antiguo 24/05/2005, 07:27
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por izar
Al entrar al programa, puedes grabar en un fichero .ini, modificar la resolucion con el hilo que te puso vbx3m y al salir volver a modificar la resolucion leyendo del .ini

(funcion readini ) (API)
Mejor en memoria, ¿no?
  #7 (permalink)  
Antiguo 24/05/2005, 10:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Hay un problema

Hay un problema en el código de vbxm3. Ya que él no solo cambia la Resolución sino la frecuencia del monitor. El mío está a 85 hercios y cuando lo cambio con el código me queda a 60 hercios.

¿Alguna idea?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 24/05/2005, 10:26
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
¿Tal vez simplemente cambiando dmDisplayFrequency?
  #9 (permalink)  
Antiguo 24/05/2005, 10:28
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Gracias por todo

Gracias por todo foreros y nos vemos en los otros posts

__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 24/05/2005, 10:29
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por David el Grande
Gracias por todo foreros y nos vemos en los otros posts

De nada ;)
  #11 (permalink)  
Antiguo 28/05/2005, 07:57
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Ahora tengo otro problema...

le puse al dmDisplayFrecuency el valor 85 pero me continua con los 60 hercios al cambiar la resolución, mas alguna idea?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 28/05/2005, 12:15
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por David el Grande
le puse al dmDisplayFrecuency el valor 85 pero me continua con los 60 hercios al cambiar la resolución, mas alguna idea?
Comprueba dónde estás cambiando... Debe ser antes de llamar a la función que lo setea.

Lo segundo es que tienes que comprobar que esa frecuencia con esa resolución y esa profundidad de color es posible...
  #13 (permalink)  
Antiguo 28/05/2005, 14:20
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
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()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]
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 640, 480, 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
  #14 (permalink)  
Antiguo 28/05/2005, 16:48
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
LeandroA, por favor, para de pegar códigos... Y menos sacados de un programa de recopilación de ejemplos.
  #15 (permalink)  
Antiguo 30/05/2005, 15:19
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación

Cita:
Iniciado por MaxExtreme
Comprueba dónde estás cambiando... Debe ser antes de llamar a la función que lo setea.

Lo segundo es que tienes que comprobar que esa frecuencia con esa resolución y esa profundidad de color es posible...
Realmente lo pongo antes de la función que lo "setea" y esa frecuencia es posible en mi monitor, otra idea...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 07/06/2005, 11:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta

Alguien tiene alguna idea de cómo cambiar la frecuencia de actualización de pantalla que ese problema ya me está fastidiando, si alguien tiene una idea, su ayuda será bienvenida...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #17 (permalink)  
Antiguo 07/06/2005, 12:20
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por David el Grande
Alguien tiene alguna idea de cómo cambiar la frecuencia de actualización de pantalla que ese problema ya me está fastidiando, si alguien tiene una idea, su ayuda será bienvenida...
No tengo tiempo para probarlo, pero te repito que tu monitor DEBE poder soportar la frecuencia. Pero no sólo la frecuencia, sino ÉSA frecuencia con ÉSA resolución y ÉSA profundidad de color... Por ejemplo mi monitor con 1600x1200 y 32 bits no puede con los 100Hz que llega el monitor. Con resoluciones más bajas sí.
  #18 (permalink)  
Antiguo 07/06/2005, 13:45
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación

Cita:
Iniciado por MaxExtreme
No tengo tiempo para probarlo, pero te repito que tu monitor DEBE poder soportar la frecuencia. Pero no sólo la frecuencia, sino ÉSA frecuencia con ÉSA resolución y ÉSA profundidad de color... Por ejemplo mi monitor con 1600x1200 y 32 bits no puede con los 100Hz que llega el monitor. Con resoluciones más bajas sí.
Te aseguro que soporta esa profundidad de color, que es 32 bits.
También, te aseguro que soporta esa frecuencia, 85 hercios

Lo que pasa no es que no cambie la resolución, y no es que me ponga a 16 bits, sino el problema es que la frecuencia se queda a 60 hercios...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #19 (permalink)  
Antiguo 09/06/2005, 12:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta

Bueno, tal vez no con esta API, pero alguien sabe por lo menos cualquier método de cambiar la frecuencia del monitor?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #20 (permalink)  
Antiguo 09/06/2005, 13:47
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por David el Grande
Te aseguro que soporta esa profundidad de color, que es 32 bits.
También, te aseguro que soporta esa frecuencia, 85 hercios

Lo que pasa no es que no cambie la resolución, y no es que me ponga a 16 bits, sino el problema es que la frecuencia se queda a 60 hercios...
Sigues sin entederme... Tiene que soportar todo eso A LA VEZ... Es evidente que tu monitor soporta 32 bbp y 85 hz.... ¿Qué resolución estás mandando?
  #21 (permalink)  
Antiguo 09/06/2005, 14:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Cita:
Iniciado por MaxExtreme
Sigues sin entederme... Tiene que soportar todo eso A LA VEZ... Es evidente que tu monitor soporta 32 bbp y 85 hz.... ¿Qué resolución estás mandando?
Te lo explico bien, tengo mi monitor a 1024x768, quiero cambiarlo a 800x600 al entrar a mi programa.
Cuando cambio en las propiedades de pantalla, me queda con la sgte. configuración:
800x600
32 bits
85 HZ (lo cual indica que sí soporta todo a la vez)

Pero cuando cambio con el código (por más que ponga a 85 el dmDisplayFrecuency) me queda así:
800x600
32 bits
60HZ

Espero me ayudes con esto...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #22 (permalink)  
Antiguo 09/06/2005, 14:16
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Mañana por la tarde viernes, dentro de unas 17 horas pruebo con mi monitor algunas configuraciones, editaré este post, ahora tengo que marchar.
  #23 (permalink)  
Antiguo 09/06/2005, 14:19
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Creo que ya sé lo que te pasa: ¿Has incluido el flag DM_DISPLAYFREQENCY en dmFields?

Cita:
· lpDevMode
Pointer to a DEVMODE structure that describes the graphics mode to switch to. The dmSize member must be initialized to the size, in bytes, of the DEVMODE structure. The following fields in the DEVMODE structure are used:
dmBitsPerPel
Bits per pixel
dmPelsWidth
Pixel width
dmPelsHeight
Pixel height
dmDisplayFlags
Mode flags
dmDisplayFrequency
Mode frequency

In addition to setting a value in one or more of the preceding DEVMODE members, you must also set the appropriate flags in the dmFields member. The flags indicate which members of the DEVMODE structure are used for the display settings change. If the appropriate bit is not set in dmFields, the display setting will not be changed. Set one or more of the following flags:
DM_BITSPERPEL
Use the dmBitsPerPel value.
DM_PELSWIDTH
Use the dmPelsWidth value.
DM_PELSHEIGHT
Use the dmPelsHeight value.
DM_DISPLAYFLAGS
Use the dmDisplayFlags value.
DM_DISPLAYFREQENCY
Use the dmDisplayFrequency value.
  #24 (permalink)  
Antiguo 09/06/2005, 14:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Información

Please Translation
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #25 (permalink)  
Antiguo 09/06/2005, 14:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Cita:
Iniciado por MaxExtreme
Creo que ya sé lo que te pasa: ¿Has incluido el flag DM_DISPLAYFREQENCY en dmFields?
Muchísimas Gracias MaxExtreme, busqué en Google el valor de la constante y finalmente me funcionó, ¡¡¡qué emoción¡¡¡¡¡¡¡
Nos vemos...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:54.