Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
Limitar El Tamaño Del Formulario A Unos Limtes
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Limitar El Tamaño Del Formulario A Unos Limtes 
 
Buenos días!.

Viendo otros ejemplos de Tkinter de Python, comprobé que el formulario se puede limitar a un tamaño, tanto el horizontal
como el vertical. Evitando que el usuario pueda cambiar el tamaño del formulario y no salirse de esos limites.

Todo eso aplicado a un máximo y un mínimo. Por ejemplo queremos un formulario mínimo de 200 x 200 y un máximo de 640 x 480.
En el caso de Python, no es necesario de deshabilitar el botón de restablecer la ventana. ( Resizable ).

Quiero hacer lo mismo en gambas  En este ejemplo he usado los limites máximos, no los mínimos.
He hecho uso de un temporizador y un observador. Después de salirse de los limites, pasado un tiempo se activa el botón de restablecer ventana,
pudiéndose volver a cambiar el tamaño dentro de los limites. También hay una salida de texto en consola para que se vea como va.

El efecto de la aparición del botón es raro. No es algo instantáneo. Pero cambia el estado a resizable, puede que no sea tan rápido de captar.

Private Const maxancho As Integer = 640
Private Const maxalto As Integer = 480
Private fueradelimites As Boolean

Private observador1 As New Observer(Me) As "observaformulario"

Private temporizador As New Timer As "Reloj"
Private contador As Integer

Public Sub Form_Open()
  'Fijamos el retardo del temporizador  
  temporizador.Delay = 200
  'Fijamos el contador a 1
  contador = 1
  
End

Public Sub observaformulario_Resize()
  
  Print "Estoy en el observador del formulario"
  
  If Me.Height > maxalto And Me.Width <= maxancho Then
    Me.Height = maxalto    
    fueradelimites = True
  Else If Me.Width > maxancho And Me.Height <= maxalto Then
    Me.Width = maxancho
    fueradelimites = True  
  Endif  
  
  ' Si el tamaño es superior a los limtes..
  If fueradelimites Then
    Me.Resizable = False          
    temporizador.Start  
  Endif
    
  'Salimos del evento para que no se ejecute y solo lo haga el del observador  
  Stop Event    
  
End

Public Sub Form_Resize()
  
  ' Aquí no llega nunca
  Print "Estoy en el evento del formulario"
  
End

Public Sub Reloj_Timer()
  
  'Si contador es mayor de 5. Mas o menos un segundo 5 * 200mS
  If contador > 5 Then
    'Paramos el temporizador
    temporizador.Stop
    'Ponemos el contador a 1
    contador = 1
    'Activamos para que se pueda cambiar el tamaño
    Me.Resizable = True        
    'Estamos dentro de los limites
    fueradelimites = False
  Else
    'Mostramos el valor de contador  
    Print contador
    'Incrementamos el valor del contador en 1
    contador += 1
  Endif
  
End
 


Os subo el código para que lo veáis en vuestro pc.

Saludos

LimitarTamaVentana.tar.gz
Descripción:  
Descargar
Nombre del archivo: LimitarTamaVentana.tar.gz
Tamaño: 12.74 KB
Descargado: 17 veces
LimitarTamaVentana.tar.gz
Descripción:  
Descargar
Nombre del archivo: LimitarTamaVentana.tar.gz
Tamaño: 12.74 KB
Descargado: 17 veces
LimitarTamaVentana.tar.gz
Descripción:  
Descargar
Nombre del archivo: LimitarTamaVentana.tar.gz
Tamaño: 12.74 KB
Descargado: 17 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 01 Febrero 2016, 10:01; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Shell:

Private observador1 As New Observer(Me) As "observaformulario"

...
...
Public Sub observaformulario_Resize()
....
....



El mismo formulario tiene el evento:  Form_resize() que detecta el cambio que haga el usuario del tamaño, y alli le puedes poner el código de la limitación del tamañom. No hace falta que crees el observador
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Julio:

Citar:

El mismo formulario tiene el evento:  Form_resize() que detecta el cambio que haga el usuario del tamaño, y alli le puedes poner el código de la limitación del tamañom. No hace falta que crees el observador


Si, hacen la misma función. Solo que sin ese temporizador no pude cambiar el estado de resizable a True,
para que vuelva al estado inicial la ventana y sea modificable su tamaño dentro de los limites.

Quedando de está forma:
Public Sub Form_Resize()
  
  If Me.Height > maxalto And Me.Width <= maxancho Then
    Me.Height = maxalto    
    fueradelimites = True
  Else If Me.Width > maxancho And Me.Height <= maxalto Then
    Me.Width = maxancho
    fueradelimites = True  
  Endif  
  
  ' Si el tamaño es superior a los limites..
  If fueradelimites Then
    Me.Resizable = False          
    temporizador.Start  
  Endif
  
End
 


Se le podría agregar un wait, pero hay que tener "tino" para acertar con el tiempo adecuado.
Public Sub Form_Resize()
 .........
  ' Si el tamaño es superior a los limtes..
  If fueradelimites Then
    Me.Resizable = False          
    'temporizador.Start  
    Wait 0.5
    Me.Resizable = True
  Endif
  
End
 


Wait no provoca buen efecto...salta..
Siempre prefiero usar un Timer, mejor que usar Wait.

En Python usando Tkinter es de esta forma:

from tkinter import *
ventana= Tk()

# Ancho x alto y la separación de los bordes izquierdo y superior de la pantalla
ventana.geometry('640x480+100+150')
ventana.title('Ajusta mis dimensiones')
ventana.maxsize(640, 480)
ventana.minsize(200, 200)

ventana.mainloop()

 


Como ves es sencillo, choca al principio como crea las dimensiones de la ventana. Es una cadena.
En este caso el código de gambas es todo el código del ejemplo, en el de Python, usa clases y métodos.
Abreviando mucho. Lo que es la POO.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 29 Enero 2016, 14:26; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Creo que es más simple:

Public Sub Form_Resize()

  If Me.Width > 400 Then Me.width = 400
  If Me.Height > 200 Then Me.Height = 200
  If Me.Width < 200 Then Me.width = 200
  If Me.Height < 100 Then Me.Height = 100
 
End


No hay por qué cambiar lo de resizable. El efecto en pantalla es gracioso (No confundir el formulario con la ventana que lo contiene)
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Shordi:

Si tu cambias el tamaño del formulario sobrepasando los limites, ves como el formulario se agranda con el botón izquierdo pulsado y sin soltarlo.
La idea es que no pueda visualmente el formulario cambiarse mas allá de los limites. El efecto muelle es otra cosa.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Citar:
Si tu cambias el tamaño del formulario sobrepasando los limites, ves como el formulario se agranda con el botón izquierdo pulsado y sin soltarlo.

No. Ves la ventana contenedora del formulario sobrepasando los límites. El formulario deja de expandirse o contraerse al alcanzar el límite. Al soltar el ratón, la ventana se ajusta y hace el muelle.
Tal vez no es lo que buscas pero es lo mismo. La única razón para limitar el tamaño de un formulario es o bien que no tape algo que hay detrás o bien que no oculte algo que hay dentro. La solución que aporto soluciona ambos casos. El resto es sólo estética... dudosa (me gustan los muelles)     
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Shordi:

Siendo el mismo sistema operativo, no veo por que  no deberían hacer el mismo efecto dos lenguajes distintos.  Siendo cosas tan comunes.  
En el ejemplo se estudiaba la creación de dos ventanas y se hacían operaciones con ellas. Se superponían, se cambiaba el orden como se veían,
temas comunes que a veces ni nos fijamos. Ni vamos directamente a ello, lo hacemos sin pensarlo, mientras usamos las ventanas.

Otra cosa es que quieras algo concreto. Si tienes ventanas dentro una de otras y quieres una distribución de las mismas dentro de la principal,
entonces si se debe conocer el comportamiento de las ventanas.

Comprendo que cada lenguaje tiene sus maneras de hacer las cosas y los programadores a veces nos obsesionamos con hacer las cosas de la misma
forma, cuando puede haber otra maneras de llegar al mismo resultado.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Creo que hemos visto esto ya una vez.

Cuestión: Tengo una ventana1 y una ventana2 dentro de ventana1. ¿ Puede la ventana2 recibir eventos ?.
¿ Por qué no puedes cambiar el tamaño de la ventana2 con el ratón ?.
¿ Por qué no vemos el titulo de la ventana2 ?.  

 ventana1

Con un proyecto de consola, usamos el componente gb.qt4 o gb.gui.qt4.

Código:
Public Sub Main()
  
  Dim ventana1, ventana2 As Window
  
  ventana1 = New Window As "hventana1"
  With ventana1
    .Caption = "Ventana1"  
    .Width = 200
    .Height = 200
    .Background = Color.LightGray
    .Show()
  End With  
  
  ventana2 = New Window(ventana1) As "hventana2"
  With ventana2
    .Caption = "Ventana2"  
    .Width = 100
    .Height = 100
    .Background = Color.Blue
    .Show()
  End With  
  
End


Public Sub hventana1_MouseDown()
  
  Print "Has hecho click dentro de la ventana1"
  
End

Public Sub hventana2_MouseDown()
  
  Print "Has hecho click dentro de la ventana2"
  
End
 


¿ Qué nos dirá si hacemos clic dentro de la ventana 2 ?.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Sabado, 30 Enero 2016, 11:41; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Pues dirá: "Has hecho click dentro de la ventana2".

No sé a dónde vas, pero deberías sacarlo a un hilo nuevo, que esto no tiene nada que ver con lo del tamaño.   
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Limitar El Tamaño Del Formulario A Unos Valores 
 
Volviendo al tema original:
Citar:
Siendo el mismo sistema operativo, no veo por que no deberían hacer el mismo efecto dos lenguajes distintos. Siendo cosas tan comunes.


Prueba ésto:
Public Sub Form_Resize()

  If Me.Width > 400 Then
      Me.width = 400
      Paratamanio()
  Endif
  If Me.Height > 200 Then
      Me.Height = 200
      Paratamanio()
  Endif
  If Me.Width < 200 Then
      Me.width = 200
      Paratamanio()
  Endif
  If Me.Height < 100 Then
      Me.Height = 100
      Paratamanio()
  Endif
  
End

Private Sub Paratamanio()
  
      Me.Resizable = False
      Wait 0.1
      Me.Resizable = True  
  
End

 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes WebBrowser A Tamaño Del Formulario loganz General 10 Jueves, 29 Abril 2010, 09:18 Ver último mensaje
pablo_jesus
No hay nuevos mensajes Limitando El Tamaño De Nuestro Formulario... v3ctor General 1 Domingo, 19 Julio 2015, 13:46 Ver último mensaje
vuott
No hay nuevos mensajes Ajustar Tamaño Del Formulario. Shell General 4 Martes, 09 Febrero 2016, 19:34 Ver último mensaje
Shell
No hay nuevos mensajes Cambio De Tamaño Del Formulario A Tirones Shell General 4 Miercoles, 18 Enero 2017, 09:43 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 3
Ir a la página 1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron