私はカスタムのDelphiコンポーネントをTGraphicControlから降順に持っています。次のようにそのクラスが宣言されています:カスタムDelphiコンポーネントの再宣言幅プロパティ
TMyLabel = class(TGraphicControl)
private
...
protected
...
public
...
published
property Height;
property Width write SetWidth;
...
end;
にsetWidthの実装がさらにある:
procedure TMyLabel.SetWidth(const Value: Integer);
begin
if (Value >= 0) and (Value <> Width)
then begin
inherited Width := Value;
// Do some other stuff
...
end;
MessageDlg('Test', mtInformation, [mbOK], 0);
end;
コンポーネントの幅を入力することにより、実行時または設計時にプログラムで変更されたとき、私は現在にsetWidthが呼び出されますオブジェクトインスペクタの対応するフィールドの値。しかし、マウスを使用してデザイン時にコンポーネントのサイズを変更すると、オブジェクトインスペクタの「幅」フィールドは更新されますが、メッセージボックスは表示されないので、SetWidthプロシージャは呼び出されません。
コンポーネントをマウスでサイズ変更しているときにSetWidthを呼び出す必要があるため、Paintプロシージャが(コンポーネントを再描画するだけで)何か他の処理が必要なときを知るためのフラグを設定できます。これを達成する方法はありますか?
+1それは3つの良い補完的な答えをもたらしたので+1。もちろん、それを避けるための間違いのためだけに、それ自身のメリットがあります;-) –