Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Ajustar programa a resolucion de pantalla (http://www.forosdelweb.com/f69/ajustar-programa-resolucion-pantalla-399564/)

RonAraya 04/06/2006 23:57

Ajustar programa a resolucion de pantalla
 
Hola a todos

tengo una duda que creo que muchos tienen y por lo tanto podría serle de mucha ayuda
y tal vez alguien tenga la respuesta magica jeje

Como puedo adaptar mi programa hecho en resolucion 800x600 a la de 1024
y como podria el programa detectar el cambio realizado por el usuario y adaptarse a la nueva resolucion si es que el este realizo el cambio mientras el programa estaba funcionado


saludos y gracias por adelantado

RonAraya 06/06/2006 22:11

hola nadie tiene ni una idea

renga73 07/06/2006 10:51

Yo tengo la misma duda, asi q si aportan algo estaria bueno :arriba:

RonAraya 07/06/2006 12:00

hola

me comentaron de un ocx llamado resize que hace esto en vb6, alguien lo ha probado o tiene algun demos para probarlo?

salu2

renga73 07/06/2006 12:39

Ami me pasaron esto pero no me convence mucho
Codigo:
Me.Height = Screen.Height
Me.Width = Screen.Width

[EX3] 07/06/2006 16:07

Aqui os dejo un sencillo ejemplo de un programa que se puede adaptar a cualquier tamaño de la pantalla y que adapta las dimensiones de los controles que quieres segun el tamaño. Abre VB6 y create una ventana con un TextBox, un PictureBox y dentro del PictureBox añade 3 CommandButtons, un ejemplo:

http://img230.imageshack.us/img230/9392/form11ki.th.jpg

Y añade el siguiente codigo al cuerpo del formulario:
Código:

Option Explicit

Private Sub Form_Load()
    Form_Resize

End Sub

Private Sub Form_Resize()
    On Error Resume Next
    Dim btn_Width As Long

    'Tamaño y posicion del cuadro de texto:
    With Text1
        .Left = 0
        .Top = 0
        .Height = Me.Height - 750
        .Width = Me.Width - 125

    End With

    'Tamaño del contenedor de los botones:
    With Picture1
        .Left = 0
        .Top = Me.Height - Picture1.Height - 400
        .Height = 400
        .Width = Me.Width - 115

    End With

    'Anchura de los botones:
    btn_Width = Picture1.Width / 3

    'Posicion y tamaño de los botones:
    With Command1
        .Height = 400
        .Width = btn_Width - 1
        .Left = 0
        .Top = 0

    End With

    With Command2
        .Height = 400
        .Width = btn_Width
        .Left = btn_Width - 1
        .Top = 0

    End With

    With Command3
        .Height = 400
        .Width = btn_Width - 50
        .Left = (btn_Width * 2) - 10
        .Top = 0

    End With

End Sub

Este codigo hace que el TextBox se situe en la parte superior de la ventana ocupandola por completo, tenga el tamaño que tenga, inclusive maximizada, excepto un espacio abajo donde queda el PictureBox con los 3 CommandButton que mantienen una altura pero que reparten su anchura segun la anchura de la ventana. Me supongo que era esto mas o menos a lo que os referiais, si no bien queda para subirlo a la FAQ ;-)

Salu2...

RonAraya 08/06/2006 10:44

esta muy bien...

pero como calulaste cuanto restarle ya el programa que estoy haciendo tiene muchos botones,labels..?

si coloco todos los controles dentro de un picturebox me es más sencillo o es igual

gracias

[EX3] 09/06/2006 23:44

Cita:

Iniciado por RonAraya
pero como calulaste cuanto restarle ya el programa que estoy haciendo tiene muchos botones,labels..?

El codigo tiene ya un par de años y no recuerdo, pero asi a simple vista creo que fue mediante metodo 'prueba-error'. Esas restas son para corregir problemas de la posicion que devuelven las propiedades Width y Height del formulario, que contabilizan los bordes, barra de menus y barra de titulo asi como cualquier otro elemento fuera del area de cliente de la ventana, area sobre la que realmente trabajamos con los controles. En su momento no tuve necesidad y no me rebane mucho la cabeza, todo sea dicho jeje

Cita:

Iniciado por RonAraya
si coloco todos los controles dentro de un picturebox me es más sencillo o es igual

No seria necesario tampoco. Aqui tienes el mismo ejemplo pero algo mas optimizado y claro y que no usa PictureBox:
Código:

Option Explicit

Private Const ButtonHeight As Integer = 32 'Altura de los botones.

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
   
End Type

Private Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Dim CltRct As RECT

Private Sub Form_Load()
    Me.ScaleMode = 3 'Pasamos la escala a Pixeles.
    Form_Resize

End Sub

Private Sub Form_Resize()
    On Error Resume Next
   
    Dim btn_Width As Long, i As Integer
   
    'Obtenemos las dimensiones del area de cliente de la ventana:
    Call GetClientRect(Me.hwnd, CltRct)

    'Tamaño y posicion del cuadro de texto:
    With Text1
        .Left = 0
        .Top = 0
        .Height = CltRct.Bottom - ButtonHeight
        .Width = CltRct.Right

    End With

    'Anchura de los botones:
    btn_Width = CltRct.Right / 3

    'Posicion y tamaño de los botones:
    For i = 0 To Command1.UBound
        With Command1(i)
            .Height = ButtonHeight
            .Width = btn_Width
            .Left = btn_Width * i
            .Top = CltRct.Bottom - ButtonHeight

        End With
   
    Next i

End Sub

Oviamente este codigo estaria hecho a medida. No se como tendras dispuesto tus controles en tu ventana pero podrias hacer algo similar y si los grupos de controles los tienes como arrays de controles (como en esta modificacion del ejemplo anterior) te seria mas facil aplicar sencillas formulas para aplicar los cambios. Todo es cuestion de estudiar el caso de tu programa.

Tengo que preguntar en los foros de CanalVisualBasic.Net que hace tiempo uno de los compañeros subio un codigo propio que mediante una sola llamada reescalaba los controles de un formulario aunque creo que de forma unificada, osea, una escala global a todos los controles a la contra de este ejemplo, que escala 'al gusto' los controles segun lo necesites. Te diria que lo buscaras en la Guia de Recursos de CVB.NET pero como se perdieron recientemente muchos mensajes en el foro creo que ese codigo ya no esta, asi que le preguntare al autor si aun lo conserva y de ser asi te paso enlace con el recurso. De momento este metodo es lo unico que puedo proporcionarte ;-)

Salu2...


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.