delphi – 如何使TSynEdit的Wordwrap与TMemo相同?
我正在使用TSynEdit作为更加用户友好的TMemo,主要用于高级快捷方式,UNDO / REDO等.
其他的东西都没问题,除了wordwrap行为,请查看下面附带的截图,SynEdit在最左侧显示一个奇怪的空间. 如何避免这种情况并让它看起来像TMemo? TSynEdit的关键属性设置: synEdit1.UseCodeFolding := False; synEdit1.Options := [eoAutoIndent,eoDragDropEditing,eoEnhanceEndKey,eoGroupUndo,eoScrollPastEol,eoSmartTabDelete,eoSmartTabs,eoTabsToSpaces]; synEdit1.ScrollBars := ssVertical; synEdit1.TabWidth := 4; synEdit1.WantTabs := True; synEdit1.WordWrap := True; synEdit1.FontSmoothing := fsmNone; 解决方法
这不是q的完整,经过测试的答案,但可能提供确定的
读者是一个功能性解决方案的跳跃点. TSynEdit的自动换行行为由其当前行为决定 从第560行开始,有一段代码,据我所知, if Editor.IsWordBreakChar(vRunner^) then begin vRowEnd := vRunner; break; end; Dec(vRunner); vRunner和vRowEnd是WrapLines方法中使用的许多PWideChar变量之一. 观察这段代码的行为,它在while循环中(寻找一个自动换行的地方),它运行 将代码更改为 if Editor.IsWordBreakChar(vRunner^) then begin {ma} Inc(vRunner); // WARNING: not fully tested vRowEnd := vRunner; break; end; Dec(vRunner); 强制vRunner指针转发超过字断符字符,以便空格包含在行的末尾而不是下一行的开头,因此SynEdit 就个人而言,我不会使用这种改变,而是看看我是否可以说服SynEdit开发人员提供官方解决方案.如果我确实使用了这个改变如上所示,我当然不会通过更改SynEditWordWrap.Pas的来源来做到这一点,我会通过编写TSynWordWrapPlugin的替换来做到这一点,并且我将检查inc(vRunner)不超过用于执行自动换行的缓冲区的有效边界. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |