Search code examples
delphifiremonkey

creating composite controls in firemonkey


Delphi XE-6

I am trying to create my own custom Firemonkey control derived from TGroupBox, where I create a TGridPanelLayout Control on the groupbox.

constructor TMyRadioGroup.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FLayout:= TGridPanelLayout.Create(self);
  FLayout.Parent:= self;
end;

How do I prevent the user from being able to select and /or delete the TGridPanelLayout control? At design time, I only want my parent control (derived from TGroupbox) to be select-able and delete-able from the form.


Solution

  • You need to set the Stored property to false for each child control you do not want selectable at design time. For example the following code creates a panel with two child controls, a TEdit and a TButton.

    unit PanelCombo;
    
    interface
    
    uses
      System.SysUtils, System.Classes, FMX.Types, FMX.Controls,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.Edit;
    
    type
      TPanelCombo = class(TPanel)
      private
        { Private declarations }
        edit1: TEdit;
        button1: TButton;
      protected
        { Protected declarations }
      public
        { Public declarations }
         constructor Create(AOwner: TComponent); override;
         destructor Destroy; override;
      published
        { Published declarations }
      end;
    
    procedure Register;
    
    implementation
    
    procedure Register;
    begin
      RegisterComponents('Samples', [TPanelCombo]);
    end;
    
    constructor TPanelCombo.Create(AOwner: TComponent);
    begin
      inherited;
      edit1:= TEdit.create(self);
      edit1.parent:= self;
      edit1.align:= TAlignLayout.Top;
      edit1.stored:= false;
    
      button1:= TButton.create(self);
      button1.parent:= self;
      button1.align:= TAlignLayout.bottom;
      button1.stored:= false;
    end;
    
    destructor TPanelCombo.Destroy;
    begin
      inherited;
      edit1.Free;
      button1.Free;
    end;
    
    end.