Cảm ơn mọi người vì câu trả lời của bạn.
Như có vẻ là không có cách nào "thích hợp" để làm điều này, tôi đã nghĩ ra giải pháp sau đây:
unit TRichEditRemoveSelectionBar;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
procedure RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
B: Boolean = False;
implementation
{$R *.dfm}
// ------------------------------------------------------------------------- //
procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (GetCursor <> Screen.Cursors[crDefault]) and
(GetCursor <> Screen.Cursors[crIBeam]) then
begin
SetCursor(Screen.Cursors[crIBeam]);
B := True;
end else
B := False;
end;
procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if B then
begin
SetCursor(Screen.Cursors[crIBeam]);
RichEdit1.SelLength := 0;
end;
end;
procedure TForm1.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if B then
SetCursor(Screen.Cursors[crIBeam]);
end;
// ------------------------------------------------------------------------- //
end.
Nó không phải thanh lịch ở tất cả, nhưng nó được công việc làm.
Lưu ý rằng mã này không cho phép nhấp đúp vào lựa chọn hàng đầy đủ và nó không xử lý lựa chọn văn bản đầy đủ ba lần nhấp. Ví dụ, bạn có thể phải sử dụng một lớp đánh chặn.
+1 câu hỏi hay và tôi không nghĩ rằng bạn có bất kỳ cách nào để tắt hành vi này –