2

Delphi 7 で、Visual Form Inheritance テクニックを介して継承できる抽象クラスを作成することは可能ですか? もしそうなら、例を挙げてください。

タスクはこれです。そのフォームのすべてのプロパティを継承する他の 2 つのフォームの基本フォームとして機能するフォームを作成したいと考えています。2 つの継承フォームは、データベースへの新しい要素の追加 (たとえば、製品アイテムの作成) とその要素の編集に使用されます。したがって、基本フォームは、すべての継承クラスが共有するOKボタンとキャンセルボタンなどを持つべき抽象クラスと考えるべきだと思います。これは明らかに抽象クラスです。なぜなら、他のフォームの基になるフォーム以外にフォームを使用する方法がないからです。

ポイントを明確にするための簡単な図を次に示します。

ここに画像の説明を入力

4

4 に答える 4

2

いいえ、「抽象」という言葉の厳密な Delphi の意味で、Delphi Visual Form Inheritance で「抽象」ベース フォームを作成することはできません。

ただし、あなたの説明からは、厳密に抽象的な基本フォームが実際に必要なようには思えません。抽象メソッドを定義するための要件についてはまったく言及していません。

UI と実装をベース フォームと共有できる複数の異なる特殊化された子孫を作成するベース フォームが必要なだけのようです。

それが VFI の目的なので、はい、それを行うことができます。

于 2013-04-10T17:47:04.133 に答える
2

あなたはabstractという用語を使用していますが、あなたの質問を読んで、 Delphi 内で抽象が定義されている方法を本当に意味しているとは思えません。抽象という言葉は、一般的な平易な話し方で意味していると思います。子孫によって変更または追加する必要がある部分を含むフォームを設計したいのです。Delphi の抽象メソッドは、実装のないクラス ルーチンを意味します。ただし、抽象メソッドの有無にかかわらず、基本フォームを設計することは完全に可能であるため、問題ではありません。

次のように、写真/図に示すようにセットアップを作成できます。

  • TBaseForm2 つの編集、2 つのラベル、2 つのボタン、1 つの ActionList を持つフォームを設計します。
  • ActionList に 3 つのアクションを追加します: Create、Save、Cancel、
  • CancelButton.Actionにキャンセルアクションをあらかじめ割り当てておき、
  • フォームを保存し、
  • メニューコマンド File > New > Other > [Project Name] > BaseForm を使用して、TBaseForm から継承された新しいフォームを設計します。
  • 編集、ラベル、ボタン、およびアクションを含む新しいフォームが作成されます。
  • 保存アクションを他のボタンのアクション プロパティに割り当てます。
  • 「アイテムの編集」というキャプションを付けて、
  • フォームを保存し、「Create New Item」フォームに対して繰り返します。

必要に応じて、基本フォームに抽象メソッドを含めることができます。実行時に TBaseForm インスタンスを作成すると、コンパイラは抽象メソッド 'TBaseForm.MethodName' を含む 'TBaseForm' のインスタンスを作成するという警告を出します。実行時に抽象エラーを生成するメソッドを呼び出すまで、警告のままです。そのメソッドを実装する子孫フォームを作成すると、警告は表示されません。デザイナーで抽象メソッドを使用してフォームを作成しても、警告は生成されません。ただし、実行時エラーは引き続き発生する可能性があります。

于 2013-04-10T17:24:30.500 に答える