Passing nil as a parameter in place of a TComponent

*爱你&永不变心* 提交于 2019-12-02 07:39:26

EIntfCastError has nothing to do with the Owner passed in the constructor. It's because you try to cast an interface to another interface you think it supports when it doesn't in fact support it.

MyNewInterface := MyInterface as IADifferentInterface;

You're never ever required to pass in Owner, even when creating a TForm. The following code is perfectly legal:

var
  MyForm: TForm1;
begin
  MyForm := TForm1.Create(nil);
  try
    MyForm.ShowModal;
  finally
    MyForm.Free;
  end
end;

So is this (although it's pretty dumb - it illustrates the point, though):

implementation

var
  Button: TButton;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button := TButton.Create(nil);
  Button.Parent := Form1;
  Button.Left := 10;
  Button.Top := 10;
  Button.Caption := 'Button';
  Button.Name := 'MyDumbButton';
  Button.OnClick := TheButtonClick;
end;

procedure TForm1.TheButtonClick(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Name + ' clicked');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Button.Free;
end;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!