Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   crear y borrar edits en ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=67619)

andresorozco86 26-04-2010 22:20:31

crear y borrar edits en ejecucion
 
Buenas Tardes:

Estoy trabajando con delphi y no se como es el manejo de crear y borrar por ejemplo edits pero en tiempo de ejecucion. Osea por ejemplo que yo tengo un boton donde le doy click y me cree 2 edit y luego en otro boton le doy click y me los borra. Alguien me podria ayudar?

cloayza 26-04-2010 22:58:20

Podria ser asi...

Código Delphi [-]
var
  Form1: TForm1;
  Edits:Array[0..4] Of TEdit;  {Vector de Tipo TEdit}

implementation
....

procedure TForm1.Button4Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     iTop:=9;
     {Crea los TEdit...} 
     For i:=Low(Edits) to High(Edits) Do
     Begin
          Edits[i]      :=TEdit.Create(Self);
          Edits[i].Parent:=Self;
          Edits[i].Left :=18;
          Edits[i].Top  :=iTop;
          Edits[i].Width:=120;
          Edits[i].Text :=Format('Numero %d',[i]);
          Inc(iTop, Edits[i].Height+2);
     End;
end;

procedure TForm1.Button5Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     {Elimina los TEdit...}
     For i:=Low(Edits) to High(Edits) Do
          If Edits[i]<>NIL Then
             Edits[i].Free;

end;

Saludos

rgstuamigo 26-04-2010 22:58:24

Cita:

Empezado por andresorozco86 (Mensaje 361958)
Buenas Tardes:

Estoy trabajando con delphi y no se como es el manejo de crear y borrar por ejemplo edits pero en tiempo de ejecucion. Osea por ejemplo que yo tengo un boton donde le doy click y me cree 2 edit y luego en otro boton le doy click y me los borra. Alguien me podria ayudar?

Bueno podrías declarar dos variables(pueden ser globales) de tipo TEdit de esta forma:
Código Delphi [-]
...
var
  Form1: TForm1;
 e1,e2:TEdit;//<--aqui declaro dos variables globales de tipo TEdit
implementation
....
Ahora en tu boton que deseas crear pones ésto:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not Assigned(e1) and not Assigned(e2) then //si no han sido creados anteriormente
  begin
    e1:=TEdit.Create(Application);//creo el edit 1
    e1.Parent:=Form1;// le asigno un parent al edit 1
    e1.Top:=100;//le digo a  que distacia de la parte superior del form se debe ubicar
    e1.Left:=100;//le digo a que distacia de la parte izquierda del form se debe ubicar

    e2:=TEdit.Create(Application); /// Idem a lo anterior pero para el edit 2
    e2.Parent:=Form1;
    e2.Top:=100;
    e2.Left:=200;
  end;
end;
Y en el boton de eliminar pues sencillamente lo destruimos de ésta manera:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
 FreeAndNil(e1);//destruyo el edit 1
 FreeAndNil(e2);//destruyo el edit 2
end;
Saludos...:)

andresorozco86 26-04-2010 23:44:14

Ambas soluciones funcionan bien, pero ahora tengo otra pregunta como se haria si la cantidad de edit a crear pudiera ser cualquier numero que el usuario escribiera en otro edit.

rgstuamigo 26-04-2010 23:52:14

Cita:

Empezado por andresorozco86 (Mensaje 361977)
Ambas soluciones funcionan bien, pero ahora tengo otra pregunta como se haria si la cantidad de edit a crear pudiera ser cualquier numero que el usuario escribiera en otro edit.

En ese caso sería conveniente utilizar un vector muy parecido a lo propuesto por cloayza pero dicho vector deberá ser dinámico.;)
Otra opción es tambien utilizar una lista de componentes que puede ser del tipo TList ó TObjectList ó mejor TComponentList.;).
Saludos...:)

cloayza 27-04-2010 00:01:29

Cita:

Empezado por andresorozco86 (Mensaje 361977)
Ambas soluciones funcionan bien, pero ahora tengo otra pregunta como se haria si la cantidad de edit a crear pudiera ser cualquier numero que el usuario escribiera en otro edit.

Para eso hay una variante...

Código Delphi [-]
var
  Form1: TForm1;
  Edits:Array Of TEdit;  {Vector de Tipo TEdit}
  {No hay que definir el tamano del array...}

implementation
....

procedure TForm1.Button4Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     {EditCuantos.Text->Deberia contener el numero que deseas crear. Y en base a ese valor se dimensiona el array Edits...}

     SetLength(Edits,StrToInt(EditCuantos.Text);

     iTop:=9;
     {Crea los TEdit...} 
     For i:=Low(Edits) to High(Edits) Do
     Begin
          Edits[i]      :=TEdit.Create(Self);
          Edits[i].Parent:=Self;
          Edits[i].Left :=18;
          Edits[i].Top  :=iTop;
          Edits[i].Width:=120;
          Edits[i].Text :=Format('Numero %d',[i]);
          Inc(iTop, Edits[i].Height+2);
     End;
end;

procedure TForm1.Button5Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     {Elimina los TEdit...}
     For i:=Low(Edits) to High(Edits) Do
          If Edits[i]<>NIL Then
             Edits[i].Free;

end;

Saludos

andresorozco86 27-04-2010 01:01:13

Muchas Gracias Por La Ayuda, Ya Me Funciona Bien

andresorozco86 27-04-2010 17:45:33

Otra Pregunta
 
bien ahora me surgio otra duda, como hago para asignarle un evento a un edit que fue crado dinamicamente

rgstuamigo 27-04-2010 23:09:51

Cita:

Empezado por andresorozco86 (Mensaje 362068)
bien ahora me surgio otra duda, como hago para asignarle un evento a un edit que fue crado dinamicamente

Sencillamente debes crearte un Procedimiento que tenga los mismos parametros que tiene el evento que quires asignar, por ejemplo:
En evento OnKeyDown de un edit tiene los siguientes parámetros
Código Delphi [-]
procedure Edit1KeyDown(Sender: TObject; var Key: Word;Shift:TShiftState);
Entonces debo hacerme un procedimiento que tenga los mismos parámetros:
Código Delphi [-]
Procedure MyKeyDown(objeto: TObject; var tecla: Word;Shift:TShiftState);
begin

{código de mi procedimiento}
...
...
end;
Finalmente para asignarselo al evento OnKeyDown de algun edit tan solo se hace lo siguiente:
Código Delphi [-]
{Hagamos de cuenta que tengo un edit llamado e1}
e1.OnKeyDown:=MyKeyDown;//Hago que el evento OnKeyDown del edit apunte a mi procedure que yo me hize
.
Espero se haya entendido.:).
Saluydos...:)

cloayza 28-04-2010 16:01:32

Para complementar el ejemplo...
Código Delphi [-]
 
private
    { Private declarations }
    Procedure EditChange(Sender:TObject); //Declaras los procedimientos
    Procedure EditClick(Sender:TObject);
  
....

var
  Form1: TForm1;
  Edits:Array Of TEdit;  {Vector de Tipo TEdit}
  {No hay que definir el tamano del array...}

implementation
....

{Evento OnChange}
Procedure TForm1.EditChange(Sender:TObject);
Begin
       label1.caption:='OnChange...'+TEdit(Sender).Text;
End;

{Evento OnClick...}
Procedure TForm1.EditClick(Sender:TObject);
Begin
       label1.caption:='Click...'+TEdit(Sender).Name;
End;

procedure TForm1.Button4Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     {EditCuantos.Text->Deberia contener el numero que deseas crear. Y en base a ese valor se dimensiona el array Edits...}

     SetLength(Edits,StrToInt(EditCuantos.Text);

     iTop:=9;
     {Crea los TEdit...} 
     For i:=Low(Edits) to High(Edits) Do
     Begin
          Edits[i]      :=TEdit.Create(Self);
          Edits[i].Parent:=Self;
          Edits[i].Left :=18;
          Edits[i].Top  :=iTop;
          Edits[i].Width:=120;
          Edits[i].Text :=Format('Numero %d',[i]);
          Edits[i].OnChange:=EditChange;
          Edits[i].OnClick    :=EditClick;
          Inc(iTop, Edits[i].Height+2);
     End;
end;

procedure TForm1.Button5Click(Sender: TObject);
Var
     i, iTop:Integer;
begin
     {Elimina los TEdit...}
     For i:=Low(Edits) to High(Edits) Do
          If Edits[i]<>NIL Then
             Edits[i].Free;

end;

Saludos...


La franja horaria es GMT +2. Ahora son las 16:02:56.

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