QueryInterface op TControl?
Ik heb een PageControl met per tab een frame. Ze erven nog rechtstreeks over van TFrame. In een vorig project hadden we een centrale frame waar ze allemaal van overerfden, wat wel relatief goed werkte, maar af en toe eens ernstig de designer in de war stuurde als we wijzigingen probeerden te doen. dus hebben we nu een eigen ITabFrame interface.
Nu is de vraag waarom werkt dit niet:
Delphi Code:
procedure TSomeOneBigMainForm.PageControl1Change(Sender: TObject);
var
tf:ITabFrame;
begin
if (PageControl1.ActivePage.ControlCount=1)
and (IInterface(PageControl1.ActivePage.Controls[0]).QueryInterface(ITabFrame,tf)=S_OK) then
tf.TabShow;
end;
Voorlopig heb ik het zo opgelost, en in de praktijk zal je in normaal nooit een EIntfCastError krijgen, maar het kan wel natuurlijk, als iemand op een nieuwe frame ITabFrame vergeet toe te voegen:
Delphi Code:
procedure TSomeOneBigMainForm.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePage.ControlCount=1 then
try
(PageControl1.ActivePage.Controls[0] as ITabFrame).TabShow;
except
on EIntfCastError do ;//ignore
end;
end;