由于做嵌入式开发,PC上简单的RichEdit控件这么简单的功能只能自己实现。
临到做时才发现做一些基础控件实在很痛苦。
初步设想字符串的排布分为:段,行,字符的概念。
程序可以同时加载若干段。
段:表示一个以\r\n为结束的字符串
行:若干行表示一段
字符:若干字符表示为一行。但真正做的时候,由于要有滚动条,并支持自动换行的概念,发现座标的确定用行来是最直观的,但应对不同宽度的屏,只有段的概念才能使相同的段在不同的屏上表示时,概念是一致的。感觉好累
临到做时才发现做一些基础控件实在很痛苦。
初步设想字符串的排布分为:段,行,字符的概念。
程序可以同时加载若干段。
段:表示一个以\r\n为结束的字符串
行:若干行表示一段
字符:若干字符表示为一行。但真正做的时候,由于要有滚动条,并支持自动换行的概念,发现座标的确定用行来是最直观的,但应对不同宽度的屏,只有段的概念才能使相同的段在不同的屏上表示时,概念是一致的。感觉好累
解决方案 »
- Delphi 2009 调用 dll时 MessageDlg "Cannot assign a TFont to a TFont"
- 问一个关于服装软件的色码和尺码的问题
- 关于“缺少更新的或刷新的键列信息”的问题,需要帮助
- Xpress Barcode ActiveX的注册问题(vb转delphi)
- 有无人是做医院信息系统的?或者在医院信息科工作的?我想问个奇怪问题!
- 有关服务器信息中转(聊天的实现)
- 怎样建立一个Socket?
- 有一个MDI窗体,其他都是fsNormal类型的窗体,让每个打开的fsNormal窗体都显示在MDI窗体之上,但范围不能超出MDI窗体,如何做?
- 怎么选网络上的计算机?
- 在过程中加上Sender: TObject有何必要,它是什么意思,自定义过程中加上他与不加有何区别?
- 如果快速读取图片到图片框
- 远程播放语音的问题
目前我用的是等宽字符的概念,即每个字符的宽度都相等,两个字符宽度等于一个汉字长度。这样设计的想法是看notepad或是其它的如ultraedit编辑器都是这样,并且这样对于点击屏幕定位到具体的行列中概念上容易理解,易于实现。
初步设想段的概念,段中分配空间,存储具体字符串,包含一个行的结构,每次段的内容有所变动或是显示页面宽度有所变动时,重新计算段中行的集合,pbegin表示计算后指向段中字符的位置,len表示本行的长度。
struct EditLine{
TCHAR* pbegin;
int len;
};
struct EditSect{
TCHAR* pszChar;
int nLength;
vector<EditLine> lines;
};
经过这样的设计,能够实现点击定位,不过由于所有概念都是建立在段的基础之上的,总是通过段来寻找行,概念上很不直观,在写的过程中比较痛苦。另外,由于实际情况是字符并非是等宽的,造成的结果是为了实现等宽的效果,必须一个一个的画出来,效率上很不好,并且字符间距很不自然。
寻求方法,是不是有某个函数,设置好后所有的字符大不都是等宽的了?