私のフォームクラスのいくつかは同じ機能を実装する必要があります。TClassから作成されたオブジェクトからインターフェイスを取得するには?
(私は私のフォームの最も上の役に立たない機能を追加したくないので、私は、共通のanchestorフォームにこの機能を追加するという考えを捨てました。)
だから... ...私は、インターフェイスの使用について考えました。このような単純なケースでは
IMyInterface = interface
procedure ShowHello();
end;
var
MyForm : TMyForm;
MyInterface : IMyInterface;
begin
MyForm := TMyForm.Create(Self);
MyInterface := MyForm;
//...
end;
、それはエラーなしで動作しますが、私のアプリケーションは、動的なパッケージを使用しますと、私はフォームクラスを得るために、「のGetClass」機能を使用しています。 次のように私が試した:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TForm(GetClass('TMyForm').Create());
MyInterface := MyForm;
end;
それは、 "互換性のないタイプ: 'IMyInterfaceという' と 'TFormは'" 原因となるエラーを。 インターフェイスを使用して目標を達成する方法はありますか、他の方法を試す方がよいでしょうか?
私は示唆したとおりですが、結果は偽です。 TMyFormクラスは "TMyForm = class(TForm、IMyInterface)"として宣言されています。何か不足していますか? – ExDev
インターフェイスタイプには、宣言に一意のGUIDが必要です。それはGUIDを持っていますか? – Wosi
はい、Ctrl + Shift + Gキーを押して取得し、IMyInterface宣言に追加しました。 – ExDev