I\'ve come across some code that\'s throwing an exception (EIntfCasterror Cast not supported) when it passes nil to a constructor expecting a TComponent, like so:
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;