Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 10-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por joanajj
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...
Disculpa pero, ¿Ya leíste los post anteriores?, eduarcol te sugiere una matriz de controles y ademas de eso, entre los dos hemos sacado un procedimientico que quizá te sirva. ¿Ya probaste con algo de ello o definitvamente no sirven esas soluciones?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 10-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
si he probado

he probado y nada...
Responder Con Cita
  #4  
Antiguo 10-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por joanajj
he probado y nada...
Esta bien, entonces muestranos el pedacito de codigo donde recorres dicha matriz y tratas de hacer aparecer y desaparecer botones con dicho nombre para ver en que te podemos colaborar.

Cita:
Empezado por egostar
Digo, solo por si estaban preocupados porque no he intervenido
No sabes el vértigo que me dio cuando vi que habías respondido
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 10-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ya te han puesto el código que funciona correctamente:

Cita:
Empezado por joanajj
...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.
Si tienes el combre del componente en un string, con este código puedes acceder al componente:

Código Delphi [-]
procedure BotonVisible;
begin
  BotonGeneral := nil;
  BotonGeneral := FindComponent(nombreboton[5]);
  if BotonGeneral <> nil then
    TButton(BotonGeneral).Visible := False;
end;

Sólo que en tu caso debes cambiar el Button por un Tjvimage.

Algo así:

Código Delphi [-]
procedure CambiarFicha;
begin
  FichaGeneral := nil;
  FichaGeneral := FindComponent(quien[10]);
  if FichaGeneral <> nil then
    TJVImage(FichaGeneral).Left := 5;  
    TJVImage(FichaGeneral).Top := 100;
    ....
end;

Nota: Yo utlizaría parámetros en esta función para pasar nombre, Left, Top,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 10-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Gracias por responder, esta noche pruebo.

Gracias a todos por responder, ahora estoy en el trabajo, esta noche pruebo las últimas opciones que habéis puesto y os digo como me ha ido.
Estoy convencido de que de alguna forma debe funcionar lo que comento.

Probaré de nuevo y os comento, muchas gracias a todos y hasta después...

Saludos...
Responder Con Cita
  #7  
Antiguo 11-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
error al utilizar findcomponent

Buenas de nuevo, tal como dije iba a probar, y el 1er error que me encuentro es que al hacer.

FichaGeneral := FindComponent(quien[10]);

Delphi me da el error:

Undelclared Identifier : FindComponent

y si hago

FichaGeneral := Form1.FindComponent(quien[10]);

me dice incompatibles types TJvimage yTcomponent.

No sé por que falla.

Un saludo...
Responder Con Cita
  #8  
Antiguo 11-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por joanajj
Buenas de nuevo, tal como dije iba a probar, y el 1er error que me encuentro es que al hacer.

FichaGeneral := FindComponent(quien[10]);

Delphi me da el error:

Undelclared Identifier : FindComponent

y si hago

FichaGeneral := Form1.FindComponent(quien[10]);

me dice incompatibles types TJvimage yTcomponent.

No sé por que falla.

Un saludo...
Como declaraste FichaGeneral

Yo haría esto

Código Delphi [-]
Var
  FichaGeneral: TComponent;
  quien : Array [1..16] of TJvimage;

.......

  FichaGeneral := FindComponent(quien[10].Name);

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 11-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Seria asumir por el error que fichageneral esta declarada como tJvImage

Asi qe deberias hacer un cast algo asi:

FichaGeneral := TJvImage(Form1.FindComponent(quien[10]));


y no te olvides de comprobar que lo que devuelve findcomponent sea del tipo de objeto deseado.

EDITO: Se me adelanto el amigo Egostar, bueno mi lentitud con el teclado
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #10  
Antiguo 11-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por eduarcol
Seria asumir por el error que fichageneral esta declarada como tJvImage

Asi qe deberias hacer un cast algo asi:

FichaGeneral := TJvImage(Form1.FindComponent(quien[10]));


y no te olvides de comprobar que lo que devuelve findcomponent sea del tipo de objeto deseado.

EDITO: Se me adelanto el amigo Egostar, bueno mi lentitud con el teclado
, bueno algo bueno deberia yo de tener.....

Lo que se me hace raro es que a mi no me funciona como lo hacen

Código Delphi [-]
nomficha:=form1.FindComponent(quien[10]);

Me da error porque FindComponent requiere de un parámetro String, por lo que tuve que poner

Código Delphi [-]
nomficha:=form1.FindComponent(quien[10].name);

Y lo probe en Delphi4 y Turbo Delphi

Pero bueno, lo importante es que funcionó.

Salud OS.

Edito:

Olvidenlo, ya veo cual fue mi problema, declaré el arreglo quien de esta forma...

Código Delphi [-]
  quien: Array[1..2] of TImage;

__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #11  
Antiguo 11-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Me cortastes la inspiracion con el olvidenlo ese

por cierto a todas estas que es un parchis???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #12  
Antiguo 11-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por eduarcol
Me cortastes la inspiracion con el olvidenlo ese
, Por eso edite lo antes posible, aqui son unos lobos,

Cita:
Empezado por eduarcol
por cierto a todas estas que es un parchis???
Es esto.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #13  
Antiguo 11-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por egostar
, Por eso edite lo antes posible, aqui son unos lobos,

Es esto.
Una cosa mas, yo tampoco entendía lo que era el Parchis, resulta que yo lo conozco como Parqués.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #14  
Antiguo 11-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Ya funcionaaaaaa

Sres. con Findcomponent funciona perfectamente, solo me faltaba declarar una variable de tipo 'nomficha:Tcomponent' y no tipo 'nomficha:TJvimage' y luego TJvimage(nomficha).left:=100, etc...., con ello desapareció el error, y funcionó lo que pretendía.

nomficha:Tcomponent;

begin

nomficha:=nil;
nomficha:=form1.FindComponent(quien[10]);
tjvimage(nomficha).Left := 21;
tjvimage(nomficha).Top := 645;

end;





Un saludo y muchas gracias, seguro que me veréis con alguna pregunta nueva, espero que menos liante, y si llego a terminar el parchís este, aunque sea en meses, lo subo.
Responder Con Cita
  #15  
Antiguo 11-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por joanajj
Sres. con Findcomponent funciona perfectamente,...
Fantástico!!!; Sólo comentar que con 128 mensajitos, deberías ya utilizar los TAG's correctamente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 11-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Neftali
Fantástico!!!; Sólo comentar que con 128 mensajitos, deberías ya utilizar los TAG's correctamente.
Además, recuerda lo del el posible error que habíamos comentado anteriormente, deberías de evitarlo:
Código Delphi [-]
var
  nomficha:Tcomponent;
begin
  nomficha:=nil;
  nomficha:=form1.FindComponent(quien[10]);
  if nomficha <> nil then
  begin
    tjvimage(nomficha).Left := 21;
    tjvimage(nomficha).Top := 645;
  end;
end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #17  
Antiguo 11-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Ok, tomo nota acerca de los Tag`s

Ok, sres. lo tengo en cuenta.

Código Delphi [-]
nomficha:Tcomponent;

begin

 nomficha:=nil;
 nomficha:=form1.FindComponent(quien[10]);
 tjvimage(nomficha).Left := 21;
 tjvimage(nomficha).Top := 645;

end;

Por cierto, comentar(creo que por ahí surgió la duda), que la matriz 'quien' es de tipo string, ahí almaceno el nombre de la ficha(TJvimage.name) que está en una casilla.

Muchas gracias a todos, gracias a estas multiples respuestas, he aprendido un poco más de Delphi.

Saludos...
Responder Con Cita
  #18  
Antiguo 11-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por joanajj
Por cierto, comentar(creo que por ahí surgió la duda), que la matriz 'quien' es de tipo string, ahí almaceno el nombre de la ficha(TJvimage.name) que está en una casilla.
Otra opción, seguramente más eficiente, sería almacenar directamente los punteros a los objetos TJVImage; De esa forma accederías directamente al objeto sin tener que hacer el FindComponent, que es bastante ineficiente.

No se si alguien lo ha cmentado ya.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #19  
Antiguo 11-07-2007
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Ya funciona con matriz...

Sres. eduarcol me había dado la solución y no la había sabido llevar a buen fin, pero he conseguido hacerlo con una matriz apuntando al objeto y es más fácil y cómodo(tenías razón Neftalí), aunque supongo que ocupará más memoria, pero es lo de menos.

Un saludo y gracias a todos...
Responder Con Cita
  #20  
Antiguo 12-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por joanajj
...aunque supongo que ocupará más memoria, pero es lo de menos.
No creas, en realidad, en lugar de almacenar el String, lo que almacenas es el puntero al objeto que ya tienes creado, osea que es prácticamente lo mismo. No estás creando objetos nuevos al crear la matriz de objetos, sino apuntando a los que ya tienes...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
variable dentro de una variable molinero1 Varios 3 23-04-2007 12:44:48
Objeto Ole omy Varios 0 03-02-2006 21:40:32
Referenciar un objeto Tabla mediante string Neomanar Conexión con bases de datos 2 18-08-2005 18:01:15
Enlazar una variable a un objeto Nuria Varios 2 20-01-2004 17:00:40
objeto ole omy Varios 6 05-11-2003 18:15:54


La franja horaria es GMT +2. Ahora son las 06:19:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi