fastcoloredtextbox 中文不重叠
DrawLineChars方法:
private void DrawLineChars(PaintEventArgs e, int firstChar, int lastChar, int iLine, int iWordWrapLine, int x,
int y)
{
Line line = lines[iLine];
LineInfo lineInfo = LineInfos[iLine];
int from = lineInfo.GetWordWrapStringStartPosition(iWordWrapLine);
int to = lineInfo.GetWordWrapStringFinishPosition(iWordWrapLine, line);
int startX = x;
if (startX < LeftIndent)
firstChar++;
lastChar = Math.Min(to - from, lastChar);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//folded block ?
if (lineInfo.VisibleState == VisibleState.StartOfHiddenBlock)
{
//rendering by FoldedBlockStyle
FoldedBlockStyle.Draw(e.Graphics, new Point(startX + firstChar * CharWidth, y),
new Range(this, from + firstChar, iLine, from + lastChar + 1, iLine));
}
else
{
//render by custom styles
StyleIndex currentStyleIndex = StyleIndex.None;
int iLastFlushedChar = firstChar - 1;
int isChinaese = 0;
SizeF sizef = GetCharSize(new Font("宋体", 10), '中');
int len = (int)sizef.Width - CharWidth;
int nextLen = 0;
for (int iChar = firstChar; iChar <= lastChar; iChar++)
{
StyleIndex style = line[from + iChar].style;
if (IsChina(line[from + iChar].c))
{
isChinaese++;
}
if (currentStyleIndex != style)
{
FlushRendering(e.Graphics, currentStyleIndex,
new Point(startX + (iLastFlushedChar + 1) * CharWidth+nextLen, y),
new Range(this, from + iLastFlushedChar + 1, iLine, from + iChar, iLine));
iLastFlushedChar = iChar - 1;
currentStyleIndex = style;
if (isChinaese > 0)
{
nextLen = len * isChinaese;
}
}
}
FlushRendering(e.Graphics, currentStyleIndex, new Point(startX + (iLastFlushedChar + 1) * CharWidth+nextLen, y),
new Range(this, from + iLastFlushedChar + 1, iLine, from + lastChar + 1, iLine));
}
//draw selection
if (!Selection.IsEmpty && lastChar >= firstChar)
{
e.Graphics.SmoothingMode = SmoothingMode.None;
var textRange = new Range(this, from + firstChar, iLine, from + lastChar + 1, iLine);
textRange = Selection.GetIntersectionWith(textRange);
if (textRange != null && SelectionStyle != null)
{
SelectionStyle.Draw(e.Graphics, new Point((startX + (textRange.Start.iChar - from) * CharWidth) * 2, y),
textRange);
}
}
}
//判断是否是中文
public bool IsChina(char c)
{
bool BoolValue = false;
if (Convert.ToInt32(c) < Convert.ToInt32(Convert.ToChar(128)))
{
BoolValue = false;
}
else
{
return BoolValue = true;
}
return BoolValue;
}
//IME mode
if (range.tb.ImeAllowed)
for (int i = range.Start.iChar; i < range.End.iChar; i++)
{
SizeF size = FastColoredTextBox.GetCharSize(f, line[i].c);
var gs = gr.Save();
//float k = size.Width>range.tb.CharWidth + 1?range.tb.CharWidth / size.Width:1;
//gr.TranslateTransform(x, y+(1-k)*range.tb.CharHeight/2);
//gr.ScaleTransform(k, (float)Math.Sqrt(k));
//gr.DrawString(line[i].c.ToString(), f, ForeBrush, 0, 0, stringFormat);
//gr.Restore(gs);
if(size.Width>range.tb.CharWidth*1.5f)
gr.DrawString(line[i].c.ToString(), f, ForeBrush, x, y+range.tb.CharHeight/4, stringFormat);
else
gr.DrawString(line[i].c.ToString(), f, ForeBrush, x, y, stringFormat);
if (IsChina(line[i].c))
{
x += size.Width;
}
else
{
x += dx;
}
}
fastcoloredtextbox 中文不重叠的更多相关文章
- cmder中文显示相关问题解决方案(1.3以上版本)
cmder虽然Windows命令行的进阶版,虽然好看易用,但其中文编码一直是个问题.网上有不少博客给出解决方案,大部分都已因为版本更新失效.本文解决方案针对1.3以上版本的cmder用户 中文字体重叠 ...
- Window 命令行神器:cmder
http://cmder.net/ https://github.com/cmderdev/cmder/releases/ 官网下载地址 http://www.360doc.com/content ...
- cmder中文乱码、文字重叠等问题
对于玩linux的同学来说,win7中的cmd弱爆了,今天我在微博中看到cmder这个工具,自己安装了,觉得不错,就此分享给大家 下载安装到这里http://bliker.github.io/cmde ...
- fastcoloredtextbox控件 看下是否解决了中文
该控件解决中文网址 未测试是否解决 想保存 http://www.dullong.com/share-a-code-can-be-highlighted-components-fastco ...
- 中文分词工具探析(一):ICTCLAS (NLPIR)
1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...
- linux中字体的安装以及Terminal字体重叠问题解决
安装wps的时候,经常会提示你系统字体缺失,这些字体网上都有,就不分享了,直接讲安装吧. 就比如这个Wingdings字体,在字体目录中新建一个目录Wingdings,将ttf字体文件复制进去,在终端 ...
- 【python之路2】CMD中执行python程序中文显示乱码
在IDLE中执行下面代码,中文显示正常: # -*- coding:utf-8 -*- st=raw_input("请输入内容")print st 但在CMD中执行e:\hello ...
- 【APP设计利器】Sketch 41 Mac中文破解版(含汉化插件)
Sketch是一款拥有美观界面和强大功能适用于所有设计师的专业矢量绘图工具.它旨在为美术设计师创造出一款更优秀的作品,不是复制品,而是提升品.Sketch简约的设计是基于无限的规模和层次的绘图空间,免 ...
- UTF-8和GBK等中文字符编码格式介绍及相互转换
我们有很多时候需要使用中文编码格式,比如gbk.gb2312等,但是因为主要针对中文编码设置,因此并不完全通用,这样一来就有了在各编码间相互转换的需求,比如和UTF8的转换.可是在我使用的过程中,却发 ...
随机推荐
- SQL SA密码丢失
------------记不清了,以下似乎是这样操作的-----NET STOP MSSQLSERVER Net Start MSSQLServer /m"SQLCMD" 安装并使 ...
- Zabbix安装图解教程
说明: 操作系统:CentOS IP地址:192.168.21.127 Web环境:Nginx+MySQL+PHP zabbix版本:Zabbix 2.2 LTS 备注:Linux下安装zabbix需 ...
- Java类实例化时候的加载顺序
面试试题中经常考到此问题,现在做进一步的总结: public class Student { public Student(String name){ System.out.println(name) ...
- Maven学习(五)-- 聚合与继承
标签(空格分隔): 学习笔记 Maven的聚合特性能够把项目的各个模块聚合在一起构建: Maven的继承特性能够帮助抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能够促进各个模块配置的一致性 ...
- Hadoop简介
原来:计算效率低 现在:成本降低,能用PC机,就不用大型机和高端存储了:软件容错硬件故障视为常态,通过软件保证可靠性:简化并行分布式计算,无需控制节点同步和数据交换,但是谷歌只发表了相关技术论文,没有 ...
- mysql简介
1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数 ...
- python核心编程第六章练习6-15
转换.(a)给出两个可识别格式的日期,比如MM/DD/YY或者DD/MM/YY格式.计算出两个日期之间的天数.(b)给出一个人的生日,计算此人从出生到现在的天数,包括所有的闰月.(c)还是上面的例子, ...
- 【修改端口号】linux下修改apache,nginx服务端口号
一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...
- yii2-basic后台管理功能开发之二:创建CRUD增删改查
昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...
- tiny_cnn 阅读(1)
从今天起, 我会每天把阅读tiny_cnn的阅读心得提交到博客园中希望大家在这个平台上可以多多交流: 关于如果阅读代码? 抓住重点,忽略细节 首先打开从github上下载的文件: 通过csdn和网上搜 ...