カスタムコンポーネント:既存プロパティをカスタマイズするには

解決


WAS  2009-06-17 02:55:29  No: 34804

お世話になります。
Enabledなどの既存のプロパティが変更した時に発生するイベントを定義するにはどうしたらよいのでしょうか?


WAS  2009-06-17 02:56:06  No: 34805

たとえば、TEditの背景色をEnabledの値にあわせて、灰色の表示にかえたいとします。

  private
    { Private 宣言 }
    F_Enabled: boolean;
    procedure SetEnabledColor(const Value: boolean);

  published
    { Published 宣言 }
    property Enabled: boolean read F_Enabled write SetEnabledColor;

procedure TEDIT.SetEnabledColor(const Value: boolean);
begin
    F_Enabled: := Value;
    If Enabled Then
    Begin
        Color := $00FFFFFF;
    End
    Else
    Begin
        Color := $00E0E0E0;
    End;
end;

上記のようにすると、背景色は変わりますが、本来のEnabledの機能が働かなくなってしまいます。


みんみん  2009-06-17 05:00:25  No: 34806

CM_ENABLEDCHANGEDなどのコンポーネントの内部メッセージを
処理すると幸せになれますよ。


KHE00221  2009-06-17 13:10:18  No: 34807

こうかな

  TEdit = class(StdCtrls.TEdit)
  private
    FOnChangeEnabled: TNotifyEvent;
    procedure SetEnabled(Value: Boolean);
    function GetEnabled: Boolean;
  published
    property Enabled: Boolean read GetEnabled write SetEnabled;
    property OnChangeEnabled: TNotifyEvent read FOnChangeEnabled write FOnChangeEnabled;
  end;
function TEdit.GetEnabled;
begin
    Result := inherited Enabled;
end;

procedure TEdit.SetEnabled(Value: Boolean);
begin
    if inherited Enabled <> Value then
    begin
      inherited Enabled := Value;
      if Assigned(OnChangeEnabled) = True then OnChangeEnabled(Self);
    end;
end;


WAS  2009-06-17 21:12:59  No: 34808

無事解決しました。
KHE00221様
みんみん様
助かりました、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加