TEdit のデフォルトキー「Ctrl+H」

解決


Terry  2017-02-05 07:19:33  No: 48514

いつもお世話になっています。Terry(寺田)たまに「まも」ですm(_ _)m

ユーザーがショートカットに「Ctrl+H」を割り当て、そのアクションが無効になっていて
TEdit にフォーカスがあるときデフォルトの BackSpace が発生します
(以下最小コードです)
procedure TForm1.FormCreate(Sender: TObject);
begin
  Action1.ShortCut:=TextToShortCut('Ctrl+H');
end;

procedure TForm1.Action1Update(Sender: TObject);
begin
  (Sender as TAction).Enabled:=Edit1.Text='';
end;

procedure TForm1.Action1Execute(Sender: TObject);
begin
//当該ソフトではここでツリーノードの移動をしています
  Edit1.Text:='Hoge';
  Edit1.SelStart:=4;
end;

そのユーザーの望むところは無効になっているときは「何もしないでほしい」なのですが
BS として働いて欲しい人もいると思いますし OnUpdate を無くすとメニューやボタンの表示に支障が出るしで
「Ctrl+H」飛んできたら登録されているショートカット全部調べて……とかするしかないのでしょうか?
「Ctrl+M」とかは影響出るコントロール無いだろうなとか(p_q )

以上、よろしくお願いいたしますm(_ _)m


KHE00221  2017-02-06 03:25:40  No: 48515

//Action2 は ActionManagerに登録のみで表示させない

//CheckBox1 True 任意の動作       False 何もしない
//CheckBox2 True CheckBox1 の動作 False Default動作

procedure TForm3.Action1Execute(Sender: TObject);
begin
    //任意の動作
    Edit1.Text:='Hoge';
    Edit1.SelStart:=4;
end;

procedure TForm3.Action2Execute(Sender: TObject);
begin
    //何もしない
    Exit;
end;

procedure TForm3.CheckBox1Click(Sender: TObject);
begin
    Action1.Enabled := CheckBox1.Checked;
    Action1.Update;
    if CheckBox2.Checked = True then
    begin
      if CheckBox1.Checked = False then
      begin
        Action1.ShortCut:=0;;
        Action2.ShortCut:=TextToShortCut('Ctrl+H');
      end
      else
      begin
        Action1.ShortCut:=TextToShortCut('Ctrl+H');
        Action2.ShortCut:=0;;
      end;
    end
    else
    begin
       Action1.ShortCut:=0;;
       Action2.ShortCut:=0;;
    end;

end;


Terry  2017-02-07 07:43:21  No: 48516

KHE00221 さんお返事ありがとうございます

何もしないダミー Action に飛ばしてしまうのですね
ショートカットを登録できる Action が多数あるため
登録されたときに「Ctrl+H」だけ探してここへ飛ばせばいいんですね
あ、それより(ちょっと最近飲んでる薬の副作用で頭が回らないのです(x.x))
全てのAction.OnUpdateで一度外の関数に飛ばして
function CheckCtrlH(Action:TAction):Boolean;
これが True なら関数の中で処理して False なら通常の Enabled 処理
といっった感じでしょうか
あとで試してみたいと思います


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

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






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