Autor |
Mensaje |
zaratustraw00f
Usuario
Registrado: Enero 2010
Mensajes: 7
Edad: 38
|
Controles Dinamicos Duda
hola a todos. tengo una duda que no he podido solventar:
por ejemplo supongamos que que tengo un control label con ciertas propiedades
luego con un boton hago otro label igual al anterior pero con un indice mayor para poder controlarlo luego ademas lapropiedad topse incrementa para quedar bajo el label anterior.
como podria hacer eso??
intente lo siguiente:
si hago:
hace una copia referencial apuntando a LVariable
y solo quiero que tenga las mismas propiedades pero que sea una nueva label!
quizas estoy demaciado perdido. cualquier ayuda bienvenida.
gracias
|
#1 Viernes, 05 Febrero 2010, 20:27 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Controles Dinamicos Duda
De momento lo que veo es que estás instanciando dos veces el mismo objeto con NEW.
Si creas el nuevo objeto en la declaración, pon también su manejador.
Si no, no pongas NEW en la declaración.
o bien:
Pero tengo dudas si funcionará el incremento a la referencia del manejador del evento correspondiente a cada nueva label.
¿Cómo piensas escribir su manejador?
Piensa que para que eso funcione tiene que existir este código (para el label creado anteriormente con el evento Click(), por ejemplo...):
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#2 Viernes, 05 Febrero 2010, 22:06 |
|
|
zaratustraw00f
Usuario
Registrado: Enero 2010
Mensajes: 7
Edad: 38
|
Re: Controles Dinamicos Duda
claro tieneas toda la razon se me fue eso de new
en todo caso
habria que hacer uso de la propiedad tag ????
o crear un array de objetos y luego añadir ??
de esta forma tendria indices incremetales????
ayuda de mas ideas
gracias
PD:
hice lo siguiente:
DIM xlvariable AS NEW Label AS "variable" pero me señala error en tiempo de ejecucion: not enough arguments
última edición por zaratustraw00f el Viernes, 05 Febrero 2010, 22:13; editado 1 vez
|
#3 Viernes, 05 Febrero 2010, 22:10 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Controles Dinamicos Duda
Creo que lo que tu quieres hacer es un array de controles tal como se hacía en VB poniendo el mismo nombre y jugando con la propiedad index.
Aquí eso se hace de otra forma mucho mas potente. Los controles tienen una propiedad group. Todos los controles que tengan la misma propiedad group son del mismo array de controles. No tienes index, pero tienes el tag para organizarlos como quieras (no necesariamente con números) y puedes tener en el mismo array controles de clases distintas (por ejemplo label y textbox). Además dispones del palabro LAST que te devuelve siempre el último control utilizado (el activo).
Arrays de controles en Gambas
Para crearlos de forma dinámica indicas el manejador (la propiedad group) de esta forma
Dim X as new label(manejador)
Osea que estas creando X y poniéndola dentro del manejador y que sería lo mismo que pintar el control X y asignarle la propiedad group="manejador". A partir de ahí los eventos serán del tipo manejador_click()
Un saludo
|
#4 Viernes, 05 Febrero 2010, 22:28 |
|
|
nrcefe
Aprendiz
Registrado: Septiembre 2009
Mensajes: 88
Ubicación: Entre Rios, Argentina
|
Re: Controles Dinamicos Duda
este es el codigo que utilizo para crear todos los label que quiero en tiempo de ejecucion en un drawingarea. los label se crean al apretar un boton . Si aprieto el boton cinco veces, se crean cinco label.
etique = NEW Label(DrawingArea1) AS "label1"
etique.Caption = LAST.Caption & " " & "etiqueta"
etique.Name = "label1"
etique.AutoResize = TRUE
etique.BackColor = &H00FFAF5F&
etique.Border = 1
luego , para poder controlar un label (de los que se crearon en el drawingarea) uso la propiedad last
PUBLIC SUB [label1_MouseMove()
IF Mouse.Left AND (drawarea.Mouse = Mouse.Default) THEN
'desplazamos el boton de acuerdo con la variacion de X e Y
LAST.MOVE(LAST.x - px + Mouse.x, LAST.y - py + Mouse.Y)
ENDIF
IF Mouse.Left AND (drawarea.Mouse = Mouse.SizeW) THEN
LAST.Width = Mouse.x
ENDIF
IF Mouse.Left AND (drawarea.Mouse = Mouse.SizeN) THEN
LAST.Height = Mouse.y
ENDIF
END
última edición por nrcefe el Sabado, 06 Febrero 2010, 17:42; editado 3 veces
|
#5 Sabado, 06 Febrero 2010, 17:36 |
|
|
zaratustraw00f
Usuario
Registrado: Enero 2010
Mensajes: 7
Edad: 38
|
Re: Controles Dinamicos Duda
gracias.
para lo que queria al final tuve que hacer lo siguiente.
PUBLIC SUB Button3_Click()
DIM etique AS Label
etique = NEW Label(Frame2) AS "labelx"
etique.Caption = "etiqueta " & il
etique.Name = "labelx" & il
etique.AutoResize = TRUE
etique.Tag = il
etique.Left = Labelx0.Left
etique.top = Labelx0.top + Labelx0.Height * il
il = il + 1
END
la variable il es public de tipo entero y la inicializo en 1
en realidad se me acomodaria mas trabajar como en vb6 usando index osea como array
trate de crear
public obj as object[]
y luego poner:
obj.add(etique)
pero me daba error !!!
bueno eso saludos
y nuevamente gracias
última edición por zaratustraw00f el Sabado, 06 Febrero 2010, 18:20; editado 1 vez
|
#6 Sabado, 06 Febrero 2010, 18:19 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Controles Dinamicos Duda
Pues perdona, pero ya me dirás cual es la diferencia con que a cada control le pongas el mismo grupo y luego le pongas el tag que te de la gana.
Porque con las diferencias que yo veo es que luego tienes en tu caso 'il' manejadores de código y yo uno. Que yo he necesitado una sola orden y tu has hecho como cinco y has usado una variable pública.
Yo creo que simplemente no has entendido como funcionan los arrays de controles en gambas porque es un sistema mucho mas potente y simple.
Dim label1 as new label(arraycontroles)
dim label2 as new label8arraycontroles)
label1.tag=1
label2.tag=2
Eso es todo. A partir de ahí los eventos para cualquiera de los elementos de ese array de controles son como este:
Y en ellos para diferenciar uno de otro puedes consultar su tag y para conocer el activo sabes que sea cual sea está en LAST.
Pero bueno. Son tus programas. Haz lo que quieras.
|
#7 Sabado, 06 Febrero 2010, 19:52 |
|
|
|