Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как правильно наследоваться от TCustomGrid ?


Morfi

Вопрос

Доброго времени суток.

Нашел проблему при написании кастомного грида, который наследуется от TCustomGrid:

При использовании LiveBindings  между кастомным гридом и набором данных, после закрытия среды вываливается AV:

AV.png.ecdfe06687e4a362f93941d216c4a02e.png

 

CustomGrid.thumb.png.c225d248bb0dad4525ae922da0d51153.png

 

Подскажите, что я упустил?

 

Минимальный код кастомного грида:

Спойлер

 


unit Simple.FMX.DBGridTest;

interface

uses
  FMX.Grid, System.Classes;

type
  TCustomFMXGrid = class(TCustomGrid)
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

  end;

  TFMXGrid = class(TCustomFMXGrid)
  protected
    function GetDefaultStyleLookupName: string; override;
    procedure DoEndUpdate; override;
  published
    property Anchors;
    property Align;
    property CanFocus;
    property CanParentFocus;
    property ClipChildren;
    property ClipParent;
    property ControlType;
    property Cursor;
    property DisableFocusEffect;
    property DragMode;
    property EnableDragHighlight;
    property Enabled;
    property Height;
    property HelpContext;
    property HelpKeyword;
    property HelpType;
    property HitTest;
    property Locked;
    property Padding;
    property Opacity;
    property Margins;
    property PopupMenu;
    property Position;
    property ReadOnly;
    property RotationAngle;
    property RotationCenter;
    property Scale;
    property Size;
    property StyleLookup;
    property TextSettings;
    property StyledSettings;
    property TabOrder;
    property TabStop;
    property TouchTargetExpansion;
    property Visible;
    property Width;
    property RowHeight;
    property RowCount;
    property Options;
    property Images;

    property DefaultDrawing;
    property OnHeaderClick;
    property OnColumnMoved;
    property OnDrawColumnHeader;
    property OnSelectCell;
    property OnSelChanged;
    property OnDrawColumnBackground;
    property OnDrawColumnCell;
    property OnGetValue;
    property OnSetValue;
    property OnCreateCustomEditor;
    property OnEditingDone;
    property OnResize;
    property OnResized;
    property OnCellClick;
    property OnCellDblClick;
    property OnDragEnter;
    property OnDragLeave;
    property OnDragOver;
    property OnDragDrop;
    property OnDragEnd;
  end;

procedure Register;

implementation

uses
  FMX.Styles, FMX.Presentation.Factory, FMX.Presentation.Style, FMX.Grid.Style,
  FMX.Controls, FMX.Types;

procedure Register;
begin
  RegisterComponents('Simple', [TFMXGrid]);
end;


{ TCustomFMXGrid }

constructor TCustomFMXGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

end;

destructor TCustomFMXGrid.Destroy;
begin

  inherited;
end;

{ TFMXGrid }

procedure TFMXGrid.DoEndUpdate;
begin
  Model.ClearCache;
  inherited;
end;

function TFMXGrid.GetDefaultStyleLookupName: string;
begin
  result := 'gridstyle';
end;

initialization
  TPresentationProxyFactory.Current.Register(TCustomFMXGrid, TControlType.Styled, TStyledPresentationProxy<TStyledGrid>);
  TPresentationProxyFactory.Current.Register(TFMXGrid, TControlType.Styled, TStyledPresentationProxy<TStyledGrid>);

  TColumnClasses.Register([TColumn, TStringColumn, TProgressColumn, TCheckColumn, TDateColumn, TTimeColumn, TPopupColumn,
  TImageColumn, TCurrencyColumn, TFloatColumn, TIntegerColumn, TGlyphColumn]);

  RegisterFmxClasses([TFMXGrid]);
finalization
  TColumnClasses.UnRegister([TColumn, TStringColumn, TProgressColumn, TCheckColumn, TDateColumn, TTimeColumn, TPopupColumn,
  TImageColumn, TCurrencyColumn, TFloatColumn, TIntegerColumn, TGlyphColumn]);

  TPresentationProxyFactory.Current.Unregister(TFMXGrid, TControlType.Styled, TStyledPresentationProxy<TStyledGrid>);
  TPresentationProxyFactory.Current.Unregister(TCustomFMXGrid, TControlType.Styled, TStyledPresentationProxy<TStyledGrid>);

end.

 

Изменено пользователем Morfi
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Я бы на Вашем месте копал в сторону секций initialization и finalization. Зачем повторно регистрировать TColumnClasses? Да и с TPresentationProxyFactory.Current.Unregister не всё понятно.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...