Visual Basic - Resolucion de Pantalla

Life is soft - evento anual de software empresarial
 
Vista:

Resolucion de Pantalla

Publicado por Aki (6 intervenciones) el 13/09/2006 12:42:26
Hola a todos y gracias si alguien puede echarme una manilla en este pequeño problemilla

La cuestion es la siguiente con Windows cada usuario es libre de poner la resolucion de pantalla que mas les gusta, unos ponen 800x600 pixeles(porque a mi me gusta ver las cosas grandes) otros 1024x768 (porque yo las quiero ver pequeñas) y otros pues lo que pueden o le dejan, la cuestion es que cada usuario poner el ordenaor a su gusto.

Y mi problema biene con las aplicaciónes que tengo echas, pues los formularios yo los acoplo con mi ordenador y mi resolucion, pero cuando lo instalo en los clientes aqui esta el problemas pues en ocasiones me paso y hay botones que no se ven o al contrario el cliente tiene una resolucion muy pequeña y los formularios se ven pequeños.

He intentado que atraves de un campo en la base de datos guardar el tamaño de los formularios(Form1,Height, width), correcto el formulario se grande o pequeño de pendiendo de los valores que toma del campo de la base de datos, pero lo que no consigo es que los botones,texbox, imagenes se muevan.

En pocas palabras la cuestion es que dependiendo de la resolucion que tenga el cliente en su pantalla, mi programa se abra en toda la pantalla sea grande o pequeña y los formularios, botones, texbox etc. se acoplen a dicha resolucion.

Si alguien puede echarme una manilla se lo agradeceria mucho.
Saluos
Aki
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Resolucion de Pantalla

Publicado por ivan (1039 intervenciones) el 13/09/2006 21:03:56
En mi caso muy particular hago el proyecto para una resolución en específico, anteponiendo una leyenda al inicio del mismo...

"Para mejor funcionamiento del Sistema _______ se recomienda una resolución de ______"

Pero si insistes en cambiar los tamaños de los controles, revisa si acaso encuentras algún ejemplo en algunos de estos sitios.... creo que había un ejemplo que redimensionaba los controles ante el evento Form_Resize

http://www.canalvisualbasic.net/modulos/ocx.asp
Revisa los links de la sección CODIGO FUENTE (BBDD, Disco, Ficheros...)

http://www.mygnet.com/codigos/vb/

SUERTE....!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Pantalla

Publicado por A (6 intervenciones) el 14/09/2006 17:53:54
Gracias Ivan, lo bueno que hay en estas cosas es que hay gente como tu que por lo menos te da una pequeña pista para solucionar los problemas, y coger unas ideas que te pueden valer, pero la solucion la he encontrado realizando una consulta en este mismo foro viendo si alguien habia echo la misma pregunta y la verdad es que si.
y la cuestion esta en modificar la resolucion del Windows, viendo unas respuestas y otras he conseguido mas o menos hacer algo que me pueda valer.
Saludos. y muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Pantalla

Publicado por Lisbeth (5 intervenciones) el 14/09/2006 23:55:22
Como a mí me gusta siempre tener el control de las cosas en la programación y además estar al día con los adelantos tecnológicos, pongo a la disposición esta rutina que me funciona muy bien.

----------------------------------------------------------------------------------------------------------------
En el módulo principal:

' Para cambiar la resolución de la pantalla.
Public Monitor As New CambioDePantalla

' Variables públicas para cambio de configuración del monitor.
Public bCambiarMonitor As Boolean
Public Indice1 As Long, Indice2 As Long

----------------------------------------------------------------------------------------------------------------
En el Sub Main:

'Al entrar:
x = Screen.Width / 15
y = Screen.Height / 15

If x <> 800 And y <> 600 Then ' Aquí se juega con la configuración a la que uno
' quiere cambiar.
frmConfiguracionDeMonitor.Show vbModal
Set frmConfiguracionDeMonitor = Nothing

If Not bCambiarMonitor Then
End
End If

End If

'Antes de salir de la aplicación.
Monitor.fRestaurarModo
Set Monitor = Nothing
End

----------------------------------------------------------------------------------------------------------------
' Formulario para solicitar el cambio de configuracion del monitor.

frmConfiguracionDeMonitor
Option Explicit

Private Sub Form_Load()
bCambiarMonitor = False
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = 27 Then
cmdCancelar_Click
End If

End Sub

Private Sub cmdAceptar_KeyPress(KeyAscii As Integer)

If KeyAscii = 27 Then
cmdCancelar_Click
End If

End Sub

Private Sub cmdAceptar_Click()
bCambiarMonitor = True
fCambiarMonitor
Unload Me
End Sub

Private Sub cmdCancelar_KeyPress(KeyAscii As Integer)

If KeyAscii = 27 Then
cmdCancelar_Click
End If

End Sub

Private Sub cmdCancelar_Click()
bCambiarMonitor = False
Unload Me
End Sub

Sub fCambiarMonitor()
Dim psi As Long

Monitor.fRutinaInicial frmConfiguracionDeMonitor.hdc
Monitor.fModoInicial 0, 0, 0, psi
Monitor.fCambiarModo Indice2
End Sub

Este formulario es pequeño y tiene dos Label:
uno dice:
"La configuración del monitor se va a cambiar para ESTA APLICACIÓN
y se restaurará al salir de la misma."
el otro dice:
"Si quiere continuar haga click en Aceptar, o en Cancelar para salir."

y tiene dos botones:
uno para ACEPTAR y el otro para CANCELAR.

----------------------------------------------------------------------------------------------------------------
' Módulo de clase para el cambio de configuración del monitor.

CambioDePantalla
Option Explicit

' Declaración de Funciones API a usar.
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" _
(lpDevMode As Any, ByVal dwFlags As Long) As Long

' API para saber los formatos de resoluciones posibles.
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" _
(ByVal lpszDeviceName As Long, ByVal iModeNum As Long, _
lpDevMode As DEVMODE) As Boolean

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Const BITSPIXEL = 12

' Flags para cambiar resoluciones.
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H2
Const CDS_FULLSCREEN = &H4
Const CDS_GLOBAL = &H8
Const CDS_SET_PRIMARY = &H10
Const CDS_RESET = &H40000000
Const CDS_SETRECT = &H20000000
Const CDS_NORESET = &H10000000

' Valores retornados por ChangeDisplaySettings.
Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1
Const DISP_CHANGE_FAILED = -1
Const DISP_CHANGE_BADMODE = -2
Const DISP_CHANGE_NOTUPDATED = -3
Const DISP_CHANGE_BADFLAGS = -4
Const DISP_CHANGE_BADPARAM = -5

' Valores usados en EnumDisplaySettings.
Const ENUM_CURRENT_SETTINGS As Long = -1&
Const ENUM_REGISTRY_SETTINGS As Long = -2&

Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
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 * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

' Matriz para guardar los formatos disponibles.
Dim ScrMode() As DEVMODE
Dim NumModes As Long

' Variables para guardar la configuración actual.
Dim lBits As Long, lWidth As Long, lHeight As Long

' Variables para guardar la configuración nueva.
Dim lBitsNva As Long, lWidthNva As Long, lHeightNva As Long

Private Flg As Boolean

Public Sub fRutinaInicial(hdcFrm As Long)
Dim hdc As Long
Dim i As Long
Dim a As Long
Dim s As String

' Se debe pasar el Hdc del Form que llama a la clase.
' Tomamos la configuración inicial del video.
hdc = hdcFrm
lBits = GetDeviceCaps(hdc, BITSPIXEL)
lBitsNva = lBits
lWidth = Screen.Width \ Screen.TwipsPerPixelX
lHeight = Screen.Height \ Screen.TwipsPerPixelY

' Cargamos los posibles modos.
ReDim Preserve ScrMode(0) As DEVMODE
i = 0

Do
a = EnumDisplaySettings(0&, i, ScrMode(i))
i = i + 1

If a Then
ReDim Preserve ScrMode(i) As DEVMODE

If ScrMode(i - 1).dmBitsPerPel = lBitsNva And _
ScrMode(i - 1).dmPelsWidth = 800 And _
ScrMode(i - 1).dmPelsHeight = 600 Then
lWidthNva = ScrMode(i - 1).dmPelsWidth
lHeightNva = ScrMode(i - 1).dmPelsHeight
Indice2 = i - 1
End If

If lBits = ScrMode(i - 1).dmBitsPerPel And _
lWidth = ScrMode(i - 1).dmPelsWidth And _
lHeight = ScrMode(i - 1).dmPelsHeight Then
Indice1 = i - 1
End If

End If

Loop While a

NumModes = i - 1
Flg = True
End Sub

Public Sub fModoInicial(SAncho As Long, SAlto As Long, bits As Long, PosArray As Long)

' Devuelve las medidas del video inicial.
If Flg = False Then Exit Sub

SAncho = ScrMode(Indice1).dmPelsWidth
SAlto = ScrMode(Indice1).dmPelsHeight
bits = ScrMode(Indice1).dmBitsPerPel
PosArray = Indice1
End Sub

Public Function fCambiarModo(Index As Long) As Long
Dim flags As Variant
Dim Cdv As Long

'Cambia la resolución de acuerdo a la posición de la matriz pasada en Index.
If Flg = False Then Exit Function

If Index < 0 Or Index > NumModes Then
fCambiarModo = 255
Exit Function
End If

ScrMode(Index).dmFields = DM_BITSPERPEL Or DM_PELSWIDTH Or DM_PELSHEIGHT
flags = CDS_UPDATEREGISTRY
Cdv = ChangeDisplaySettings(ScrMode(Index), flags)
fCambiarModo = Cdv

' Valores devueltos en fCambiarModo.
' 0 = Cambio realizado.
' 1 = Debe reiniciar para ver los cambios.
' -1 = Error al realizar el cambio.
End Function

Public Function fRestaurarModo() As Long
' Restaura la resolución, dejando la configuración
' original cuando se creó la clase.
If Flg = False Then Exit Function

fRestaurarModo = fCambiarModo(Indice1)
End Function
----------------------------------------------------------------------------------------------------------------

Si no se me olvida algo, creo que es todo lo que hay que hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar