メニュー項目を使用不可にする
コントロールの利用:インデックス への移動
メニュー コマンドをメニューに残したまま、使用不可にすると便利です。たとえば、テキスト エディタでテキストを選択していないとき、[切り取り]、[コピー]、[削除] の各コマンドは使用しません。メニュー項目を使用可または使用不可にするタイミングとして適しているのは、ユーザーがメニューを選択したときです。メニュー項目を使用不可にするには、そのメニュー項目の Enabled プロパティに False を設定します。
例では、子フォームのメニュー バーにある [編集] 項目の OnClick イベントに次のイベント ハンドラを定義しています。[編集] メニューの [切り取り]、[コピー]、[削除] の各メニュー項目については、RichEdit1 がテキストを選択しているかどうかに基づいて Enabled を設定します。[貼り付け] コマンドについては、クリップボードにテキストがあるかどうかに基づいて使用可能または使用不可にします。
procedure TEditForm.Edit1Click(Sender: TObject);
var
HasSelection: Boolean; { 一時変数を宣言 }
begin
Paste1.Enabled := Clipboard.HasFormat(CF_TEXT); {[貼り付け] メニュー項目を有効/無効にする}
HasSelection := Editor.SelLength > 0; { テキストが選択された場合 True }
Cut1.Enabled := HasSelection; { HasSelection が True の場合、メニュー項目を有効にする }
Copy1.Enabled := HasSelection;
Delete1.Enabled := HasSelection;
end;
void __fastcall TMainForm::EditEditClick(TObject *Sender)
{
// [貼り付け] メニュー項目を有効/無効にする
Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
bool HasSelection = (RichEdit1->SelLength > 0); // テキストが選択されている場合 true
Cut1->Enabled = HasSelection; // HasSelection が true の場合、メニュー項目を有効にする
Copy1->Enabled = HasSelection;
Delete1->Enabled = HasSelection;
}
クリップボードの HasFormat メソッドは、クリップボードの内容が特定形式のオブジェクト、テキスト、イメージかどうかに基づいて論理値を返します。CF_TEXT パラメータを使って HasFormat を呼び出すと、クリップボードの内容がテキストかどうかを調べることができ、適切に [貼り付け] 項目を使用可能または使用不可にできます。