Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Exclamation Como sería ese PHP en delphi?

Hola. Quiero hacer una estructura repetitiva en la cual el nombre de un objeto vaya tomando diferentes nombres:

tengo una caja de texto con un name: textbox1
en php tendría esta forma:

Código PHP:
for ($iPos=1;$iPos<10;$iPos++)
{
echo 
"<input type='text' name='textbox.$iPos'";

Así, mientras la variable $iPos sea más pequeño que 10, mostrará una caja de texto con un nombre diferente cada vez (textbox1, textbox2, textbox2...)

Ese código php cómo se mostraría en lenguaje Delphi?

Gracias
Saludos
Responder Con Cita
  #2  
Antiguo 01-08-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¿Exactamente dónde tienes el problema? Porque el bucle es bien simple, o eso me parece.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 01-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
el problema es como se escribe en delphi
Responder Con Cita
  #4  
Antiguo 01-08-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

El bucle se escribe de una forma muy similar:

Código Delphi [-]
var
  i: integer;
begin
  for i := 0 to i <= 10 do begin
    // Here your code   
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 01-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
gracias por la respuesta, pero lo que mas me interesaría es saber como se le cambia el nombre a un objeto dentro del bucle

en php es:
name='textbox.$iPos'

y en delphi?
Responder Con Cita
  #6  
Antiguo 01-08-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Antes de nada deja que rectifique el código del bucle que he mostrado antes, y es que, ni siquiera compilaría. Últimamente escribo más PHP que Delphi, de ahí el error que se aprecia. He aquí el bucle modificado:

Código Delphi [-]
var
  i: integer;
begin
  for i := 0 to 10 do begin

  end;
end;

La diferencia está en la condición "i <= 10", que, en Delphi, no está permitida. Otrosí, es posible indicar un entero, de forma que el bucle terminará cuando "i" alcance su valor.

Respecto de cambiar el nombre de un objeto... tú sabrás para qué demonios quieres hacerlo (claro está, por otro lado), pero, en todo caso, es posible y aquí se muestra cómo:

Código Delphi [-]
var
  i: integer;
begin
  for i := 0 to Self.ControlCount-1 do begin
    if(Self.Controls[i] is TEdit) then begin
      TEdit(Self.Controls[i]).Name :=
       TEdit(Self.Controls[i]).Name + IntToStr(i);
    end;
  end;
end;

El anterior código recorre todos los controles de un supuesto formulario. A cada paso por el bucle se comprueba si un determinado control es un "TEdit". Y, si es así, cambiamos el nombre del "TEdit", siendo dicho nombre el que ya tiene, añadiéndole el valor de "i".

Dicho más pronto, el operador de concatenación de cadenas, que en PHP es un punto ".", en Delphi es un signo más "+".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 06-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Hola.
la palabra "self" que aparece el el codigo no la detecta. dice que una expresion no identificada..
Responder Con Cita
  #8  
Antiguo 06-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Self es el nombre del formulario que contiene los elementos de los cuales estamos hablando.

Por si acaso para que no haya confusiones....
Edit.name es el Nombre del objeto
Edit.text es el valor que contiene el objeto
Responder Con Cita
  #9  
Antiguo 06-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
es que creo que no me comprendió bien.

Los Edits no están creador inicialmente. A medida que hace el for, van apareciendo los cajones de texto.

En php, para que algo se muestre en pantalla es con "echo". Cual es su equivalente en delphi?
Responder Con Cita
  #10  
Antiguo 06-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
el equivalente es sería :

Código:
showmessage('Hola Mundo');
o si es el contenido de un edit....

Código:
showmessage(Edit1.text)
No se si te comprendemos lo que quieres hacer....
Responder Con Cita
  #11  
Antiguo 06-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Explico mi caso particular.
Se trata de un calendario. Usando un datetimepicker se selecciona una fecha (06/08/2008), por ejemplo.

Cuando la fecha ha sido seleccionada, se pulsa un botón y cuando se pulsa el botón debe ejecutar este código (en PHP):

Código PHP:
for ($iPos=1;$iPos<10;$iPos++) 

    echo 
"<input type='text' name='textbox.$iPos'"

Este código significa que iPos=1 y mientra iPos sea inferior a 10, la variable IPos valdrá +1 en cada ejecución del FOR. Si la condición se cumple, en la pantalla veremos aparecer un <input type='text' name="iPos"> con el nombre del objeto sujeto a la variable.

>Se inicia el programa. Hace el primer input y sale un cuadro que se llama 1.
Como que 1 es inferior a 10 me crea otro cuadro que se llama 2...

No creo que en delphi varie mucho a PHP. Algo como:
Código Delphi [-]
begin
  for i := 0 to 10 do begin
      TEdit.Name + IntToStr(i);
  end;
  end;

end;

no serviría?


P.D: faltan los controladores para que haga el salto de linea cuando llegue a domingo.
Responder Con Cita
  #12  
Antiguo 06-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Supongo que querrás algo como esto..... dinos algo

Código:
procedure TForm1.Button1Click(Sender: TObject);
var i,cizq,ctop:integer;
begin
 cizq:=10;
 ctop:=10;
 for i:=0 to 10 do
  begin
   with TEdit.Create(Self) do
    begin
     Parent := form1;
     Top := ctop;
     Left := cizq;
     Width := 100;
     Name := 'Edit' + inttostr(i);
     Text := 'Dentro Edit ' + inttostr(i);
     ctop:=ctop +(Height+15);
    end;
  end;
end;
Responder Con Cita
  #13  
Antiguo 06-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
with TEdit.Create(Self) do

Dice que el Self: Undeclared Indentifier
Responder Con Cita
  #14  
Antiguo 06-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
es muy raro que Self no te lo reconozca.... bueno cambialo por el nombre de tu formulario por ejemplo ...

Código:
with TEdit.Create(form1) do
Responder Con Cita
  #15  
Antiguo 06-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Excelente! Funciona a la perfeccion!

Muchisimas gracias de nuevo amigo.
Creo que te voy a contratar
Responder Con Cita
  #16  
Antiguo 07-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
!!!!!!!
Hola. El código funciona correctamente, pero hoy estaba haciendo el calendario para mas de un mes y me ha salido un error.
Cuando se crean los Edit en el primer mes, los Name de cada cajon se quedan guardados en memoria, entonces cuando selecciono el segundo mes, me sale un error y dice que Edit1 ya existe. Los nombres se quedan grabados y no deja repetirlos.

Esto se puede solucionar liberando la memoria o algo parecido?
Responder Con Cita
  #17  
Antiguo 07-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Logicamente si están creados no puedes crear otros con el mismo nombre. Como realmente no se lo que haces tampoco te puedo orientar.... pero puedes hacer lo siguiente; Buscar el componente si esta creado no lo creas y si no lo está lo creas.

Código Delphi [-]
  
//donde editx es el nombre de tu componente..
if form1.ContainsControl(Tedit(findcomponent('editx'))) then 
 showmessage('está')
else 
 showmessage('no está');

Para destruir un edit pues sencillo....

Código Delphi [-]
form1.controls[x].destroy; // donde x es el número de componente creado
Responder Con Cita
  #18  
Antiguo 07-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
mirar si está creado no serviría porque siempre detectaría que edit1 hasta edit31 existe y haría más codigo.

Me decanto más por la destruccion del edit. Pero donde pones "x" es el numero de componente, si es edit1, pongo: form1.controls[edit1].destroy; no?
Responder Con Cita
  #19  
Antiguo 07-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
No, x es el número por orden de creación del componente. aunque si quieres también puedes utilizar lo siguiente:

Código Delphi [-]
form1.findcomponent('editx').destroy;

Dónde editx es el nombre del componente a destruir. Ya me dirás como te va....

Última edición por tcp_ip_es fecha: 07-08-2008 a las 12:34:59.
Responder Con Cita
  #20  
Antiguo 07-08-2008
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
mmmm, que falla?

Código Delphi [-]
for i:=1 to 29 do
begin
    form1.findcomponent('edit + inttostr(i)').destroy;

[...]
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
cual seria el motherboard perfecto kurono Debates 24 19-05-2008 15:35:14
¿El uso de firebird como una base seria no es tan correcto? IVAND Firebird e Interbase 31 18-12-2007 21:42:45
cual seria el componente correcto? DM2005 Varios 0 04-07-2006 21:55:39
Cual seria lo ideal? Coco_jac Gráficos 1 10-06-2005 01:38:42
¿Qué seria el mundo sin la Microsoft? Sasuke_Cub Debates 10 21-04-2005 07:39:43


La franja horaria es GMT +2. Ahora son las 13:07:35.


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