![]() |
acceder a objeto mediante una variable
Buenas a todos, sabe alguien como conseguir que:
Por ej. tengo en Form1 3 botones: form1.boton1 form2.boton2 form3.boton3 y quisiera que una variable por ej. nombreboton:='boton2'; form1.nombreboton.visible:=false; claro que esto no funciona, pero no sé com hacer que funcione de alguna forma, esto es solo para explicar la idea. Gracias de antemano.... |
Te lo explicare a ver si te sirve asi; Tengo una variable llamada BotonGeneral de tipo TButton (No String), a ella le asigno el botón por el que quiero tome forma y a esa variable la trato como si de ese botón se tratara, todo lo que le haga a esa variable se vera reflejado en el botón "Real" ya que lo que hicimos fue hacer que esa variable tomara la posición en memoria de dicho botón. Mejor dicho, un ejemplo:
En un formulario tengo Button1 y Button2, además declare una variable en la sección private llamada BotonGeneral: Al OnClick de Button2 le coloco:
Mira como le dije a BotonGeneral que se desapareciera pero notaras que en ejecución todo le sucede a Button1. Espero me haya hecho entender y que esto te sirva de algo. |
Hola
Lo unico que se me ocurre seria una variable tipo string, pero sinceramente no le veo el caso, pero bueno seria algo asi: Esto en realidad se logra con el uses sin tanta complicacion. Si generas un nonbre asignado a otro: Para mi lo que estas haciendo, como en el caso anterior es duplicar el codigo sin sentido, no se realmente la funcion que puedas buscar con esto. Saludos |
te amplio algo
Gracias por responder.
Ok, lo que comentas es cierto, de hecho así lo tengo, el problema radica en que al pasar el valor para decidir que botón apago, lo paso como string por razones que sería muy largo de explicar. Tu comentas hacer esto: declaro botongeneral:tbutton; y luego: BotonGeneral := Button1; BotonGeneral.Visible := False; ok, pero mi problema es que debo pasarlo de esta manera: nombreboton[5]:=`boton1`; ----> matriz tipo string con varios nombres de botones ... ... BotonGeneral := nombreboton[5];--->aquí radica el problema. botongeneral.visible:=false; y me da error de que no coinciden los tipo tbutton y string; Comprendes lo que necesito hacer??? Un saludo... |
Intenta lo siguiente:
BotonGeneral := nombreboton[5]; TButton(botongeneral).visible:=false; o simplemente: TButton(nombreboton[5]).Visible := False; |
y no puedes crear la matriz de tipo TButton??
en caso de que no puedas lo otro seria esto,
BotonGeneral sigue siendo declarada como te lo explico jhonny |
|
Perdon se me olvido realizar el cast, porq estaba pensando en referenciar la respuesta de gregory.
La diferencia entre FindChildControl y FindComponent es que el primero no lo va a encontrar si esta dentro de un control contenedor, solo encuentra los hijos directos del control referenciado seria bueno antes del cast verificar si encontro un objeto de la clase TButton o no haya devuelto un nil porq si no da error |
Cita:
De esa manera me evito el salto de dicho error que comentaste. |
jejeje, bueno bueno ya no me piques, esta muy buena tu solucion. aunque seria mejor crear la matriz de controles en lugar de estar buscandolo,
si te sigo la corriente jhonny seguro armamos un lio como el de los numeros |
No lo consigo(os explico para que lo necesito)
Sres. he probado de todo y na de na.
Para que salgáis de la intriga, estoy intentando hacer un juego de parchís, y para cada ficha utilizo un Tjvimage de las JVCL, para así gestionar y mover cada ficha. Así tengo por ej. fichaaz1, fichaaz2,fichaaz3,fichaaz4, ficharo1,ficharo2,etc. hasta completar las 16 fichas, esto me pareció más sencillo que estar con Sprites y gráficos. Entonces tengo una matriz tipo string onde establezco que ficha hay en cada casilla, así por ej. en quien[10]:='fichaaz2', me indica que en la casilla 5 2ª ficha está la 2ª ficha azul. Hasta ahí todo bien, pero claro en un momento dado necesito ese dato para operar. Entonces para por ej. mover la fichaaz2 a la casa necesito hacer que fichaaz2.left:=21 y fichaaz2.top:=100, pero el problema que estoy teniendo es que el nombre del objeto(tjvimage) es un string y no puedo utizarlo directamente. He hecho: nomficha:tjvimage; pero claro no consigo que el string quien[10] sea el nombre del objeto. Haceros a la idea de algo así : quien[10].left:=21; por supuesto no funciona, pero es la idea gral. Gracias por vuestro interés... |
Cita:
|
Cita:
|
si he probado
he probado y nada...
|
Cita:
Será para la otra....:eek: Digo, solo por si estaban preocupados porque no he intervenido :D:p Salud OS. |
Cita:
Cita:
|
Cita:
MoverFicha pues ya que no, a mi se me ocurre ¿porq no utilizas la matriz de controles? lo unico que tendrias que hacer es que luego de mover en la gui lo mueves en la matriz igualando en la siguiente posicion y haciendo null la actual piensalo y avisas |
Cita:
Haber, aun no entiendo eso de que el nombre del objeto es un string, pero si se que un objeto tiene la porpiedad name, yo sugiero esto, haber si con la ayuda de los que si saben podemos llegar a una solución. Sabemos que el name de x objeto es 'fichaaz2' Pasando el nombre tal cual:
y luego, en este ejemplo al dar doble click a la imagen
Salud OS. |
Cita:
Cita:
Ahora yo me sigo inclinando por un matriz de controles
Donde n y x son valores del indice que necesites en ese momento dependiendo como lo determines yy = numero de controles a utilizar espero sea lo que buscas |
Ya te han puesto el código que funciona correctamente:
Cita:
Sólo que en tu caso debes cambiar el Button por un Tjvimage. Algo así:
Nota: Yo utlizaría parámetros en esta función para pasar nombre, Left, Top,... |
La franja horaria es GMT +2. Ahora son las 04:16:43. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi