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 16-10-2012
titomigue titomigue is offline
Miembro
 
Registrado: may 2010
Posts: 17
Poder: 0
titomigue Va por buen camino
Duda - referirme a un componente de un form clonado con una funcion.

hola buenas,
de mi form principal hago "clones" de un segundo form de esta manera:

Código Delphi [-]
function ClonoForm(form:TForm; var AIndice:Integer):TForm;
var
  ms : TMemoryStream;
  clone : TForm;
  edit: TEdit;
begin
  ms := TMemoryStream.Create;
  try
    ms.WriteComponent(form) ;
    ms.Position := 0;
    clone := TFormClass(form.ClassType).CreateNew(Application) ;
    ms.ReadComponent(clone) ;
    clone.caption:='Clon'+IntToStr(AIndice);
    clone.name:='Clon'+IntToStr(AIndice);
    clone.Left := form.Left;//posicion de ventana
    clone.Top := form.Top;//posicion de ventana
    clone.Show; //muestro el clon
    Result := Clone;
  finally
    ms.Free;
  end;
end;

Bien, ahora en el form2 cojo el nombre de la ventana por ejemplo "clon2" y hago una función que recibe ese 2.
Bien, ahora desde la función, en un Edit1 (por ejemplo) del form2 quiero escribir ese 2, pero no consigo referirme al componente Edit1 desde la función (me dice que no existe ese componente).
si escribo Form2.Edit1..... lo hace pero dejándome todos los clones con un único numero en el Edit1

¿Como podría referirme concretamente al Edit1 del "clon2"?
Responder Con Cita
  #2  
Antiguo 17-10-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
buen día titomigue,

Estuve intentando enteder tu problema y no comprendí el lio que tienes con "La Función", hubiese sido bueno que la publicaras para analizarla... asi, que intenté replicar tu error en mi Delphi y mi prueba salió bien... o por lo menos lo que yo esperaba....

Para esto cree un proyecto desde cero, con dos formularios (Form1, form2)... el primero tiene un Button1 y el segundo tiene un Edit1....

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

function ClonoForm(form:TForm; var AIndice:Integer):TForm;
var
  ms : TMemoryStream;
  clone : TForm;
  edit: TEdit;
begin
  ms := TMemoryStream.Create;
  try
    ms.WriteComponent(form) ;
    ms.Position := 0;
    clone := TFormClass(form.ClassType).CreateNew(Application) ;
    ms.ReadComponent(clone) ;
    clone.caption:='Clon'+IntToStr(AIndice);
    clone.name:='Clon'+IntToStr(AIndice);
    clone.Left := form.Left;//posicion de ventana
    clone.Top := form.Top;//posicion de ventana
    clone.Show; //muestro el clon
    Result := Clone;
  finally
    ms.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var Indice, i : Integer;
    ElClon: Tform;
begin
  Indice:= 1;
  Form2.Show;
  ClonoForm(Form2, Indice);
  Form2.Edit1.Text:='Hola, soy el original...!!!';
  for i := 0 to Screen.FormCount-1 do
     if Pos('Clon',Screen.Forms[i].Name) > 0 then
        Begin
          ElClon := Screen.Forms[i];
          TForm2(ElClon).Edit1.Text := 'Soy '+Screen.Forms[i].Name;
        End;
end;

end.

Tal vez lo que estás buscando tiene que ver con el objeto global Screen y su lista de forms activos....

nos comentas omo te va, o nos das mas detalles en caso que no sea loq ue buscas...

Un saludo,
Responder Con Cita
  #3  
Antiguo 17-10-2012
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.286
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
La función de Clonar parece correcta, la que ya no se si lo es es la que utilizas para asignar.

algo así, por ejemplo funciona:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  f:TForm;
  i:integer;
  comp:TComponent;
begin

  // Edit2 el nombre del form al que quiero acceder al edit
  // Edit3, el valor que quiero asignar al Edit1 del form anterior

  for i := 0 to (Screen.FormCount - 1) do begin
    if (Screen.Forms[i].Name = Edit2.Text) then begin

      comp := Screen.Forms[i].FindComponent('Edit1');
      if Assigned(comp) then begin
        if (comp is TEdit) then begin
          TEdit(comp).Text := Edit3.Text;
        end;
      end;

    end;
  end;

end;
__________________
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
  #4  
Antiguo 17-10-2012
titomigue titomigue is offline
Miembro
 
Registrado: may 2010
Posts: 17
Poder: 0
titomigue Va por buen camino
Buenas, he hecho una prueba y me a servido esto:

Código Delphi [-]
for i := 0 to Screen.FormCount-1 do
     if Pos('Clon',Screen.Forms[i].Name) > 0 then
        Begin
          ElClon := Screen.Forms[i];
          TForm2(ElClon).Edit1.Text := 'Soy '+Screen.Forms[i].Name;
        End;

De la manera que dice el amigo Neftali no he probado pero tiene buena pinta también.

Muchas gracias!
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
Invocar Funcion PHP desde form html jfontane PHP 6 14-11-2016 22:11:23
Duda Función IntToStr P0werBurn Varios 10 04-08-2010 15:40:39
llamar funcion asp desde form Ricardo Alfredo HTML, Javascript y otros 4 11-10-2006 17:39:43
Duda sobre funcion DOW gendelphi Firebird e Interbase 0 30-01-2004 21:31:25


La franja horaria es GMT +2. Ahora son las 08:55:51.


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