Чтобы выделить весь текст в TEdit
контроля, когда получает управление фокусом просто обрабатывать OnEnter
событие и:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
Вы не можете использовать Edit1.SelectAll
, так как поведение по умолчанию (что происходит после того, как OnEnter
) удаляет все выбранные в Edit контроль. Проводка сообщения гарантирует, что он будет обработан после завершения оставшегося по умолчанию поведения по умолчанию.
Чтобы полностью эмулировать адресную строку в этих браузерах, поле также отменяет при выходе из управления, так и в OnExit
:
procedure TForm.Edit1Exit(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, 0);
end;
поле Браузер также позволяет выбрать текст, когда первый ввод, так что в этом Если вам нужно быть немного осторожнее. Как взломать вы можете сделать это с вставкой, но в идеале вы бы сделать пользовательский элемент управления:
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, равное нулю, и поэтому сфокусируется, когда форма создана (и поэтому выбрана). Это повлияет только на первый щелчок в элементе управления.
AutoSelect: = False? –
@SertacAkyuz Это не работает – Wosi