¿tienen alguna idea foreros?

| ||||
![]() 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. |
| |||
Hola. mandame tu direccion de correo y te mando una aplicacion que justo hace esto. Mi direccion es: [email protected] |
| |||
Cita: No aportéis el email, esto es un foro. Responde aquí.
Iniciado por saroaes21 Hola. mandame tu direccion de correo y te mando una aplicacion que justo hace esto. Mi direccion es: [email protected] |
| ||||
Revisa este hilo http://www.forosdelweb.com/f69/cambiar-resolucion-pantalla-272991/
__________________ ホルヘ・ラファエル・マルティネス・レオン |
| |||
Cita: Mejor en memoria, ¿no?
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) |
| ||||
![]() 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. |
| ||||
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. |
| ||||
![]() ![]() ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| |||
Cita: Comprueba dónde estás cambiando... Debe ser antes de llamar a la función que lo setea.
Iniciado por David el Grande ![]() ![]() Lo segundo es que tienes que comprobar que esa frecuencia con esa resolución y esa profundidad de color es posible... |
| |||
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 |
| ||||
![]() Cita: Realmente lo pongo antes de la función que lo "setea" y esa frecuencia es posible en mi monitor, otra idea...
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...
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
![]() 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. |
| |||
Cita: 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í.
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... |
| ||||
![]() Cita: Te aseguro que soporta esa profundidad de color, que es 32 bits.
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í. 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. |
| ||||
![]() 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. |
| |||
Cita: 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?
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... |
| ||||
Cita: Te lo explico bien, tengo mi monitor a 1024x768, quiero cambiarlo a 800x600 al entrar a mi programa.
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? 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. |
| |||
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. |
| ||||
![]() Please Translation
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Cita: Muchísimas Gracias MaxExtreme, busqué en Google el valor de la constante y finalmente me funcionó, ¡¡¡qué emoción¡¡¡¡¡¡¡
Iniciado por MaxExtreme Creo que ya sé lo que te pasa: ¿Has incluido el flag DM_DISPLAYFREQENCY en dmFields? Nos vemos... ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |