Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Crear Controles En Tiempo De Ejecución...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Crear Controles En Tiempo De Ejecución... 
 
Hola!
Sigo molestando....  

Tengo el siguiente "problema", y me falta información para poderlo implementar.

Necesito hacer una herramienta que tenga 16x16 botones, que al hacerles "click" cambien un color previamente elegido de una paleta.

El problema -que seguramente mas de uno ya lo ha resuelto- es que:

1) No se como hacer un...."boton.new" o asi, y crearlo con un determinado tamaño, color y posición. (Este es el problema que seguramente voy a resolver más fácilmente)

2) Una vez que tenga los 256 botones ¿Como hago para no tener que escribir 256 veces el código que los hace cambiar de color?

El problema 2 viene por que no hay posibilidad de crear algo así como btn_Boton(n) con "n" variando entre 1 y 256 ¿Se entiende?  

Al no poder tener botones dentro de un arreglo, como se hace en Visual Basic ¿como puedo utilizarlos sin volverme loco?  

¿Alguna idea que pueda ayudarme?  
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Como siempre, variables de tipo integer que tienen el tamaño, X, Y, etc y que vas aumentando cada vez que creas un control:

Código: [Descargar] [Ocultar]
  1. Public Procedure NuevoBoton()
      
  2. Dim X As Integer = 0 ' Puedes establecer una posición inicial
      
  3. Dim Y As Integer =0 ' Puedes establecer una posición inicial
      
  4. Dim i As Integer
      
  5. Dim btn As Button ' En este caso es un botón
      
  6.  
  7. For i = 0 To 256
      
  8. btn = New Button(Me) As "btnPaleta" ' Se crea un botón en el form, que será parte del grupo btnPaleta
      
  9. btn.X = X
      
  10. btn.Y = Y
      
  11. btn.W = 16
      
  12. btn.H = 16
      
  13. X += 16 ' Se aumenta X
      
  14. Y += 16 ' Se aumenta Y
      
  15. Next
      
  16.  
  17. End
      
  18.  
  19. Public Procedure btnPaleta_Click()
      
  20. If Dialog.SelectColor = 0 Then Last.Background = Dialog.Color
      
  21. End
      
  22.  

Como ves, al crear el nuevo botón se lo agrega a un grupo, y ese grupo ahora gestiona los eventos de todos a la vez. Para saber el objeto (en este caso, un botón) que lanzó el evento, escribes last, como si fuera un objeto normal, con sus propiedades (aunque no las sugerirá). Cuando he puesto "Me" es para que se genere en el formulario, pero puedes hacer que se haga en cualquier contenedor.
 



 
última edición por Invitado el Lunes, 25 Octobre 2010, 00:57; editado 3 veces 
Editado por Invitado, Jueves, 01 Enero 1970, 01:00:
 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Como siempre, un verdadero maestro! Simple y efectivo.

Que bueno es este gambas, por favor!!!

Que interesante seria disponer de un libraco de 1500 páginas como esos que abundan para VB y que nos guiase paso a paso hasta conocer todo lo que se puede hacer con gambas, y sobre todo, como hacerlo.....

¿Nunca encararon un proyecto asi?  
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
PD: He cambiado la froma en que se incrementan X y , por que como estaba originalmente se iban colocando sobre la diagonal, ya que para cada valor de "i" se incrementaban AMBOS valores (x e y).

He probado asi:
    X = (i - Int(i / 16) * 16) * 16
    Y = Int(i / 16) * 16
 


y va de maravilla.

Gracias de nuevo.
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Bien, sobre el libro, Fabián estaba en algo de eso...
 



 
 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Ok! Gracias por el dato.
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Soy un cabezotas.....  

Con la ayuda de Ayortano (gracias campeón!) he logrado "armar" el grid de controles que necesito. Pero sigo sin poder hacer "algo" cuando el usuario les hace clik.

Por ejemplo: con este código

DIM Xini AS Integer = 20 ' Puedes establecer una posición inicial  
DIM Yini AS Integer = 20 ' Puedes establecer una posición inicial  
DIM i, X, Y AS Integer  
DIM btn AS CheckBox ' En este caso es un checkbox  

X = Xini
Y = Yini

FOR i = 1 TO 256  
    btn = NEW CheckBox(ME) AS "chkPaleta" ' Se crea un check en el form, que será parte del grupo chkPaleta  
    btn.X = X  
    btn.Y = Y  
    btn.W = 16  
    btn.H = 16  
    X = (i - Int(i / 16) * 16) * 16 + Xini
    Y = Int(i / 16) * 16 + Yini
NEXT  
 


puedo crear este arreglo de checkboxes:

pantallazoyo

Uploaded with ImageShack.us

Pero no logro darme cuanta como hacer que, por ejemplo, cada vez que se haga click en uno de ellos pueda cambiar el contenido de un laberl o cualquier otra cosa. En mi aplicacion incluso necesitaría "leer" el estado de toda una fila o columna de controles. Se en que orden los he creado, por lo que se que toda la columna 1, por ejemplo, son el control 1,17,etc (por decir algo), pero no se como "referirme" a ellos....¿Se entiende cual es mi problema?

¿Como puedo resolverlo?

Me estoy volviendo loco con esto...  
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Hola
Si quieres diferenciar cada uno de esos botones lo que tienes que hacer es ponerles por ejemplo el tag a cada uno.

El bucle anterior sería así:

For i = 0 To 256
 btn = New Button(Me) As "btnPaleta" ' Se crea un botón en el form, que será parte del grupo btnPaleta
 btn.tag=x 'En el tag queda la instancia que corresponde a cada botón
 btn.X = X
 btn.Y = Y
 btn.W = 16
 btn.H = 16
 X += 16 ' Se aumenta X
 Y += 16 ' Se aumenta Y
 Next
 


Como todos los botones tienen el grupo btnPaleta le haces un evento al grupo en vez de a cada botón
public sub btnPaleta_click()
select case last.tag 'last.tag es el botón pulsado
   case 1: ...
   case 2: ...
   case 3: ...
end select
end

Y ya está.
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Estoy seguro que cuando lo haga anda voy a decir "Pero...que tontera era!!!", mientras tanto, sigo rompiendomé el coco

El lunes te cuento como me fue, o planteo las dudas que surjan.

Estoy armando a las apuradas un editor de caracteres, para hacer un par de fuentes de 8x8 pixeles....y ya me parece que tardo mas con esto que si las hubiese dibujado en papel cuadriculado y codificado a mano  

Gracias!
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Controles En Tiempo De Ejecución... 
 
Me parece que lo que necesito no puedo hacerlo en Gambas....

Con esto:

PUBLIC SUB chkPaleta_click()
    SELECT CASE (LAST.tag) 'last.tag es el botón pulsado
       CASE 1
          Button1.Text = "Presionaste 1!!"
    END SELECT
END
 


Puedo hacer "algo" cuando el usuario cambia el estado de un control cualquiera dentro de la grilla. Pero me parece que no puedo hacer nada con los demás...es decir: si quiero que un label contenga el valor del boton1 + el valor del boton2 x 2 + el valor del boton 3 x 4 ....etc, no puedo acceder al valor actual de un botón en particular....no?  
 



 
ariel - 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 ¿formularios En Tiempo De Ejecución O En... jsoto61 General 1 Jueves, 10 Diciembre 2009, 00:54 Ver último mensaje
fabianfv
No hay nuevos mensajes Crear Columnview En Tiempo De Ejecución D... aristicol Controles/Librerías/Componentes 5 Jueves, 30 Junio 2011, 18:43 Ver último mensaje
shordi
No hay nuevos mensajes Cambiar De Gb.qt4 A Gb.qtk En Tiempo De Ej... jsbsan General 1 Domingo, 14 Julio 2013, 21:46 Ver último mensaje
jguardon
No hay nuevos mensajes Crear Controles En Tiempo De Ejecución: F... jsbsan Programación en otros lenguajes 2 Sabado, 06 Diciembre 2014, 19:17 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  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