自制的编辑器在处理水平滚动时遇到这样的问题:文本区有英文字符和汉字, 当水平滚动在向右移动一个字符时(移动是以一个字符为单位),也就是当第一行最左边的字符为英文字母, 第二行最左边的字符为一个汉字时,则第二行会出现乱码,(正常情况下,第二行应出现半个汉字, 如: 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派生是因为我要绘制自己的编辑器界面解决上述问题将立即给分, 在线守候...

解决方案 »

  1.   

    function IsDBCSLeadByte //////判断是否是双字节字符。 determines whether a character is a lead byte ?that is, the first byte of a character in a double-byte character set (DBCS). BOOL IsDBCSLeadByte(    BYTE TestChar  // character to test 
       );
      

  2.   

    +---------------------------------------------
    |
    |China
    |中国人
    |
    |
    +----------------------------------------------
    如上所示,水平往右滚动一个字符后:  +---------------------------------------------
    |
    |hina
    |?国人
    |
    |
    +----------------------------------------------?处应为"中"的右半边, 但实际上"中国人"那一行确是乱字符...