Delphi XE 6 FMX TreeListVew teks margin.left menyebabkan kesalahan runtime

Saya perlu memindahkan TreeViewItem.Text ke kiri. Kode saya menyebabkan kesalahan runtime.

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

Bagaimana cara saya mengkodekannya dengan benar?


person vppavlov    schedule 09.02.2015    source sumber
comment
Kesalahan apa yang Anda dapatkan saat runtime?   -  person dub stylee    schedule 10.02.2015


Jawaban (1)


Pada waktu pembuatan TextObject bidang TTreeItem (dan TVppTreeItem Anda) adalah nil dan mengaksesnya menghasilkan kesalahan AV. Anda harus memindahkan kode yang mengubah metode TextObject ke ApplyStyle di mana TextObject akan diinisialisasi dari Style. Karena tidak ada jaminan bahwa TextObject akan valid bahkan setelah menerapkan gaya, Anda harus memeriksa nil sebelum mencoba melakukan apa pun dengannya.

  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
Terima kasih Dalija Prasnikar. - person vppavlov; 13.02.2015