Suffixプロパティの作成

投稿者: | 2019年9月22日

今度は、数値の後ろに表示する文字列(サフィックス)を指定するプロパティを作成します。プロパティ名は、Suffixプロパティとします。

Suffixプロパティの実装方法

前回作成したPrefixプロパティとほぼ同じ実装になります。表示位置が数値の右側になるので、ラベルのAlignをalRightにします。

サフィックス用のフィールド

サフィックスのラベルを入れておくフィールドを追加します(34行目)。

FPrefixLabel: TPrefixLabel;
FSuffixLabel: TPrefixLabel;
FUpdown: TInnerUpdown;

サフィックス用ラベルの生成

サフィックス用のラベルを作成するメソッドを追加します。
スコープはPrivateで、メソッド名はCreateSuffixLabelとします(39行目)。

定義

procedure CreatePrefixLabel;
procedure CreateSuffixLabel;
procedure CreateUpDown;

実装

procedure TCustomNumberEdit.CreateSuffixLabel;
begin
  if FSuffixLabel <> nil then Exit;

  FSuffixLabel := TPrefixLabel.Create(Self);
  FSuffixLabel.Parent := Self;
  FSuffixLabel.Align := alRight;
end;

Suffixプロパティの実装

サフィックスの文字列を指定できるよう、Suffixプロパティを実装します。

定義

プロパティの定義部分は以下のとおりです。Publishedスコープで定義します。

property Suffix: string read GetSuffix write SetSuffix;

GetSuffixアクセスメソッド

GetSuffixの定義

GetSuffixは、Privateスコープで定義します。

function GetSuffix: string;

GetSuffixの実装

実装は以下のとおりです。

function TCustomNumberEdit.GetSuffix: string;
begin
  if FSuffixLabel = nil then
    Result := ''
  else
    Result := FSuffixLabel.Caption;
end;

SetSuffixアクセスメソッド

SetSuffixの定義

SetSuffixは、Privateスコープで定義します。

procedure SetSuffix(const Value: string);

SetSuffixの実装

実装は以下のとおりです。

<pre class="line-numbers" data-start="402"><code class="language-pascal">procedure TCustomNumberEdit.SetPrefix(const Value: string);
begin
  CreatePrefixLabel;
  FPrefixLabel.Caption := Value;
  AdjustEditRect;
end;</code></pre>

AdjustEditRectメソッドの修正

サフィックスと編集領域が重ならないように、AdjustEditRectメソッドを修正します。


以下の110~112行目を追加します。

サフィックスと編集領域が重ならないように、AdjustEditRectメソッドを修正します。
以下の110~112行目を追加します。

procedure TCustomNumberEdit.AdjustEditRect;
var
  R: TRect;
begin
  R := AdjustUpdown;

  if FPrefixLabel <> nil then
    if FPrefixLabel.Visible then
      R.Left := R.Left + FPrefixLabel.Width;

  if FSuffixLabel <> nil then
    if FSuffixLabel.Visible then
      R.Right := R.Right - FSuffixLabel.Width;

  SendMessage(Handle, EM_SETRECT, 0, LPARAM(@R));
end;

VisibleSuffixプロパティの作成

サフィックスの表示のON/OFFができるよう、VisibleSuffixプロパティを作成します。
Publishedスコープで、以下のように定義します。

property VisibleSuffix: Boolean read GetVisibleSuffix write SetVisibleSuffix;

アクセスメソッドの定義

GetVisibleSuffixアクセスメソッド

VisibleSuffixプロパティを読み取るGetVisibleSuffixアクセスメソッドは、Privateスコープで以下のように定義します。

function GetVisibleSuffix: Boolean;

SetVisibleSuffixアクセスメソッド

値を設定するためのSetVisibleSuffixアクセスメソッドは、Privateスコープで以下のように定義します。

procedure SetVisibleSuffix(const Value: Boolean);

アクセスメソッドの実装

GetVisibleSuffixアクセスメソッドの実装

function TCustomNumberEdit.GetVisibleSuffix: Boolean;
begin
  if FSuffixLabel = nil then
    Result := False
  else
    Result := FSuffixLabel.Visible;
end;

SetVisibleSuffixアクセスメソッドの実装

procedure TCustomNumberEdit.SetVisibleSuffix(const Value: Boolean);
begin
  CreateSuffixLabel;
  FSuffixLabel.Visible := Value;
  AdjustEditRect;
end;

これで、サフィックスを表示できるようになりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)