私はカスタムコントロールを持っています:
type
TContosoFrobber = class(TCustomControl)
private
end;
内部的に、私のコンポーネントはコントロールを作成します:
type
TContosoFrobber = class(TCustomControl)
private
FMyDateTimePicker: TDateTimePicker;
public
constructor Create(AOwner : TComponent); override;
property DateTimePicker: TDateTimePicker read FMyDateTimePicker;
end;
constructor TContosoFrobber.Create(AOwner: TComponent);
begin
inherted Create(AOwner);
FMyControl := TMyDateTimePicker.Create(AOwner);
end;
ここで、TMyDateTimePickerはTDateTimePickerの単純な子孫です
TMyDateTimePicker = class(TDateTimePicker)
protected
end;
だから私がやったことを要約してください:
- のプライベート変数を宣言する
TDateTimePicker
- タイプの公開(つまり、公開されていない) プロパティとして公開します。
TDateTimePicker
- ポリモーフィズムを通じて、コントロールは実際にはの子孫です
TDateTimePicker
そして、それはすべて機能しました-最近、Delphi XE6(Windows 10上)を再インストールするまで。
DFM
これが、設計時にエラーが発生した理由を理解できなかった理由です。
クラス TMyDateTimePicker が見つかりません
なぜそのクラスを見つけようとしているのですか?実装の詳細のそのクラス。ストリーミング用に公開されていません。ストリーミング システムはどのようにそれを作成しようとしているのですか!? だから私はDFMをチェックします:
object cfBeachBall: TContosoFrobber
Left = 445
Top = 25
Width = 101
Height = 22
...snip...
object TMyDateTimePicker
Left = 0
Top = 0
Width = 101
Height = 22
Date = 37306.581535243100000000
Time = 37306.581535243100000000
TabOrder = 0
TabStop = False
end
end
なぜTInternalDateTimePicker
dfmで終わるのですか:
- プロパティはpublicであり、公開されていません
フォーム ストリーミング システムが公開されていないプロパティを dfm に配置しないようにするにはどうすればよいですか?
さらに悪いのは、バグのある IDE です。
含まれてはならないプロパティが含まれている場合があるだけではありません。時々、 2回すべきではないプロパティが含まれています:
object cfPlasticBag: TContosoFrobber
Left = 445
Top = 25
Width = 101
Height = 22
...snip...
object TMyDateTimePicker
Left = 0
Top = 0
Width = 101
Height = 22
Date = 37306.581535243100000000
Time = 37306.581535243100000000
TabOrder = 0
TabStop = False
end
object TMyDateTimePicker
Left = 0
Top = 0
Width = 101
Height = 22
Date = 37306.581535243100000000
Time = 37306.581535243100000000
TabOrder = 0
TabStop = False
end
end
- 公開されていないプロパティが dfm に含まれないようにするにはどうすればよいですか?
- dfm が2 回含まれないようにするにはどうすればよいですか?
ハッキングの回避策
私は恐ろしいハックを知っています: DFM に、DFM が知っておくべきではないコントロールについて教えてください:
initialization
RegisterClass(TMyDateTimePicker);
finalization
UnRegisterClass(TMyDateTimePicker);
end.
現在、dfm には、業務上認識していないコントロールが含まれています。フォームを保存するたびに、本来あるべきではないものへの参照が含まれます。そして最悪なことに、私はそれがTMyDateTimePicker
.
Delphi XE6 が再インストール前にこれを行わなかったのはなぜですか? おそらく、長い間サポートされていなかったバージョンの Delphi の最新のアップデートをインストールする必要がありますか?
既知のバグ?