ユーザーがクリックするたびに TEdit1 のすべてのテキストを選択する方法、またはクリックしてテキストの一部を選択する方法
4 に答える
TEditコントロールの既定の動作を超えて何かを行うことは非常に危険です。ユーザーは、標準の Windows コントロールがどのように動作するかを知っており、これから逸脱すると混乱を招く可能性があります。
デフォルトでは、AutoSelectプロパティは に設定されていTrueます。
コントロールがフォーカスを取得したときに、編集コントロール内のすべてのテキストが自動的に選択されるかどうかを決定します。
編集コントロールがフォーカスを取得したときにすべてのテキストを選択するようにAutoSelectを設定します。AutoSelectは、単一行の編集コントロールにのみ適用されます。
ユーザーがエディット コントロール内のテキストを追加するよりも置き換える可能性が高い場合は、AutoSelectを使用します。
このプロパティがTrueの場合、キーボード操作によってフォーカスを取得すると、編集コントロールの内容全体が選択されます。コントロールがマウス クリックでフォーカスを取得した場合、コンテンツがすべて選択されるわけではありません。その場合は、 を押すだけでCTRL+Aすべてを選択できます。ダブルクリックすると、マウスの下にある単語が選択されます。これはすべて、基になる Windows コントロールによって実装される標準的な動作です。
現在選択されている回答に従って、イベントに応じて選択を変更するOnClickと、マウスのクリックでキャレットを移動できないことがわかります。これは非常に直感に反する動作です。
これは、コントロールの動作をデフォルトから変更する際に非常に注意する必要がある理由の典型的な例です。テスト時に特定のユースケースを見逃さないようにするのは非常に簡単ですが、ユーザーがプログラムを手に入れると、そのようなすべての問題を確実に見つけることができます。
安全にできることは、から呼び出すことSelectAllですOnDblClick。これには、迷惑な副作用はないと思います。
別のオプションはSelectAll、フォーカスが編集コントロールに切り替わったときに呼び出すことですが、コントロールをクリックするたびに呼び出すことはできません。これは、ユーザーにとっては少し奇妙に感じるかもしれませんが、個人的には、この一連のアクションを実行することは合理的だと思います。OnEnterこれを行うには、編集コントロールのイベントを処理する必要があります。
procedure TForm1.Edit1Enter(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
ユーザーがクリックするたびに TEdit1 のすべてのテキストを選択する方法
VCL エディターで Edit1 を選択し、OnClickイベントをダブルクリックします。

procedure TForm13.Edit1Click(Sender: TObject);
begin
Edit1.SelectAll;
end;
このイベントをボタンなどの別のコントロールにリンクすることもできます。
ボタンを選択し、V矢印を選択してクリックし、リンクするイベントを選択します。

と の両方が同じイベントEdit1.OnClickにButton1.OnClickリンクするようになりました。
ユーザーがクリックするたびに TEdit1 のテキストを選択する方法:
procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.SelStart:= 1;
Edit1.SelLength:= 2;
end;