Delphiオブジェクトインスペクタは、設計上、TFrameの子孫の追加のプロパティを表示しません。人々は、オブジェクトインスペクターでTFormの子孫のプロパティを表示するために一般的に使用される既知のトリックを使用することを提案する傾向があります。秘訣は次のとおりです。TFormの子孫のカスタムモジュールを次のようなデザインタイムパッケージを介してDelphiIDEに登録します。
RegisterCustomModule(TMyFrame, TCustomModule);
オブジェクトインスペクターは、この方法でTFrame子孫のインスタンスの追加のプロパティを表示できますが、フォームに埋め込まれている間はフレームの動作を失います。再設計できず、サブコンポーネントのイベントを実装できず、子コントロールを受け入れます(これはできません)。ただし、独自の設計領域では正常に動作します。
DelphiIDEがTFrame専用に提供する動作のように見えます。それらはおそらく一種の一般的な施設ではありません。
フレームの動作を失うことなくこれを達成する他の方法はありますか?
Delphi2007を使用しています
@ Tondrej、
事前に感謝し、問題のコメントを読んでください。
frameunit.dfm:
object MyFrame: TMyFrame
Left = 0
Top = 0
Width = 303
Height = 172
TabOrder = 0
object Edit1: TEdit
Left = 66
Top = 60
Width = 151
Height = 21
TabOrder = 0
Text = 'Edit1'
end
end
unit frameunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TBaseFrame = Class(TFrame)
protected
Fstr: string;
procedure Setstr(const Value: string);virtual;
published
Property str:string read Fstr write Setstr;
End;
TMyFrame = class(TBaseFrame)
Edit1: TEdit;
private
// This won't be called in designtime. But i need this to be called in designtime
Procedure Setstr(const Value: string);override;
end;
implementation
{$R *.dfm}
{ TBaseFrame }
procedure TBaseFrame.Setstr(const Value: string);
begin
Fstr := Value;
end;
{ TMyFrame }
procedure TMyFrame.Setstr(const Value: string);
begin
inherited;
Edit1.Text := Fstr;
// Sadly this code won't work and Edit1 won't be updated in designtime.
end;
end.
unit RegisterUnit;
interface
procedure Register;
implementation
uses
Windows, DesignIntf, frameunit;
procedure Register;
var
delphivclide: THandle;
TFrameModule: TCustomModuleClass;
begin
delphivclide := GetModuleHandle('delphivclide100.bpl');
if delphivclide <> 0 then
begin
TFrameModule := GetProcAddress(delphivclide, '@Vclformcontainer@TFrameModule@');
if Assigned(TFrameModule) then
begin
RegisterCustomModule(frameunit.TBaseFrame, TFrameModule);
// Just registering that won't cause Tmyframe to loose its frame behaviours
// but additional properties won't work well.
//RegisterCustomModule(frameunit.TMyFrame, TFrameModule);
// That would cause Tmyframe to lose its frame behaviours
// But additional properties would work well.
end;
end;
end;
end.