Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   acceder a objeto mediante una variable (https://www.clubdelphi.com/foros/showthread.php?t=45630)

joanajj 10-07-2007 11:03:15

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

joanajj 11-07-2007 00:59:28

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

egostar 11-07-2007 01:41:06

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

Yo haría esto

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

.......

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

Salud OS.

eduarcol 11-07-2007 01:45:49

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

joanajj 11-07-2007 01:47:25

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.

egostar 11-07-2007 01:54:14

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

:D:D, 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;

:D:D

eduarcol 11-07-2007 02:01:50

Me cortastes la inspiracion con el olvidenlo ese :(

por cierto a todas estas que es un parchis???

egostar 11-07-2007 02:35:05

Cita:

Empezado por eduarcol
Me cortastes la inspiracion con el olvidenlo ese :(

:D:D, Por eso edite lo antes posible, aqui son unos lobos, :D:D

Cita:

Empezado por eduarcol
por cierto a todas estas que es un parchis???

Es esto.

Salud OS.

Neftali [Germán.Estévez] 11-07-2007 11:12:53

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

jhonny 11-07-2007 14:56:49

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;

joanajj 11-07-2007 17:03:51

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

jhonny 11-07-2007 17:19:41

Cita:

Empezado por egostar
:D:D, Por eso edite lo antes posible, aqui son unos lobos, :D:D

Es esto.

Una cosa mas, yo tampoco entendía lo que era el Parchis, resulta que yo lo conozco como Parqués.

Neftali [Germán.Estévez] 11-07-2007 17:36:55

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.

jhonny 11-07-2007 17:42:24

Cita:

Empezado por Neftali
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.

Creo que eso suena como a la matriz de controles que sugería eduarcol :).

joanajj 11-07-2007 18:59:38

Como se haría???
 
Buenas, Neftalí creo que alguien a comentado algo referente a crear la matriz en vez de string, hacerla del tipo Tjvimage,pero la verdad es no tengo claro como tendría que atacarla, es decir en el caso de la matriz del tipo string, cuando por ej. muevo ficha agrego a la matriz el combre del objeto, algo así:

Código Delphi [-]
quien[casilla]:='fichaaz1';

y para luego modificar la posición , cuando corresponda, de 'fichaaz1', pues accedo a la matriz por el número de casilla y capturo el nombre del objeto a mover, y aplico lo que me habéis comentado del Findcomponent.
Haciéndolo con una matriz de tipo TJvimage no tengo claro como hacerlo.


Saludos...

joanajj 11-07-2007 22:45:40

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

Neftali [Germán.Estévez] 12-07-2007 14:33:23

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

roman 12-07-2007 18:02:06

Y, de hecho, usarás menos memoria, porque una referencia al objeto mide 4 bytes, lo mismo que la referencia a un string, que, además, ocupa el tamaño que mida el texto.

// Saludos


La franja horaria es GMT +2. Ahora son las 11:13:45.

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