要選擇一個TEdit
控制的所有文字,當控件獲得焦點只是處理OnEnter
事件:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
不能使用Edit1.SelectAll
因爲默認的行爲(其中OnEnter
後發生)在編輯清除所有選擇控制。發佈消息可確保在剩餘的默認行爲完成後處理該消息。
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;
用tab鍵控制的情況下,KeyUp
處理交易。唯一剩下的奇怪情況是,如果編輯控件的TabOrder爲零,並且因此在創建表單(因此被選中)時關注它。這會影響第一次點擊進入控件。
AutoSelect:= False? –
@SertacAkyuz這不起作用 – Wosi