https://foro.gambas-es.org/viewtopic.php?f=1&t=5128&p=29999#p29999
-----------------------------------
Shell
Viernes, 29 Enero 2016, 12:04

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.

[code linenumbers=false syntax=gambas]
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
[/code]

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

Saludos


