Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   componente, editor de componente y editor de propiedades (https://www.clubdelphi.com/foros/showthread.php?t=74477)

r_e_g_2007 22-06-2011 09:24:33

componente, editor de componente y editor de propiedades
 
Un saludo, y haber si alguien pudiese ayudarme

Tengo un componente no visual, y este tiene una propiedad por ejemplo "Option" que tiene subpropiedades, y dentro de estas propiedades de option esta una que se llama columnas que llama a un form(tiene ...). Entonces el metodo EditProperty dentro del editor de componentes solo me recorre las propiedades del componente y no las que tiene dentro Option, es decir no reconoce la propiedad "columnas" y entonces el parametro Property no le puedo ejecutar un metodo Property.Edit para ejecutar el llamado que tiene un propertyeditor del campo columnas.
Existe alguna forma de llamar o obtener la property dentro de option para llamar al edit que ya está en el property editor, en este caso de Columnas.
Como dentro del editor de componentes tener acceso a llamar al edit del property editor de la propiedad columnas.


Tcomponente1
name
+option
subpropiedad1
Columnas [...] - llama a un form
Tag


TamcxGridFind_Editor = class(TDefaultEditor)
protected
procedure EditProperty(const PropertyEditor: IProperty; var Continue: Boolean); override;
este solo llama a name, option y tag.
No llama a subpropiedad1 ni a columnas, que en este ultimo caso quisiera escribir propertyeditor.edit
procedure Edit; override;
public
function GetVerb(Index: Integer): String; override;
function GetVerbCount: Integer; override;
procedure ExecuteVerb(Index: Integer); override;
end;

Muchas gracias a todos.

maeyanes 22-06-2011 18:09:54

Hola...

Bienvenido a los foros de Club Delphi, te recomiendo que le des una leida a la Guía de Estilo.

Otra cosa, cuando publiques código fuente en Delphi, usa las etiquetas delphi:

[delphi]
begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;
[/delphi]

lo que se mostrará en los foros así:

Código Delphi [-]
begin
  ProcedimientoAEjecutar;
  Variable := 'hola mundo';
  // ejemplo
end;

Ahora, sobre tu duda, podrías ampliar un poco más la información? Por ejemplo, como está declarado Options.


Saludos...

r_e_g_2007 24-06-2011 18:47:40

Aqui envio una explicación y parte del codigo, gracias
 
Muchas gracias por todo, es mi primer mensaje y no sabia como hacerlo, trataré de realizarlo mas explicito la proxima vez, disculpen por favor.
Muchas gracias

En el procedure TamcxGridFind_Editor.EditProperty del editor de componentes que se ejecuta al dar dblclic sobre el componente en tiempo de diseño quiero que se ejecute el TcxgfColumns_Property.Edit del editor de propiedades de la propiedad Columnas dentro de las opciones.
Lo que me pasa es que dentro de TamcxGridFind_Editor.EditProperty solo se ejecuta para las propiedades del componente y no para las subpropiedades que tiene la propiedad options.
habrá alguna forma de registrar para saber dentro de TamcxGridFind_Editor.EditProperty todas las propiedades que tiene la propiedad Option dentro.
Aqui pongo parte del codigo que tiene que ver con eso.

Código Delphi [-]
 
  //Editor de la subpropiedad Columnas de la propiedad options del componente
  TcxgfColumns_Property = class(TClassProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;
  //Editor de componente
  TamcxGridFind_Editor = class(TDefaultEditor)
  protected
    procedure EditProperty(const PropertyEditor: IProperty; var Continue: Boolean); override;
  public
    function GetVerb(Index: Integer): String; override;
    function GetVerbCount: Integer; override;
    procedure ExecuteVerb(Index: Integer); override;
  end;
 //Subpropiedades de la propiedad options de componente
  TcxGridFindOptions = class(TPersistent)
  private
    FColumns: TcxgfoColumnsItems;
    FColumnSelectedCell: Boolean;
    FDirection: TcxGridFindDirection;
    FMatchCase: Boolean;
    FMatchWholeWordOnly: Boolean;
    FOwner: TamcxGridFind;
    FSelectedRecords: Boolean;
    FWholeCell: Boolean;
    procedure SetColumns(const Value: TcxgfoColumnsItems);
    procedure SetMatchWholeWordOnly(const Value: Boolean);
    procedure SetWholeCell(const Value: Boolean);
  public
    constructor Create(pOwner: TamcxGridFind);
    destructor Destroy; override;
    procedure RetrieveColumns;
  published
    property Columns: TcxgfoColumnsItems read FColumns write SetColumns;
    property ColumnSelectedCell: Boolean read FColumnSelectedCell write FColumnSelectedCell;
    property Direction: TcxGridFindDirection read FDirection write FDirection;
    property MatchCase: Boolean read FMatchCase write FMatchCase;
    property MatchWholeWordOnly: Boolean read FMatchWholeWordOnly write SetMatchWholeWordOnly;
    property SelectedRecords: Boolean read FSelectedRecords write FSelectedRecords;
    property WholeCell: Boolean read FWholeCell write SetWholeCell;
  end;

  //Componente
  TamcxGridFind = class(TComponent)
  private
    FcxGrid: TcxGrid;
    FOptions: TcxGridFindOptions;
    FText: String;
    procedure SetOptions(const Value: TcxGridFindOptions);
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  private
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Execute;
    procedure FindNext;
  published
    property cxGrid: TcxGrid read FcxGrid write FcxGrid;
    property Options: TcxGridFindOptions read FOptions write SetOptions;
  end;

implementation

procedure Register;
begin
 RegisterComponents('Alex Monsanto', [TamcxGridFind]);
 RegisterPropertyEditor(TypeInfo(TcxgfoColumnsItems), TcxGridFindOptions, 'Columns', TcxgfColumns_Property);
 RegisterComponentEditor(TamcxGridFind, TamcxGridFind_Editor);
end;

{----- class: TcxgfColumns_Property -----}
{----- Public -----}
procedure TcxgfColumns_Property.Edit;
begin
 If ShowFmColumns(TcxgfoColumnsItems(GetOrdValue)) Then
  Modified;
end;
function TcxgfColumns_Property.GetAttributes: TPropertyAttributes;
begin
 Result := [paDialog, paReadOnly];
end;

{----- class: TamcxGridFind_Editor -----}
{----- Protected -----}
 
procedure TamcxGridFind_Editor.EditProperty(const PropertyEditor: IProperty; var Continue: Boolean);
begin
 If PropertyEditor.GetName = 'Options' Then
 Begin
  If ShowFmColumns(TamcxGridFind(Component).Options.Columns) Then
   Designer.Modified;
 End;
end;


La franja horaria es GMT +2. Ahora son las 04:22:18.

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