https://foro.gambas-es.org/viewtopic.php?f=1&t=5903
-----------------------------------
Shell
Sabado, 29 Octobre 2016, 20:22

Diferencias Entre Gb.gui Y Gb.qt. Coordenadas
-----------------------------------
Hace poco estuve viendo un ejemplo que hice en Febrero del 2016.
En el ejemplo heredaba un DrawingArea y le daba unas propiedades, métodos, etc, etc.

Luego tenía un formulario que se encargaba de mostrar en distintos formularios el mismo control.
Bien, he creado un ejemplo aquí que reproduce el problema, aunque no sea el mismo ejemplo.
Gracias a el , he resuelto el "misterio".  :roll: 

Fijaros, tengo esto:

Una clase Lienzo:

[code linenumbers=false syntax=gambas]
Inherits DrawingArea

Public Sub _new()
  
  With Me
    ' .x = 0
    ' .y = 0
    .w = 300
    .H = 300
    .Border = Border.Sunken
  End With
  
End
[/code]

( Luego os explico por que he comentado la coordenada de posición ).

Un formulario que carga distintos formularios para mostrar distintas instancias de lo mismo.

[code linenumbers=false syntax=gambas]
Public Sub Form_Open()


End

Public Sub btnCrear_Click()

Dim unformulario As FormLienzo

unformulario = New FormLienzo
unformulario.Show()  

End
[/code]

El formulario donde voy a mostrar el DrawingArea:

[code linenumbers=false syntax=gambas]
Public Sub Form_Open()

  Dim unareadibujo As New Lienzo(Me) As "hdibujo"
   
  With Me
    .W = unareadibujo.w
    .H = unareadibujo.H
  End With
  
End
[/code]

Os relato el problema. Como habéis podido comprobar no le dicho donde tiene que situar el DrawingArea en el formulario formLienzo.
Pues bien.

Esto ocurre si uso gb.gui:

 [img]https://foro.gambas-es.org/files/images/768/con_gb_gui.png[/img] 

Por defecto ha tomado para el control DrawingArea, la posición x = 0 e y = 0.
En cambio fijaros que pasa si selecciono que quiero: gb.gui.qt

 [img]https://foro.gambas-es.org/files/images/768/con_gbguiqt.png[/img] 

Aunque el código es el mismo para ambas librerías gráficas, la posición del control se pierde si no se le especifica en el código usando gb.gui.qt.
Si voy a la clase Lienzo y especifico las propiedades: x = 0 e y = 0, no tengo problemas usando gb.gui.qt

Os subo el código para que podáis probarlo. :-)


-----------------------------------
shordi
Sabado, 29 Octobre 2016, 23:02

Re: Diferencias Entre Gb.gui Y Gb.qt. Coordenadas
-----------------------------------
Por lo que veo no es que se pierda es que toma como referencia el borde de la ventana, no del formulario...
Salvo necesidad imperiosa, creo que es primitivo y poco eficaz especificar a capón ubicaciones y tamaños. Nunca sabes qué definición va a tener el usuario en su máquina ni qué tamaño de escritorio ni nada. cambia esas dos instrucciones por un expand=true y punto.

Saludos


-----------------------------------
Shell
Domingo, 30 Octobre 2016, 10:53

Re: Diferencias Entre Gb.gui Y Gb.qt. Coordenadas
-----------------------------------
Shordi:

[quote]
Por lo que veo no es que se pierda es que toma como referencia el borde de la ventana, no del formulario...
[/quote]
Vaya.

[quote]
Salvo necesidad imperiosa, creo que es primitivo y poco eficaz especificar a capón ubicaciones y tamaños. Nunca sabes qué definición va a tener el usuario en su máquina ni qué tamaño de escritorio ni nada. cambia esas dos instrucciones por un expand=true y punto.
[/quote]

Para los ejemplos que estoy haciendo necesito que el formulario se ajuste al tamaño del DrawingArea.
No puede cambiar de tamaño un poco mas el DrawingArea con expand. Depende de esto el tamaño de las celdas, el trazado.
Te diré que es un tablero. Todo por ahora es dibujado.

Ejemplo de tablero de 360 x 360: Las x's tambien son dibujadas, no es una imagen. 
El tipo de marca depende si es ordenador o si es jugador humano.

 [img]https://foro.gambas-es.org/files/images/768/360x360.png[/img] 

Tengo que adaptar como debe quedar las marcas si el tablero es mayor, si es menor. Escalar el dibujo: Ejemplo 720 x 720
En este caso tienen un grosor fijo de trazado que no he adaptado a un tamaño de celda mayor.

 [img]https://foro.gambas-es.org/files/images/768/720x720.png[/img]

Puedo cambiar el tamaño de las celdas, etc,etc.. Ejemplo 18 x 18 celdas en un tablero de 720 x 720.

 [img]https://foro.gambas-es.org/files/images/768/18x18_celdas.png[/img]

Como ves el tamaño y la separación de la x depende del tamaño de la celda, que a su vez depende del tamaño del DrawingArea ( Tablero ).
Se debe establecer unos limites, etc, etc.

Como es un código que tiene un tiempo, tengo que modificarlo. Que seguro que con una división se hace mejor.
En este caso es el método que dibuja las X's de la clase Celda.

[code linenumbers=false syntax=gambas]
Public Sub DibujarXs()

  Dim lugarx, lugary As Integer  
  Dim separacionesquinas As Integer = 10
  
  Paint.LineWidth = 5
  
  'Se comienza "siempre" a dibujar por la esquina superior izquierda. Nunca olvidar eso
  
  'Se van a dibujar dos diagonales  
  'La separacion de las esquinas es una separación para que no comience justo en la esquina
  'ni tampoco que llegue al final de la otra esquina
  
  'Tambien aclarar que es un cuadrado más que un rectángulo. En este caso sus dimensiones son iguales
  'por cada lado
  
  'Primera coordenada
  lugarx = Me.x * Me.ancho
  lugary = Me.y * Me.alto  
  'Colocar en el lugar y trazar la  primera diagonal    
  Paint.MoveTo(lugarx + separacionesquinas, lugary + separacionesquinas)
  Paint.LineTo(lugarx + Me.ancho - separacionesquinas, lugary + Me.alto - separacionesquinas)  
     
  'Segunda coordenada
  lugarx = Me.x * Me.ancho
  lugary = Me.y * Me.alto
  'Colocar en el lugar y trazar la segunda diagonal  
  Paint.MoveTo(lugarx + separacionesquinas, lugary + Me.alto - separacionesquinas) '
  Paint.LineTo(lugarx + Me.ancho - separacionesquinas, lugary + separacionesquinas)
    
  'Coloreamos de rojo
  Paint.Brush = Paint.Color(Color.Red) 
  Paint.Stroke
  
End
[/code]

Es una especie de comienzo de prototipo de tablero para el juego de los barquitos. 

Este es el principio de la clase Celda:

[code linenumbers=false syntax=gambas]
Inherits DrawingArea

Const NUMCELDAS As Integer = 9 '( 9 x 9 )
Const TABLERO As Integer = 360 '(360 x 360 )

Private tcelda As Integer = TABLERO \ NUMCELDAS
Private gceldas As New ClaseCelda[]
Private existemarca As New Boolean[NUMCELDAS, NUMCELDAS]

....
[/code]

Saludos


