如何从TRichEdit控件中完全删除选择栏?

jed*_*der 9 delphi richedit textselection

TRichEdit控件的每一行的左侧,有一个不可见的空间,光标变为右上箭头,当您单击那里时,整个行被选中.当TRichEdit的文本对齐方式为中心或右侧时,很容易看到它.我相信这个空间被称为选择栏.

TMemo控件中不存在这样的条.

我的问题:

如何删除此选择栏,以便光标行为与中的相同TMemo

我正在使用Delphi 7,没有TRichEdit属性来控制这种行为.

ECO_SELECTIONBAR您可以对EM_SETOPTIONS消息使用一个值,但它只添加或删除选择栏的一小部分(仅当您要将选择栏添加到TRichEdit具有左对齐的选区时才有用).

Rem*_*eau 0

尝试使用从 RichEdit 中SetWindowLong()删除窗口样式,例如:ES_SELECTIONBAR

dwStyle := GetWindowLong(RichEdit1.Handle, GWL_STYLE);
SetWindowLong(RichEdit1.Handle, GWL_STYLE, dwStyle and not ES_SELECTIONBAR);
Run Code Online (Sandbox Code Playgroud)

或者,从 派生一个新组件TRichEdit,或使用拦截器类来重写虚拟CreateParams()方法以删除样式:

type
  TMyRichEdit = class(TRichEdit)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

Procedure TMyRichEdit.CreateParams(var Params: TCreateParams);
Begin
  inherited;
  Params.Style := Params.Style and not ES_SELECTIONBAR;
End;
Run Code Online (Sandbox Code Playgroud)

  • ES_SELECTIONBAR 永远不会添加到样式中,因此删除不存在的内容不会改变任何内容。 (3认同)