制御ゲインは、単にOnEnter
イベントを処理し、焦点を合わせたときにTEdit
コントロール内のすべてのテキストを選択するには:
(
OnEnter
後に発生する)デフォルトの動作は、編集のいずれかの選択をクリアしますので、あなたが
Edit1.SelectAll
を使用することはできません
procedure TForm1.Edit1Enter(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
コントロール。メッセージを送信すると、残りのデフォルト動作が完了した後にメッセージが確実に処理されます。この中のSOブラウザフィールドはまた、第1のテキスト入力を選択することができます
procedure TForm.Edit1Exit(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, 0);
end;
:コントロールを終了するときOnExit
におけるように、完全にこれらのブラウザのアドレスバーをエミュレートする
、フィールドも、選択解除しますあなたはもう少し慎重にする必要があります。あなたは、インターポーザでそれを行うことができますが、理想的なカスタムコントロールを作ると思いますハックのように:
type
TEdit = class(Vcl.StdCtrls.TEdit)
private
FDoEnterSelect : boolean;
end;
、その後
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.FDoEnterSelect := true;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, 0);
end;
procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Edit1.FDoEnterSelect and
(Edit1.SelLength = 0) then
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
Edit1.FDoEnterSelect := false;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Edit1.FDoEnterSelect := false;
end;
コントロールにタブ移動の場合とKeyUp
ハンドラを扱っています。残っている奇妙なケースは、編集コントロールのTabOrderが0であるため、フォームが作成されたときにフォーカスが当てられているためです。これはコントロールへの最初のクリックにのみ影響します。
AutoSelect:= False? –
@SertacAkyuzそれは動作しません – Wosi