お世話になります。
Enabledなどの既存のプロパティが変更した時に発生するイベントを定義するにはどうしたらよいのでしょうか?
たとえば、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の機能が働かなくなってしまいます。
CM_ENABLEDCHANGEDなどのコンポーネントの内部メッセージを
処理すると幸せになれますよ。
こうかな
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;
無事解決しました。
KHE00221様
みんみん様
助かりました、ありがとうございました。
ツイート | ![]() |