• Domingo 22 de Diciembre de 2024, 18:27

Autor Tema:  No Me Funciona Este Código  (Leído 2618 veces)

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
No Me Funciona Este Código
« en: Martes 7 de Marzo de 2006, 13:53 »
0
Hola. Qué tal amigos del foro?
Les comento que estoy tratando de lograr que el formulario principal de una aplicación que estoy desarrollando modifique su tamaño (propiedades Height y Width) y posición (Left y Top) de acuerdo a la resolución de pantalla que elija un usuario. Para este propósito utilizo un control SysInfo que detecta el momento en que se elige otra resolución de pantalla. No sé que estoy haciendo mal pero este código no me resulta, es decir, no cambia ni el tamaño del form ni cambia su posición en la pantalla. Este es el código que estoy empleando:


Código: Text
  1.  
  2. Private Sub SysInfo1_DisplayChanged()
  3.    Dim miwidth As Long
  4.    Dim miheight As Long
  5.    
  6.    Text1.Text = SysInfo1.WorkAreaTop
  7.    Text2.Text = SysInfo1.WorkAreaLeft
  8.    Text3.Text = SysInfo1.WorkAreaHeight
  9.    Text4.Text = SysInfo1.WorkAreaWidth
  10.    '
  11.    'Calculamos la resolución
  12.    miwidth = Screen.Width / 15
  13.    miheight = Screen.Height / 15
  14.    '
  15.    'esto no actualiza el tamaño del form :-S
  16.    If ((miwidth = 800) And (miheight = 600)) Then
  17.       Me.Width = SysInfo1.WorkAreaWidth
  18.       Me.Height = SysInfo1.WorkAreaHeight
  19.       Me.Left = 0
  20.       Me.Top = 0
  21.    ElseIf ((miwidth > 800) And (miheight > 600)) Then
  22.       Me.Width = (Screen.Width * 0.75) 'el ancho es el 75% del ancho de la pantalla
  23.       Me.Height = (Screen.Height * 0.75) 'el largo es el 75% de la pantalla
  24.       Me.Left = (Screen.Width - Me.Width) / 2 ' Centra el form horizontalmente
  25.       Me.Top = (Screen.Height - Me.Height) / 2 'Centra el form verticalmente
  26.    ElseIf ((miwidth < 800) And (miheight < 600)) Then
  27.       MsgBox "resolución no soportada por la aplicación"
  28.    End If
  29. End Sub
  30.  
  31.  

Alguien sabe qué está pasando? Hay una mejor manera de hacer lo que pretendo?

De antemano agradezco a todos su ayuda.


DiabloRojo

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: No Me Funciona Este Código
« Respuesta #1 en: Martes 7 de Marzo de 2006, 18:23 »
0
En mi equipo esto si funciona:
Código: Text
  1.   'Calculamos la resolución
  2.   miwidth = Screen.Width / 15
  3.   miheight = Screen.Height / 15
  4.  
Proporciona en forma correcta la resolución de pantalla.

Esto también funciona
Código: Text
  1.   ElseIf ((miwidth > 800) And (miheight > 600)) Then
  2.      Me.Width = (Screen.Width * 0.75) 'el ancho es el 75% del ancho de la pantalla
  3.      Me.Height = (Screen.Height * 0.75) 'el largo es el 75% de la pantalla
  4.      Me.Left = (Screen.Width - Me.Width) / 2 ' Centra el form horizontalmente
  5.      Me.Top = (Screen.Height - Me.Height) / 2 'Centra el form verticalmente
  6.  
Coloca la forma en el centro y al 75% del tamaño de la pantalla.

Como no proporcionas el código del control o clase "SysInfo1" no puedo decirte nada al respecto.
 :comp:

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: No Me Funciona Este Código
« Respuesta #2 en: Martes 7 de Marzo de 2006, 21:30 »
0
Hola cpmario. Gracias por tu pronta respuesta. Te comento que el control SysInfo es un activeX de VB que puedes añadir en la sección de componentes de tu proyecto. De éste sólo uso el evento DisplayChanged para averiguar la resolución que toma la pantalla y a partir de ésta hacer los cambios al form. Lamentablemente en mi equipo no funciona :( . Pienso que tal vez sea mi máquina... De cualquier forma si hay alguna sugerencia o alguien tiene algún otro modo de averiguar la resolución de la pantalla y de cambiar el tamaño del form en consecuencia le estaré muy agradecido.

Nuevamente cpmario muchas gracias por responder a este post.


DiabloRojo

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: No Me Funciona Este Código
« Respuesta #3 en: Martes 7 de Marzo de 2006, 22:37 »
0
Se puede modificar tu rutina sin usar el componente ActiveX.
Código: Text
  1.     Dim miwidth As Long
  2.     Dim miheight As Long
  3.     miwidth = Screen.Width / 15
  4.     miheight = Screen.Height / 15
  5.     If ((miwidth = 800) And (miheight = 600)) Then
  6.         Me.Width = Screen.Width
  7.         Me.Height = Screen.Height - 350
  8.         Me.Left = 0
  9.         Me.Top = 0
  10.     ElseIf ((miwidth > 800) And (miheight > 600)) Then
  11.         Me.Width = (Screen.Width * 0.75) 'el ancho es el 75% del ancho de la pantalla
  12.         Me.Height = (Screen.Height * 0.75) 'el largo es el 75% de la pantalla
  13.         Me.Left = (Screen.Width - Me.Width) / 2 ' Centra el form horizontalmente
  14.         Me.Top = (Screen.Height - Me.Height) / 2 'Centra el form verticalmente
  15.     ElseIf ((miwidth < 800) And (miheight < 600)) Then
  16.         MsgBox "resolución no soportada por la aplicación"
  17.     End If
  18.  

Te quería adjuntar un archivo ZIP con un ejemplo, pero aparece un error en el foro que dice "No puedes adjuntar este tipo de archivos" ? ignoro el motivo.....

 :comp:

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: No Me Funciona Este Código
« Respuesta #4 en: Jueves 9 de Marzo de 2006, 14:19 »
0
Hola cpmario. No había tenido tiempo para responder... con las modificaciones que me propones... se puede saber en tiempo real si el usuario a cambiado la resolución de la pantalla?

Saludos.


DiabloRojo

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: No Me Funciona Este Código
« Respuesta #5 en: Jueves 9 de Marzo de 2006, 15:51 »
0
No, pero podrías usar un control Timer para averiguarlo.

 :comp:

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: No Me Funciona Este Código
« Respuesta #6 en: Viernes 10 de Marzo de 2006, 01:49 »
0
Ok cpmario. Muchas gracias por tus comentarios pondré en práctica lo que me comentas sobre el timer.

Saludos


DiabloRojo