TForms (またはおそらく TFrames ですが、今のところ TForms) を含む多数の TTabSheets を持つ TPageControl があります。
タブが表示されたら、TForm または TFrame が前面に表示されたことを通知したいと思います。私はそれを行うものを見つけることができません。
イベントでActive TTabSheet を取得できることがわかっているOnChange
ので、このクラスを TForm に追加しようとしました。
struct iTab
{
virtual void DoIt( void ) = 0;
};
this でOnChange
:
ICPTab *tab = dynamic_cast<ICPTab *>( sheet->Controls[ 0 ] );
RTTI を使用してiTab
ポインターを取得し、DoIt()
から呼び出すことができると考えていると、警告が表示されます。
[BCC32 Warning] Unit1.h(18): W8130 Interface 'IPTab' does not derive from IUnknown. (Interfaces should derive from IUnknown)
[BCC32 Warning] MainWindow.cpp(612): W8131 Casting Delphi style class 'TControl' to an interface. Use 'System::interface_cast<ICPTab>(cls)' instead
フォームがインターフェイスを使用できるようにするためだけに、すべての IUnknown を取得することに興味はありません。
次を使用して、TFrame または TForm ポインターを取得できます。
TForm *tab = dynamic_cast<TForm *>( sheet->Controls[ 0 ] );
ただし、このポインターで TForm 以外のメソッドを呼び出すことはできません。Activate()
メソッドを呼び出してもよろしいでしょうか?
では、現在表示されていることを TForm または TFrame に通知するにはどうすればよいでしょうか。