Delphi VCL 在TRichEdit控件中设置WordWrap属性后无法自动换行的问题
2016-08-26 15:33
627 查看
最近在使用RAD XE7时,在WIN10上开发一个类似记事本的工具,使用的是TRichEdit控件,在实现自动换行功能时,发现设置WordWrap后无法自动换行,经过检查发现和滚动条ScrollBars属性有关系,只要设置水平滚动条( RichEdit1.ScrollBars := TScrollStyle.ssBoth; 或 RichEdit1.ScrollBars := TScrollStyle.ssHorizontal;)均会导致WordWrap失效。
印象中在XP和WIN7上并没有碰到该问题,而查看了VCL实现方法应该和以前Delphi7差别不大,推测可能和WIN10后的TRichEdit控件有关系,毕竟该控件依赖于系统的RICHEDIT控件。
解决方法有如下2种,推荐第二种:
方法一(重载TRichEdit):
上面这种方法是在CreateParams中自动去掉 ES_AUTOHSCROLL 和 WS_HSCROLL 属性,相当于在设置WordWrap=True时,去掉水平滚动条。
不过这种方法需要将重载的控件动态创建或安装到IDE使用,相对麻烦,
所以推荐用下面的方法,在Form中多几行代码即可(会影响程序的运行效率,但微乎其微,关系不大)
方法二:
印象中在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;
相关文章推荐
- duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- 关于服务端控件textbox的disabled属性设置为disabled后在服务端无法取值的问题
- 解决Delphi无法设置工程属性的问题
- duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
- Edit控件换行、自动滚屏、设置焦点技巧
- IE中document.createElement的iframe无法设置属性name问题
- VCL(四)如何写出象TTable, TAdoTable ,Tquery,TAdoQuery 等控件一样的自动下拉显示Field属性
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
- ComboBox控件 “设置 DataSource 属性后无法修改项集合”
- VCL(四) 如何写出象TTable, TAdoTable ,Tquery,TAdoQuery 等控件一样的自动下拉显示Field属性
- Delphi和BCB中属性设置问题
- WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题解决方案
- 控件创建后,先设置属性,再添加到页面,导致工作不正常的问题
- 关于设置sql server 2008服务器属性时出现的无法加载xplog70.dll文件的问题
- FORM窗体 控件设置DOCK属性问题
- 讨论windows7下 IE8.0不能打开网页,但是能够上QQ问题。Windows 无法自动检测此网络的代理设置。
- Delphi中多线程用Synchronize实现VCL数据同步显示 解决在线程中操作控件出现问题
- 使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题