Текстовое поле Delphi XE 6 FMX TreeListVew.left вызывает ошибку времени выполнения

Мне нужно переместить TreeViewItem.Text слева. Мой код вызывает ошибку времени выполнения.

constructor TVppTreeViewItem.Create(AOwner: TComponent);
 var
 c:TTextControl;
begin
  inherited;
  self.Text:='test';
  self.TextObject.Align:=TAlignLayout.Left;
  self.TextObject.Margins.Left:=50;
end;

Как правильно закодировать?


person vppavlov    schedule 09.02.2015    source источник
comment
Какую ошибку вы получаете во время выполнения?   -  person dub stylee    schedule 10.02.2015


Ответы (1)


Во время создания TextObject поле TTreeItem (и ваше TVppTreeItem) имеет значение nil, и доступ к нему приводит к ошибке AV. Вы должны переместить код, который изменяет метод TextObject, в метод ApplyStyle, где TextObject будет инициализирован из стиля. Поскольку не гарантируется, что TextObject будет действительным даже после применения стиля, вы должны проверить его на nil, прежде чем пытаться что-либо с ним сделать.

  TVppTreeViewItem = class(TTreeViewItem)
  protected
    procedure ApplyStyle; override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TVppTreeViewItem.Create(AOwner: TComponent);
begin
  inherited;
  self.Text := 'test';
end;

procedure TVppTreeViewItem.ApplyStyle;
begin
  inherited;
  if Assigned(TextObject) then
    begin
      TextObject.Align := TAlignLayout.Left;
      TextObject.Margins.Left := 50;
    end;
end;
person Dalija Prasnikar    schedule 11.02.2015
comment
Спасибо, Далия Прасникар. - person vppavlov; 13.02.2015