Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Problema con Asignacion a un Objeto.

Hola.
Tengo 150 objetos Tpanel y dentro de estos e incustrado un objeto Updown, y los he relacionado para que incrementen. Sin problema.
Ahora quiero ponerlos a un valor determinado en ejecución:....creo un boton y con el evento BitBtnClick quiero hacer la asignacion y este es el código que no me funciona....

procedure TPANEL1.BitBtn1Click(Sender: TObject);
var a,resto:smallint;
cad:string;
begin

for a:=1 to 150 do begin
resto:= a mod 2;
if resto=0 then begin
'Updown'+inttostr(a)+'.Position':=999;
end
else begin
'Updown'+inttostr(a)+'.Position':=0;
end;

end;
end;



Un saludo. Tenéis un portal de muy excelente a muy excelentísimo.

Última edición por BEPAI fecha: 02-04-2007 a las 11:52:52.
Responder Con Cita
  #2  
Antiguo 02-04-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.233
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
Debes utilizar FindComponent Para acceder a un componente a partir de su nombre.
Revisa la ayuda y encontrarás ejemplos...

Código Delphi [-]
  // Supongo que es esto lo que quieres hacer....
  FindComponent('Updown'+inttostr(a)).Posicion ....
__________________
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
  #3  
Antiguo 02-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Por favor podrías ponerlo completo, yo lo he modificado en el siguiente sentido:

Código Delphi [-]
 
procedure TPANEL1.BitBtn1Click(Sender: TObject);
var a,resto:smallint;
cad:string;
begin
 
for a:=1 to 150 do begin resto:= a mod 2;
if resto=0 then begin
Findcomponent('Updown'+inttostr(a)).Position:=999;
end
else begin
Findcomponent('Updown'+inttostr(a)).Position:=0;
end;
 
end;
end;
.........y no funciona. Estoy en pañales en esto.
Saludos.
Responder Con Cita
  #4  
Antiguo 02-04-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.233
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
Para hacerlo bien sería algo así:

Código Delphi [-]
var
  comp:TComponent;
begin
  ...
  // Buscar el componente...
  comp := FindComponent('Updown'+inttostr(a));
  // Encontrado?
  if Assigned(com) then begin
    // Comprobar que es del tipo correcto?
    if (comp is TUpDown) then begin
      TUpDown(comp).Position := 999;
    end;
  end;
  ...

De forma similar para el otro.
Una vez que has encontrado el componente (que se devuelve como tipo generico) hay que hacer el CAST, para poder acceder a el con el tipo correcto (en este caso TUpDown).
__________________
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
  #5  
Antiguo 02-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Encontré esto:

Código Delphi [-]
 
{The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box.}
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 do begin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;
Lo de self no lo entiendo, pero bueno, de todas formas muy agradecido.
Responder Con Cita
  #6  
Antiguo 02-04-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.233
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
Código Delphi [-]
{The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box.}
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 do begin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;

Aquí lo que está haciendo es crear 20 componentes y luego acceder a ellos utilizando FindComponent, cosa bastante tonta por cierto, ya que FindComponent no es muy eficiente y sólo se debería utilizar cuando no exista otro remedio, como en tu caso, pero no aquí que ya están disponibles los 20 componentes (por lo tanto no tiene sentido buscarlos con este método).

Sólo le encuentro sentido como muestra de utilización, pero creo que el código no es muy acertado, no porque sea incorrecto, sino porque muestra una programación muy ineficiente.

El Self, se refiere al "objeto actual"; Si te fijas en la definición de los procedimientos lo verás claramente:

Código Delphi [-]
// En este contexto el Self es el objeto de la clase TForm1 que está
// ejecutando ese código
procedure TForm1.Button1Click(Sender: TObject);
...

Código Delphi [-]
// Si el código estuviera aquí el Self sería el objeto de la clase TPanel1 que 
// está ejecutando ese código
procedure TPANEL1.BitBtn1Click(Sender: TObject);
...
__________________
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
  #7  
Antiguo 03-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Muy agradecido, Neftalí.
Mi nivel es muy bajo y necesitaría hacer un curso para coger un poco de nivel, ya que tengo que hacer unas aplicaciones personales, sin más remedio.
Yo vivo en Segovia y aquí no hay nada donde den este lenguaje.Me tendría que desplazar a Madrid y hacerlo en los fines de semana. Quizás me podríais indicar algo interesante en esta ciudad.
(Perdón, porque sé que es un tema distinto)

Un saludo.
Responder Con Cita
  #8  
Antiguo 03-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
la cara oculta de delphi 4 es un pdf famosísimo, gratuito y ameno (al menos la primera vez que se lee ). En google lo encuentras sin problemas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 09-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Cita:
Aquí lo que está haciendo es crear 20 componentes y luego acceder a ellos utilizando FindComponent, cosa bastante tonta por cierto, ya que FindComponent no es muy eficiente y sólo se debería utilizar cuando no exista otro remedio, como en tu caso, pero no aquí que ya están disponibles los 20 componentes (por lo tanto no tiene sentido buscarlos con este método).

Sólo le encuentro sentido como muestra de utilización, pero creo que el código no es muy acertado, no porque sea incorrecto, sino porque muestra una programación muy ineficiente.
Neftalí, lo que intento es colocar una matriz[1..15,1..10], en la que tengo que modificar datos cuando se ejecute el programa.¿Podrías darme una idea de como hacerlo más fácil y eficiente?Muchas gracias.

Lepe, gracias, lo he leído varias veces, pero creo que lo que se necesita es práctica para adquirir soltura.

Un saludo.
Responder Con Cita
  #10  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Para obtener una respuesta acertada, sería mejor empezar desde el principio.

- ¿como creas los 150 paneles?
- ¿como los destruyes? o si no haces nada, pues lo dices.
- El famoso array [1..15, 1..10] of ?????? ¿de qué son?
- ¿como creas los botones y updown?

Todo eso es necesario saberlo, (si es con código mucho mejor).

¿Se podría cambiar la dinámica o no? Me explico: Quizás fuera mejor hacer un Frame, un panel, en definitiva, un contenedor de componentes. En tiempo de diseño, colocas los botones, el updown y todo lo que necesites.

En ejecución, solo tendrías que crear instancias de ese panel o TFrame. Como es un contenedor de objetos, se simplificaría el acceso a sus botones y a todo lo que contenga.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 09-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Cita:
- ¿como creas los 150 paneles?
A puro güebo. Pincho un panel y lo coloco en el Form1. Pincho un Updown y lo inserto dentro del panel que he colocado. Selecciono los dos, Ctrl-C(copiar), Ctrl-V(pegar), y así hasta los 150.
Cita:
- ¿como los destruyes? o si no haces nada, pues lo dices.
Con lo que me ha costado organizarlos !!!!
Cita:
- El famoso array [1..15, 1..10] of ?????? ¿de qué son?
shortint.(enteros de los de antes)
Cita:
- ¿como creas los botones y updown?
Creo que ya te he respondido, pero no te rías, que va en serio.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Cita:
¿Se podría cambiar la dinámica o no? Me explico: Quizás fuera mejor hacer un Frame, un panel, en definitiva, un contenedor de componentes. En tiempo de diseño, colocas los botones, el updown y todo lo que necesites.

En ejecución, solo tendrías que crear instancias de ese panel o TFrame. Como es un contenedor de objetos, se simplificaría el acceso a sus botones y a todo lo que contenga.
Todo esto me suena a chino, te lo juro. Lo del Frame, colocar los componentes,.............., nunca he hecho nada de esto.

Estoy más pegao que yo que sé.

Un saludo.
Responder Con Cita
  #12  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
A ver, en este mensaje tengo un ejemplo. baja, compila y ejecuta.

Ese programa se encarga de crear 30 frames (para tí paneles) en ejecución, es decir, tú pones un panel en el form, ahora, dentro del panel pones un memo, y cuando ejecutas el programa, delphi creará 30 paneles iguales y los sitúa (modificando el Left y Top de cada panel) en pantalla.

Si te interesa la forma en que se ha hecho, te aclaro lo que haga falta.
Si decides continuar con tu programa, como lo tienes ahora, pues seguimos con él.

No creo que esté de más ver otro punto de vista.

Edito: cuando ejecutes el programa,
1 - elige del calendario una fecha (el día da igual) solo importa el mes.
2 - haz clic en el botón que pone "Crea mes".


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 09-04-2007 a las 20:55:17.
Responder Con Cita
  #13  
Antiguo 10-04-2007
BEPAI BEPAI is offline
Miembro
 
Registrado: feb 2007
Posts: 19
Poder: 0
BEPAI Va por buen camino
Muchas gracias, Lepe.
Yo creo que sobre la marcha es la mejor forma.
Entiendo lo que has hecho con tu programa, cuando creas los frames y cuando los destruyes, creas frame a frame y los ubicas en el panel. Nueva fecha, destruyes frames, calculas como queda el mes y creas frames en su posición mensual correspondiente.

Te explico un poco lo que quiero hacer, que aunque sea una mentalidad de otra galaxia, pues para mí el resultado, como mínimo, es cómodo y más manejable, ya que necesito tenerlo en pantalla.

Para la matriz:
-un panel con un updown, función incremento-decremento, por posición de la matriz, para modificar con el ratón.
-un botón para poner a 0 la matriz, inicializacion.
-un botón para cargar datos de unos archivos de texto, y actualizar matriz en función de fechas,etc,...; pondré algo para el año(añomin-añomax) y para el día(diamin-diamax),....; y claro supongo que se pueden hacer cosas impresionantes, pues yo estos datos los importo también con Excel y los tengo en colores con formato condicional, etc,etc,.....pero no quiero complicar el tema.

Para los cálculos (en función de los datos de la matriz actual)
Tendré que pasar los datos de los Updown a la matriz para actualizar y tenerla fresca para ejecutar los procesos:
-boton de proceso_1:Actualizar matriz.Se ejecuta en función de la matriz actual y según el código de este botón.
-botón de proceso_2:idem.
-botón de proceso_3:idem.
-botón de proceso_4:idem.
-botón de proceso_5:idem.
Supongo que los datos los sacaré en un memo(¿que es un memo?), yo antes utilizaba los datos tipo texto, utilizando textbackground() y textcolor() y me sobraba. Supongo que cogeré una filosofía de trabajo y me haré a lo que necesite, y con eso trabajaré.

Salir.-Guardar matriz en archivo *.txt y Salir.

Ejecutar.(Iniciar aplicación)-Cargar matriz y asignar a los Updown, que los tendré siempre en pantalla.

OJO.-¡¡¡¡ Espero no tener problemas de memoria !!!!

No sé si se me escapa algo, se que es código de Neardental, pero es lo que sé. Leo y leo,........y me lio y me lío. Son muchas cosas en poco tiempo. Me surgen muchas ideas pero no sé implementarlas, leo y leo.., bueno voy poco a poco.

Voy a ir poco a poco y si me surge algo, lo coloco aquí en este hilo como consulta.

Muy agradecido a todos.
Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Asignacion Automatica frholguin Varios 9 19-10-2006 11:24:54
Problema con asignacion de valores en un rango Valeric Servers 4 06-09-2005 14:44:04
Asignacion de campos jdangosto OOP 1 05-08-2005 11:41:11
Asignación IP juanchi Internet 1 24-09-2003 20:07:05
Asignación de Campo autonumérico Ulises Providers 2 15-07-2003 16:44:18


La franja horaria es GMT +2. Ahora son las 21:06:23.


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