Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Los hermanos sean unidos... y sus propiedades también (https://www.clubdelphi.com/foros/showthread.php?t=24983)

elcigarra 08-09-2005 12:35:03

Los hermanos sean unidos... y sus propiedades también
 
Vuelvo al ejemplo de Roman de la vez anterior (que hay que decirlo, funcionó perfecto) pero esta vez con dos "hijos"...
Código Delphi [-]
  type
   TMiControl = class(TCustomControl)
   private
     FEditA: TEdit;
     FEditB: TEdit;
     procedure SetEdit(Value: TEdit);
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
   published
     property Edit: TEdit read FEdit write SetEdit;
   end;
 
 implementation
 
 { TMiControl }
 
 constructor TMiControl.Create(AComponent: TComponent);
 begin
   inherited;
   FEditA := TEdit.Create(Self);
   FEditB := TEdit.Create(Self);
   FEditA.Parent := Self;
   FEditB.Parent := Self;
   FEditA.SetSubComponent(true);
 end;
En este caso el subcomponente publicado es solamente el "A". ¿Hay alguna forma de hacer que las propiedad "Text" estén relacionadas?. Es decir, cuando el tiempo de ejecución el usuario cambie el texto de un edit (x ej el "A"), que cambie también el otro.

jmariano 08-09-2005 13:41:35

Una forma de hacer lo que quieres es capturar el evento OnChange del Edit "A", dentro de tu componente, y que, cuando se produzca, cambie el contenido del Edit "B":

Código Delphi [-]
type
  TMiControl = class(TCustomControl)
  private
    FEditA: TEdit;
    FEditB: TEdit;
    procedure CambiarB(Sender: TObject); // Método para cambiar FEditB
    procedure SetEdit(Value: TEdit);
    ...
  end;

constructor TMiControl.Create(AComponent: TComponent);
begin
  inherited;
  FEditA := TEdit.Create(Self);
  FEditB := TEdit.Create(Self);
  FEditA.Parent := Self;
  FEditB.Parent := Self;
  FEditA.OnChange := CambiarB; // Método que cambia el valor de FEditB 
  FEditA.SetSubComponent(true);
end;  

procedure TMiControl.CambiarB(Sender: TObject);
begin
  FEditB.Text := FEditA.Text;
end;

Saludos!

Sirkius 08-09-2005 13:43:19

Podrías hacer un procedimiento dentro de la clase del tipo TNotifyEvent, que compruebe si estan asignados los Edits y en ese caso lo copia de un a otro. Despues en el OnCreate se lo asignas al EditA.

PD: te pondria el codigo pero todavia no me llevo muy bien con lo de crear clases...

EDITO: eso mismo :P

delphi.com.ar 08-09-2005 13:43:45

Si... controlando los eventos de los TEdits, al igual que lo harías si los pegas sobre un TForm, por ejemplo, capturando el evento OnChange.

Código Delphi [-]
type
   TMiControl = class(TCustomControl)
   private
     FEditA: TEdit;
     FEditB: TEdit;
     procedure SetEdit(Value: TEdit);
     procedure OnEditAChange(Sender: TObject);
     procedure OnEditBChange(Sender: TObject);
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
   published
     property Edit: TEdit read FEdit write SetEdit;
   end;
 
 implementation
 
 { TMiControl }
 
constructor TMiControl.Create(AComponent: TComponent);
begin
   inherited;
   FEditA := TEdit.Create(Self);
   FEditB := TEdit.Create(Self);
   FEditA.Parent := Self;
   FEditB.Parent := Self;
   FEditA.OnChange := OnEditAChange;
   FEditB.OnChange := OnEditBChange;
   FEditA.SetSubComponent(true);
end;

procedure TMiControl.OnEditAChange(Sender: TObject);
begin
  EditB.Text := EditA.Text;
end;

procedure TMiControl.OnEditBChange(Sender: TObject);
begin
  EditA.Text := EditB.Text;
end;


La franja horaria es GMT +2. Ahora son las 12:27:53.

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