Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Cursor Sobre Una Rejilla/grilla
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cursor Sobre Una Rejilla/grilla 
 
Hola!.

Esto puede ser el principio o la base de un juego. En este ejemplo creo el componente en tiempo real, un DrawingArea,
uso la clase Rejilla y Celda.

Cuando desplazamos el cursor del ratón sobre la rejilla, el cuadrado (en este caso) se desplaza a su vez, podemos hacer
clic con el ratón y dibujara un cuadrado en esas posición. Esto lo logramos con la propiedad Tracking del DrawingArea.

Cada vez que desplazamos el cursor del ratón sobre DrawingArea nos dibujara todos los cuadrados en las posiciones
donde hicimos clic.

 cursor_sobre_rejilla

Esta es la clase Rejilla. En ella también creo objetos de la clase Celda.
' gambas class file

Inherits DrawingArea

Private Const tamcelda As Integer = 40
Private r As Boolean
Private ix As Integer
Private iy As Integer
Private ocelda As Celda
Private gceldas As New Celda[]

Public Sub _new()
  
  With Me
    .Width = 400
    .Height = 400    
    .Left = 10
    .Top = 10    
    .Border = Border.Plain    
    .Tracking = True  
  End With
  
End

Public Sub Dibujar()
  
  CrearLineasHorizontales()
  CrearLineasVerticales()
  If r Then DibujaRectangulo(ix, iy)    
  DibujaCeldas
  
End

Public Sub CrearLineasHorizontales()
  
  Dim y As Integer
  
  Paint.LineWidth = 1
  
  For y = 1 To Me.Height - 1 Step tamcelda
    Paint.MoveTo(0, y)
    Paint.LineTo(Me.Width, y)        
  Next
  Paint.Stroke
  
End

Public Sub CrearLineasVerticales()
  
  Dim x As Integer
  
  Paint.LineWidth = 1
  
  For x = 1 To Me.Width - 1 Step tamcelda
    Paint.MoveTo(x, 0)
    Paint.LineTo(x, Me.Height)        
  Next
  Paint.Stroke
  
End

Public Sub DibujaRectangulo(cx As Integer, cy As Integer)
  
  cx = cx \ tamcelda
  cy = cy \ tamcelda
  Paint.LineWidth = 3
  Paint.Rectangle(cx * tamcelda, cy * tamcelda, tamcelda, tamcelda)
  Paint.Brush = Paint.Color(Color.Blue)
  Paint.Stroke
  r = False
  
End

Public Sub MueveRaton(cx As Integer, cy As Integer)
  
  r = True
  ix = cx    
  iy = cy
  Me.Refresh
  
End

Public Sub CrearCelda(cx As Integer, cy As Integer)
  
  cx = cx \ tamcelda
  cy = cy \ tamcelda
  ocelda = New Celda(cx, cy, tamcelda, tamcelda)
  gceldas.Add(ocelda)
  
End

Public Sub DibujaCeldas()
  
  Dim unacelda As Celda
  
  For Each unacelda In gceldas
    Paint.LineWidth = 3  
    Paint.Rectangle(unacelda.getx() * tamcelda, unacelda.gety() * tamcelda, tamcelda, tamcelda)  
    Paint.Brush = Paint.Color(Color.Violet)
    Paint.Stroke
  Next
  
End
 


La clase Celda es muy sencilla. Esta vez los lados miden igual, es un cuadrado, podría haber sido un rectángulo.

Private x As Integer
Private y As Integer
Public ancho As Integer
Public alto As Integer

Public Sub _new(cx As Integer, cy As Integer, iancho As Integer, ialto As Integer)
  
  x = cx
  y = cy
  ancho = iancho
  alto = ialto  
  
End

Public Function getx() As Integer
  
  Return x
  
End

Public Function gety() As Integer
  
  Return y
  
End
 


Y en el formulario principal tenemos...


'Ejemplo para futuras aplicaciones

Private unarejilla As Rejilla  

Public Sub Form_Open()
  
  Me.Center
  unarejilla = New Rejilla(Me) As "Manejador"
  
End

Public Sub Manejador_Draw()

  unarejilla.Dibujar()  

End

Public Sub Manejador_MouseDown()
  
  unarejilla.CrearCelda(Mouse.X, Mouse.y)
  
End

Public Sub Manejador_MouseMove()
  
  unarejilla.MueveRaton(Mouse.x, Mouse.Y)
  
End
 


La idea del cursor sobre la rejilla nos puede valer, desde para crear un mapa, guardar esas posiciones, recordar esos lugares.
Colocar un objeto en esa coordenada, etc,etc.

Aquí tenéis el código.


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: Cursor Sobre Una Rejilla/grilla 
 
Hola Shell

La creación de la red (con líneas) es un requisito en su proyecto?
¿No le interesaría poner PictureBox 'en un' marco ', por ejemplo?
Este faciliterai futuras ventanas ajustes (que son seguros para pedirle que los usuarios) ...
Además el uso de PictureBox 'u otros controles, le permite especificar su número en el' .tag ', que es un control más flexibles para administrar su ...
Mira por ejemplo, en "imágenes Jewelmulti de viajes en el cuadro de imagen ...
Pero tal vez me equivoque y no es lo que quieres hacer ...
Traducción 'Google' no siempre es muy eficaz ...
Buena suerte.
 



 
didier18 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cursor Sobre Una Rejilla/grilla 
 
Bonito...   
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cursor Sobre Una Rejilla/grilla 
 
Hola didier18.

Citar:

La creación de la red (con líneas) es un requisito en su proyecto?


No, no son necesarias. Es como una guía para ver mejor donde se sitúa el rectángulo.
Pueden desactivarse en el método Draw del DrawingArea.

Citar:

¿No le interesaría poner PictureBox 'en un' marco ', por ejemplo?


Nunca he intentado dibujar en un PictureBox. Creo que es posible.

Citar:

Mira por ejemplo, en "imágenes Jewelmulti de viajes en el cuadro de imagen ...
Pero tal vez me equivoque y no es lo que quieres hacer ...

 
La idea principal por ahora era un comienzo solamente. Gracias por tu interés.  
Es como un modelo o plantilla para comenzar algún juego.

Didier18, la creación de controles en tiempo de ejecución es a veces complicado,
en tu ejemplo JewelMulti lo has creado "casi" todo en tiempo de ejecución,
debió ser complicado para ti localizar cada componente en el formulario.  

¿ No te hubiera gustado crear alguna clase ?. El código del formulario es muy grande.  
Muchas variables. Quizás usando un array hubieras eliminado algunas variables.

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: Cursor Sobre Una Rejilla/grilla 
 
Shell:

Citar:
Nunca he intentado dibujar en un PictureBox. Creo que es posible.

No, ese control es para mostrar imagenes
http://gambaswiki.org/wiki/comp/gb.qt4/picturebox?l=es

Lo que si puede paint, es dibujar en objetos Picture
http://gambaswiki.org/wiki/comp/gb.qt4/paint?l=es
 




===================
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: Cursor Sobre Una Rejilla/grilla 
 
Hola Shell
Al igual que muchos software de programación 'Gambas' está orientada a objetos (POO yo no te enseñan lo anterior;-) Esto significa que usted puede:
1) - Tome un componente y colocar en la "forma" y luego trabajar sus propiedades, ya sea directamente oa través de código ...
2) - Creación del componente, trabajando sus propiedades y colocarlo en el formulario por el código (que es lo que hago con más frecuencia porque creo que podemos trabajar con más precisión "componente).
3) - Mezclar las dos formas de hacer ...
No hay manera incorrecta de trabajar, sólo hay un bien y que es el que usted elija! ;-)
Memoria, sólo los componentes 'timer' y 'impresora' no tiene el '.tag propiedad ...
El '.tag' almacena una 'variante' medidas de ... Así que usted puede poner casi cualquier cosa ...
Si he creado una tabla con PictureBox 'número 1 en el camino, por supuesto, voy a ver de inmediato o pongo el PictureBox', y que se llamará automáticamente 'PictureBox1', 'PictureBox2' etc ...
Esto puede ser apropiado para una mesa pequeña, pero tan pronto como uno se va más allá de una docena de componentes, que se convertirá rápidamente tedioso ...:-(
Especialmente si usted jura dépacer una serie de PictureBox 'intenta hacerlo con un bucle' For / Next 'y luego no funciona!
For i = PictureBox1 to PictureBox5
...
Next
por no hablar de la variable "i" que también debe gestionar!
Por lo tanto, cuanto más simple es trabajar 'langostinos'. En primer lugar, porque es aquí, a continuación, porque es más fácil "hacer hacer" lo que debe hacer y, además, que son perezosos;-)
Luego, en la declaración de variables, puede crear una PictureBox componente …

Public pbx As New PictureBox(Me)

pbx será el nombre del cuadro de imagen '
Como Nueva PictureBox (Me) para indicar 'Gambas' debe crear este objeto en la "forma".
Si hemos creado previamente un 'marco' y queremos poner el PictureBox 'en el' marco 'que da ...

Public Fra1 As New Frame(Me) => Creado 'Marco' en 'Forma'.
Public pbx As New PictureBox(Fra1) => Creado PictureBox 'en el' FRA1 '

Crear un único cuadro de imagen "en el" FRA1 'no es realmente vale la pena que va a ser mejor si pudiéramos crear más y nombrar al mismo tiempo ...
En este caso, usted debe decirle 'langostinos' que no es un objeto, sino un grupo de objetos que necesita para crear ...
El comando a ser tan

Public pbx As New PictureBox[]

Así que en 2 líneas de código creamos un contenedor 'FRA1' y un Goupe objeto. Por supuesto, por ahora nada será visible en la pantalla.

' Gambas class file
Public Fra1 As New Frame(Me)
Public pbx As New PictureBox[]

Ahora vamos a la rutina de 'Open Form ...
Voy a volver a llenar de código 'Jewelmulti'. El juego en sí no importa, es cómo el código que detallaré ...
Usted tiene que saber cuántos espacios estarán disponibles para el jugador ... Aquí 8 colones por 8 líneas o 64 cajas (por lo que tendrás que crear 64 pbx) ...
Un bucle nos ayudará ... también necesitaremos tres variables 'entero' para calcular el índice, para la colocación de PBX y el número de pbx ...
'Hicon' se utiliza para calcular la inversión intitial de PBX
'IDPBX es el índice de PBX.
Aquí vamos!
comenzamos con el lazo ...

For i = 0 to 63

Sí empezamos a contar de 0 a 63 ... esto nos va a hacer que nuestros 64 pbx ...

PBX.Add(Null, PBX.Count)

Como hemos definido se agrega a nuestro grupo PBX se indica aquí (.Add) 1 pbx el grupo también indica que un valor nula (Null) y la cuenta (PBX.Count).

PBX[i] = New PictureBox(Fra1) As "GrPBX"

Aquí dice que PBX [0] (0 = ya que es la primera iteración del bucle) es una nueva (New) PictureBox 'que ponemos en (FRA1) y esto será parte del Grupo de s' llamare "GrPBX"

PBX[i].Picture = Picture["icon:/16/gambas"]

Muestra la imagen que se encuentra en el cuadro de imagen '. Aquí están las imágenes que están en el "stock" de "Gambas" ... con el tiempo no vamos a ser capaces de imaginar aún ...

IDPBX = PBX.Count - 1

'Gambas ya ha contado el número de pbx ... Hay uno (por ahora) ... Ahora es el número pbx 0 como el bucle comienza en 0 ...
Así que el índice de PBX debe ser 0! Esta es la razón por idpbx es igual al número de pbx contados menos 1 (También me han dicho que ser más simple que idpbx = i e incluso pasar por alto el índice, pero esta variable tiene utilidad más adelante en código ...)

PBX[i].Tag = IDPBX

El '.tag' que mencioné antes ...
Aquí se cae en el '.tag' de pbx [0] valor es 0, yo también podría decir que

pbx[i].Tag = i

PBX[i].Drop = True

Le dice 'Gambas que la imagen puede ser movido por el "arrastrar y soltar" ...

PBX [i] = .H Hicon
PBX [i] = .W Hicon

Aquí le decimos a la Altura y Ancho pbx ...
El 'Select / caso' siguiente pbx utilizados para colocar la 'FRA1 "versus" Hicon'.

Esta es nuestra mesa se construye ...
Ahora lo interesante es cómo acceder pbx.
Para ello vamos a utilizar el componente de propiedad '.tag'.
Como hemos creado un GrPBX así usar su propiedad 'Enter' en un 'sub' ...

Public Sub GrPBX_Enter()
  Print "Survol du PBX " & Last.Tag
End

El simple hecho del ratón sobre una de pbx lo haremos, en la consola el número en la etiqueta que se muestra pbx ...
Estoy seguro de que ya lo sabía un montón de cosas en lo que he escrito, pero también hay que pensar en los lectores más novatos, espero que este breve relato sirva como muchos ya pesar de mi traducción aproximada se llega a operar este ejemplo.
A continuación el código completo ...

' Gambas class file

Public Fra1 As New Frame(Me)
Public pbx As New PictureBox[]

Public Sub _new()

End

Public Sub Form_Open()
Dim i, Hicon, IDPBX As Integer
Fra1.Move(10, 10, 384, 384)
Hicon = 48                                  'Hicon pour Hauteur Icone soit 40
  'PBX de 0 à 63 (64 PicturesBox)=contiendra les images du jeu
  For i = 0 To 63                             'pour i on compte de 0 à 63 ce sera le nombre de PBX
    PBX.Add(Null, PBX.Count)                  'on créé le PBX
    PBX[i] = New PictureBox(Fra1) As "GrPBX" 'on met le PBX dans la frame1
    PBX[i].Picture = Picture["icon:/16/gambas"] 'on attribue 1 image au PBX
    IDPBX = PBX.Count - 1                     'indexPBX recupere le n° du PBX
    PBX[i].Tag = IDPBX                        'on met le n° du PBX dans son tag
    PBX[i].Drop = True                        'on déclare que le PBX pourra recevoir 1 image
    PBX[i].H = Hicon                          'hauteur du PBX
    PBX[i].W = Hicon                          'largeur du PBX
    Select i                                  'placement des PBX dans la Fra1 selon la valeur de i
      Case 0 To 7                             'ligne 1 pour les PBX[0] à PBX[7]
        PBX[i].X = Hicon * i                  'PBX de i .X = Hicon (ici 40) * i -- 40*0=0, 40*1=40, 40*2=80 etc --
        PBX[i].Y = 0                          'PBX de i .Y=0 -- ce qui correspond à la première ligne du conteneur --
      Case 8 To 15                            'ligne 2 pour les PBX[8] à PBX[15]
        PBX[i].X = Hicon * i - (Hicon * 8)    'PBX de i .X =40*8-(40*8) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon                      'la ligne 2 commence en bas de l'icone de la ligne 1
      Case 16 To 23                           'ligne 3 pour les PBX[16] à PBX[23]
        PBX[i].X = Hicon * i - (Hicon * 16)   'PBX de i .X =40*16-(40*16) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 2                  'la ligne 3 commence en bas de l'icone de la ligne 2
      Case 24 To 31                           'ligne 4 pour les PBX[24] à PBX[31]
        PBX[i].X = Hicon * i - (Hicon * 24)   'PBX de i .X =40*24-(40*24) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 3                  'la ligne 4 commence en bas de l'icone de la ligne 3
      Case 32 To 39                           'ligne 5 pour les PBX[32] à PBX[39]
        PBX[i].X = Hicon * i - (Hicon * 32)   'PBX de i .X =40*32-(40*32) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 4                  'la ligne 5 commence en bas de l'icone de la ligne 4
      Case 40 To 47                           'ligne 6 pour les PBX[40] à PBX[47]
        PBX[i].X = Hicon * i - (Hicon * 40)   'PBX de i .X =40*40-(40*40) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 5                  'la ligne 6 commence en bas de l'icone de la ligne 5
      Case 48 To 55                           'ligne 7 pour les PBX[48] à PBX[55]
        PBX[i].X = Hicon * i - (Hicon * 48)   'PBX de i .X =40*48-(40*48) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 6                  'la ligne 7 commence en bas de l'icone de la ligne 6
      Case 56 To 63                           'ligne 8 pour les PBX[56] à PBX[63]
        PBX[i].X = Hicon * i - (Hicon * 56)   'PBX de i .X =40*56-(40*56) -- on revient sur la 1ère colonne --
        PBX[i].Y = Hicon * 7                  'la ligne 8 commence en bas de l'icone de la ligne 7
    End Select                                'fin du placement des PBX
  Next  'i
End

Public Sub GrPBX_Enter()
  Print "Survol du PBX " & Last.Tag
End

Solía gb.qt4 no gb.gui. Esto puede ser importante.

Buenas tardes
 



 
didier18 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cursor Sobre Una Rejilla/grilla 
 
Didier18:

Este mensaje hay que verlo con más tiempo.  
Y con el ejemplo delante. Leerlo detenidamente.

Gracias por explicarte traduciéndolo todo a español. Lo importante es que lo haces.
Si necesitas escribir en francés para expresarte mejor en determinadas partes del mensaje, no dudes en hacerlo.

Julio:

Eso, Picture, no Picturebox.  Que despiste.

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: Cursor Sobre Una Rejilla/grilla 
 
Hola Shell

Tiene un mensaje personal ...

Atentamente.
 



 
didier18 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cursor Sobre Una Rejilla/grilla 
 
Didier18:

Leído. Muy agradecido por las explicaciones.

Julio:

Le comentaba en el mensaje privado a didier18, en el lenguaje Visual Basic, existe el componente PictureBox
en el que se dibuja. Por eso mi error.

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
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cursor Sobre Dos Objetos A La Vez Shell General 1 Jueves, 15 Diciembre 2016, 09:17 Ver último mensaje
Shell
No hay nuevos mensajes Colorear La Rejilla Del GridView vuott Aplicaciones/Fragmentos de Código 4 Miercoles, 24 Junio 2015, 22:28 Ver último mensaje
vuott
No hay nuevos mensajes Cursor Del Mouse smorgerbowrg General 8 Sabado, 17 Noviembre 2012, 01:02 Ver último mensaje
Shell
No hay nuevos mensajes Cursor En El Editor De Gambas Shell Instalación 6 Sabado, 12 Diciembre 2015, 14:33 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
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
No puede descargar archivos
No puede publicar eventos en el calendario