PDA

Ver la Versión Completa : Los hermanos sean unidos... y sus propiedades también


elcigarra
08-09-2005, 12:35:03
Vuelvo al ejemplo de Roman de la vez anterior (que hay que decirlo, funcionó perfecto) pero esta vez con dos "hijos"...

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":


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.


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;