所有クラスのプロパティの設定
最後に,ペンとブラシが変更された際に図形コントロールが自分自身を再描画するようにします。ペンクラスとブラシクラスには OnChange イベントがあるので,図形コントロールでメソッドを作成し,両方の OnChange イベントがそのメソッドを指すようにします。
図形コントロールにメソッドを記述します。また,コンポーネントのコンストラクタで,ペンとブラシの OnChange イベントがその新しいメソッドを指すように設定します。このようすを次に示します。
type
TSampleShape = class(TGraphicControl)
published
procedure StyleChanged(Sender: TObject);
end;
.
.
.
implementation
.
.
.
constructor TSampleShape.Create(AOwner: TComponent);
begin
inherited Create(AOwner); { always call the inherited constructor }
Width := 65;
Height := 65;
FPen := TPen.Create; { ペンを構築 }
FPen.OnChange := StyleChanged; { OnChange イベントにメソッドを割り当て }
FBrush := TBrush.Create; { ブラシを構築 }
FBrush.OnChange := StyleChanged; { OnChange イベントにメソッドを割り当て }
end;
procedure TSampleShape.StyleChanged(Sender: TObject);
begin
Invalidate; { コンポーネントを消去して再描画 }
end;
//ヘッダーファイル
class PACKAGE TSampleShape : public TGraphicControl
{
.
.
.
public:
void __fastcall StyleChanged(TObject* Owner);
.
.
.
};
//実装ファイル
__fastcall TSampleShape::TSampleShape(TComponent* Owner) : TGraphicControl(Owner)
{
Width = 65;
Height = 65;
FBrush = new TBrush();
FBrush->OnChange = StyleChanged;
FPen = new TPen();
FPen->OnChange = StyleChanged;
}
//実装ファイルに StyleChanged も追加
void __fastcall TSampleShape::StyleChanged( TObject* Sender)
{
Invalidate(); // コンポーネントの再描画
}
これで,ペンまたはブラシを変更するとコンポーネントが再描画されるようになりました。