今度は、数値の後ろに表示する文字列(サフィックス)を指定するプロパティを作成します。プロパティ名は、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;
これで、サフィックスを表示できるようになりました。