Cursor Sobre Una Rejilla/grilla


Objetivo: 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


CursorSobreRejilla.tar.gz
Descripción:  
Descargar
Nombre del archivo: CursorSobreRejilla.tar.gz
Tamaño: 6.71 KB
Descargado: 27 veces
CursorSobreRejilla.tar.gz
Descripción:  
Descargar
Nombre del archivo: CursorSobreRejilla.tar.gz
Tamaño: 6.71 KB
Descargado: 27 veces
CursorSobreRejilla.tar.gz
Descripción:  
Descargar
Nombre del archivo: CursorSobreRejilla.tar.gz
Tamaño: 6.71 KB
Descargado: 27 veces

Objetivo: 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.

Perfil MP  
Objetivo: Re: Cursor Sobre Una Rejilla/grilla
Bonito...

Perfil MP  
Objetivo: 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

Objetivo: 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

Objetivo: 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

Perfil MP  
Objetivo: 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

Objetivo: Re: Cursor Sobre Una Rejilla/grilla
Hola Shell

Tiene un mensaje personal ...

Atentamente.

Perfil MP  
Objetivo: 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


Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4794s (PHP: -60% SQL: 160%)
Consultas SQL: 47 - Debug off - GZIP Activado