The problem is that TBlahFrame is only a declaration of a TFrame descendant and not a designable TFrame. This way the IDE cannot detect that TFrame1 has to be treated as TFrame by the designer. You either need to make TBlahFrame a proper TFrame with a dfm and the corresponding entries in the dpr and dproj, or you declare an alias for TBlahFrame with the name TFrame and use that as the parent class for TFrame1.
TBlahFrame = class(TFrame, IBlah)
procedure Foo; virtual; abstract;
end;
TBlahFrameClass = class of TBlahFrame;
type
TFrame = TBlahFrame;
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, intf;
type
TFrame1 = class(TFrame)
private