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 24-02-2019
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Acceder a componentes creados en ejecución

Tengo un Form creado en ejecución con varios componentes, entre ellos un TComboBox, unTEdit y un TButton. Quiero que el botón seleccione un elemento del Combo y lo pase al TEdit.
Si puedo acceder al botón, pero no consigo acceder al dato del Combo y pasarlo al TEdit.
Código Delphi [-]
// Código del Botón Btn_TEMA:
procedure TForm1.Btn_TemaClick( Sender: TObject);
begin
    With Sender as TButton do   // Como pasa el Edt_Tema ?
    begin
     Caption := 'Primer Item';
     // ?????????????????
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
Var
  FModal: TForm;
  EditA, Edt_Tema : TEdit;
  Boton, Btn_Tema: TButton;
  CBox : TComboBox;
  UD : TUpDown;
  Lbl : TLabel;
  Val : Integer;
begin
TRY
   ..............................
   With Btn_Tema do
  begin
    Caption:= 'Pasar Tema';
    Font.Size:= 11;
    Width:= 170;  // Prior to Left !!
    Height:= 40;
    Left:=Trunc( (FModal.Width - Boton.Width) div 2 ) + 130 ; // 95;
    Top:= 90;
    Parent:= FModal;
    onClick := Form1.Btn_TemaClick;  // Lo que hace el Butón Btn_TEMA
    Default:=True; //Btn that receives Event.
   end;
 
FINALLY
     fModal.Free;
 
END;
end;
end.
Saludos.
bulc
Responder Con Cita
  #2  
Antiguo 24-02-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Si lo creas en ejecución, guarda una referencia al control creado

fEdit : TEdit;
...
fEdit:= TEdit.Create(Form1);
...

y antes de hacer algo, te aseguras que está asignado if (fEdit <> nil) , o if Assigned(fEdit )

Otra forma podría ser asignar la propiedad Tag con un identificador único, y escribes una función que te sirva para localizar un componente del form pasando el Tag como parámetro.
Responder Con Cita
  #3  
Antiguo 25-02-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Sinceramente no sé si entendí bién la situación...

Pero a ver, si el problema radica aquí
Código Delphi [-]
// Código del Botón Btn_TEMA:
procedure TForm1.Btn_TemaClick( Sender: TObject);
begin
    With Sender as TButton do   // Como pasa el Edt_Tema ?
    begin
     Caption := 'Primer Item';
     // ?????????????????
    end;
end;
entonces el caso es que: Edt_Tema de tipo TEdit y CBox de tipo TComboBox son variables locales del método Button1Click y para usarlas desde el método Btn_Tema podrías:
  1. Declararlas como privadas de TForm1.
  2. Declararlas globales a la implementación.
  3. Darle un nombre en la creación y luego buscarlas con el método FindComponent.
Ejemplos con cada uno de los modos:

1.
Código Delphi [-]
...
procedure TForm1.Btn_TemaClick( Sender: TObject);
begin
  FEdt_Tema.Text := FCBox.Items[FCBox.ItemIndex];
2.
Código Delphi [-]
...
implementation

var
 GEdt: TEdit;
 GCBox: TComboBox;

procedure TForm1.Btn_TemaClick( Sender: TObject);
begin
  GEdt_Tema.Text := GCBox.Items[GCBox.ItemIndex];
3.
Código Delphi [-]
...
procedure TForm1.Btn_TemaClick(Sender: TObject);
var
  C1, C2: TComponent;
begin
  C1 := FindComponent('Edt_Tema');
  C2 := FindComponent('CBox');
  if Assigned(C1)and Assigned(C2) then
    TEdit(C1).Text := TComboBox(C2).Items[TComboBox(C2).ItemIndex];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Btn_Tema: TButton;
  Edt_Tema: TEdit;
  CBox: TComboBox;
begin
  (*  ESTE CÓDIGO ES SOLO UN EJEMPLO DE PRUEBA *)
  Edt_Tema := TEdit.Create(Self);
  Edt_Tema.Parent := Self;
  Edt_Tema.Name := 'Edt_Tema';
  Edt_Tema.Top := 5;

  CBox := TComboBox.Create(Self);
  CBox.Parent := Self;
  CBox.Name := 'CBox';
  CBox.Items.Add('uno');
  CBox.Items.Add('dos');
  CBox.Items.Add('tres');
  CBox.Top := 50;

  Btn_Tema := TButton.Create(Self);
  Btn_Tema.Parent := Self;
  Btn_Tema.Name := 'Btn_Tema';
  Btn_Tema.Top := 100;
  Btn_Tema.OnClick := Btn_TemaClick;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 25-02-2019
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
He probado con FindComponent

Y no he ha servido. Las variables no eran asignadas. No estaban accesibles...
Luego he declarado las variables componente: - Var Edt_Tema : TEdit, CBox : TComboBox ... como Private y ha ido perfectamente. Ya puedo acceder desde el evento del botón Btn_TemaClick a todos los componentes.
Y mira que le había dado vueltas a la cosa. Intentaba pasar los componentes Edi_Tema, CBox como parámetros. Iba muy perdido.
Maravillado de la sencillez de la respuesta te doy las gracias más efusivas.
Saludos.
Bulc
Responder Con Cita
  #5  
Antiguo 01-03-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si el nombre que le asignaste en la creación del componente (y fué creado) es el mismo que usas como argumento del método FindComponent funcionará, te lo aseguro.

Pero también coincido en que cualquiera de los dos primeros modos es mucho mas simple y más eficiente que ese, ya que sólo se trata de ampliar el ámbito de las variables en cuestión.

Saludos y me alegro mucho que lo solucionaras
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 01-03-2019
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Sí, lo he solucionado

He puesto los componentes del Form dinámico dentro del apartado Private y ha funcionado a la primera.
De ese modo los componentes quedan accesibles al código del botón creado con ese Form dinámico.
No pongo código por haberlo puesto antes.
Saludos y muchas gracias al personal y foreros.
bulc
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
Problemas al acceder a componentes de formularios en tiempo de ejecución MAXIUM Varios 4 26-11-2018 15:50:45
Controlar componentes creados en tiempo de ejecución. damirua OOP 1 13-05-2010 15:03:58
Problema con borrado de componentes creados en tiempo de ejecución harpo OOP 5 22-12-2007 17:54:55
cambiar tamaño y mover componentes creados en tiempo de ejecucion gulder API de Windows 4 19-11-2006 00:21:16
Eventos en componentes creados en tiempo de ejecucion joumont OOP 3 27-12-2005 15:48:23


La franja horaria es GMT +2. Ahora son las 10:34:13.


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