自制的编辑器在处理水平滚动时遇到这样的问题:文本区有英文字符和汉字, 当水平滚动在向右移动一个字符时(移动是以一个字符为单位),也就是当第一行最左边的字符为英文字母, 第二行最左边的字符为一个汉字时,则第二行会出现乱码,(正常情况下,第二行应出现半个汉字, 如: TMemo或者Delphi IDE编辑器)目前仍无法解决. TMyEdit = class(TCustomControl)
private
:
procedure WMHScroll(var Msg: TWMScroll); message WM_HSCROLL;
:
下面是实现:
procedure TMyEdit .WMHScroll(var Msg: TWMScroll);
begin
case Msg.ScrollCode of
SB_TOP: FLeftChar := 1;
SB_BOTTOM: FLeftChar := MaxLeftChar;
//滚动时出现半个汉字,使该汉字其后的都变成了乱码,目前仍无法解决
SB_LINEDOWN: FLeftChar := FLeftChar + 1;
SB_LINEUP: FLeftChar := FLeftChar - 1;
SB_THUMBPOSITION,
SB_THUMBTRACK: FLeftChar := Msg.Pos;
end;
end;注:
1. Delphi原生控件TMemo和TRichEdit都解决了上述问题, 但从VCL中我并没有获得
更多有关水平滚动事件处理的例程, 原因可能是TMemo和TRichEdit其实是封装了微软操作系统本身的控件.
2. 之所以从TCustomControl派生是因为我要绘制自己的编辑器界面解决上述问题将立即给分, 在线守候...
private
:
procedure WMHScroll(var Msg: TWMScroll); message WM_HSCROLL;
:
下面是实现:
procedure TMyEdit .WMHScroll(var Msg: TWMScroll);
begin
case Msg.ScrollCode of
SB_TOP: FLeftChar := 1;
SB_BOTTOM: FLeftChar := MaxLeftChar;
//滚动时出现半个汉字,使该汉字其后的都变成了乱码,目前仍无法解决
SB_LINEDOWN: FLeftChar := FLeftChar + 1;
SB_LINEUP: FLeftChar := FLeftChar - 1;
SB_THUMBPOSITION,
SB_THUMBTRACK: FLeftChar := Msg.Pos;
end;
end;注:
1. Delphi原生控件TMemo和TRichEdit都解决了上述问题, 但从VCL中我并没有获得
更多有关水平滚动事件处理的例程, 原因可能是TMemo和TRichEdit其实是封装了微软操作系统本身的控件.
2. 之所以从TCustomControl派生是因为我要绘制自己的编辑器界面解决上述问题将立即给分, 在线守候...
解决方案 »
- StringGrid怎样合并单元格,不用插件!
- 求dephi打印程序?
- 一个ADO的数据缓冲问题
- 深圳程序员的社团,程序员在深圳以QQ群的方式建立,目前已经有5个QQ群超过750人
- FASTREPORT如何實現如下功能,盼指點,謝!
- ◆◆◆关于Delphi编译器优化的疑惑◆◆◆
- 怎样才能使delphi不弹出异常提示框
- 将数据库表中的字段名添加到ComboBox怎么做?
- 为什么出错:“行句柄引用了一个已被删除的行或被标识未被”和“删除的行”?
- 紧急求救:quickrep中列数太多,preview只能看到A4页面宽度的内容,即使更改ORIENTATION为LANDSCAPE也不行。注:我的计算机上没有安装打印机。
- TDBcombobox 和Combobox 有什么不同
- 请问这个问题怎么解决?
);
|
|China
|中国人
|
|
+----------------------------------------------
如上所示,水平往右滚动一个字符后: +---------------------------------------------
|
|hina
|?国人
|
|
+----------------------------------------------?处应为"中"的右半边, 但实际上"中国人"那一行确是乱字符...