Delphi VCL 在TRichEdit控件中设置WordWrap属性后无法自动换行的问题

最近在使用RAD XE7时,在WIN10上开发一个类似记事本的工具,使用的是TRichEdit控件,在实现自动换行功能时,发现设置WordWrap后无法自动换行,经过检查发现和滚动条ScrollBars属性有关系,只要设置水平滚动条( RichEdit1.ScrollBars := TScrollStyle.ssBoth; 或 RichEdit1.ScrollBars := TScrollStyle.ssHorizontal;)均会导致WordWrap失效。

 

印象中在XP和WIN7上并没有碰到该问题,而查看了VCL实现方法应该和以前Delphi7差别不大,推测可能和WIN10后的TRichEdit控件有关系,毕竟该控件依赖于系统的RICHEDIT控件。

 

解决方法有如下2种,推荐第二种:

方法一(重载TRichEdit):

type
TRichEditHotFix = class(TRichEdit) private protected procedure CreateParams(var Params: TCreateParams);override; end; implementation { TRichEditHotFix } procedure TRichEditHotFix.CreateParams(var Params: TCreateParams); const WordWraps: array[Boolean] of DWORD = (0, ES_AUTOHSCROLL or WS_HSCROLL); begin inherited; // 修复WordWrap=True时没有自动换行的问题(WIN10以前的版本应该不存在该问题) with Params do Style := Style and not WordWraps[WordWrap]; end;

上面这种方法是在CreateParams中自动去掉 ES_AUTOHSCROLL 和 WS_HSCROLL 属性,相当于在设置WordWrap=True时,去掉水平滚动条。

不过这种方法需要将重载的控件动态创建或安装到IDE使用,相对麻烦,

所以推荐用下面的方法,在Form中多几行代码即可(会影响程序的运行效率,但微乎其微,关系不大)

方法二:

procedure TForm1.ChangeWordWrap();
begin
  RichEdit1.WordWrap := not RichEdit1.WordWrap;
  if RichEdit1.WordWrap then
    RichEdit1.ScrollBars := TScrollStyle.ssVertical
  else
    RichEdit1.ScrollBars := TScrollStyle.ssBoth;
end;

 

转载于:https://www.cnblogs.com/caibirdy1985/p/5810575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值