有如下代码:
RichEdit1.Lines.Add('サシスセ');
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=8; //下面总是假设使用4个日文作为测试
RichEdit1.SelAttributes.Name:='华文行楷';
执行时,并不能改变日文字符的字体。但是,如果把日文字符,用键盘,一个一个地输入,然后再执行
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=8;
RichEdit1.SelAttributes.Name:='华文行楷';
却能改变字体。如果把日文字符,用键盘打在记本事上(是因为记事本不带格式),再通过复制,粘贴到RichEdit上,然后再执行
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=8;
RichEdit1.SelAttributes.Name:='华文行楷';
同样不能改变字体。请问哪位知道该怎么办?手工一个一个输入,入用Add或粘贴方式输入进去的有什么不同吗?
因为我须要从数据库中读出大量的数据,然后为每行指定不同的字体Add到RichEdit里面,而带有日文字符的行不能指定字体。

解决方案 »

  1.   

    richeidt经常会发生异常错误,呵呵,我虽然加了不可见字符的屏蔽
    但还是会出错,郁闷了很久,都没办法完全解决.
      

  2.   

    给一个代码给你参考一下.
    在 RichEdit 中实现代码着色下面的代码将以指定颜色对一些指定单词着色,就象delphi中的代码编辑器那样。procedure CodeColors(Form : TForm;Style : String; RichE : TRichedit;InVisible : Boolean);const// 符号...CodeC1: array[0..20] of String = ('#','$','(',')','*',',','.','/',':',';','[',']','{','}','<','>','-','=','+','''','@');// 保留字...CodeC2: array[0..44] of String = ('and','as','begin','case','char','class','const','downto','else','end','except','finally','for','forward','function','if','implementation','interface','is','nil','or','private','procedure','public','raise','repeat','string','to','try','type','unit','uses','var','while','external','stdcall','do','until','array','of','in','shr','shl','cos','div');varFoundAt : LongInt;StartPos, ToEnd, i : integer;OldCap,T : String;FontC, BackC, C1, C2 ,C3 ,strC, strC1 : TColor;beginOldCap := Form.Caption;with RichE dobeginFont.Name := 'Courier New';Font.Size := 10;if WordWrap then WordWrap := false;SelectAll;SelAttributes.color := clBlack;SelAttributes.Style := [];SelStart := 0;if InVisible thenbeginVisible := False;Form.Caption := 'Executing Code Coloring...';end;end;BackC := clWhite; FontC := clBlack;C1 := clBlack; C2 := clBlack; C3 := clBlack;strC := clBlue; strC1 := clSilver;if Style = 'Twilight' thenbeginBackC := clBlack; FontC := clWhite;C1 := clLime; C2 := clSilver; C3 := clAqua;strC := clYellow; strC1 := clRed;endelseif Style = 'Default' thenbeginBackC := clWhite; FontC := clBlack;C1 := clTeal; C2 := clMaroon; C3 := clBlue;strC := clMaroon; strC1 := clSilver;endelseif Style = 'Ocean' thenbeginBackC := $00FFFF80; FontC := clBlack;C1 := clMaroon; C2 := clBlack; C3 := clBlue;strC := clTeal; strC1 := clBlack;endelseif Style = 'Classic' thenbeginBackC := clNavy; FontC := clYellow;C1 := clLime; C2 := clSilver; C3 := clWhite;strC := clAqua; strC1 := clSilver;endelsebeginwith RichE dobeginT := '{'+Style+' = Invalid Style [Default,Classic,Twilight,Ocean] ONLY! }';Lines.Insert(0,T);StartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(T, StartPos, ToEnd, [stWholeWord]);SelStart := FoundAt;SelLength := Length(T);SelAttributes.Color := clRed;SelAttributes.Style := [fsBold];StartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText('ONLY!', StartPos, ToEnd, [stWholeWord]);SelStart := FoundAt;SelLength := 4;SelAttributes.Color := clRed;SelAttributes.Style := [fsBold,fsUnderLine];end;end;RichE.SelectAll;RichE.color := BackC;RichE.SelAttributes.color := FontC;for i := 0 to 100 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(IntToStr(i), StartPos, ToEnd, [stWholeWord]);while (FoundAt <> -1) dobeginSelStart := FoundAt;SelLength := Length(IntToStr(i));SelAttributes.Color := C1;SelAttributes.Style := [];StartPos := FoundAt + Length(IntToStr(i));FoundAt := FindText(IntToStr(i), StartPos, ToEnd, [stWholeWord]);end;end;end;for i := 0 to 20 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(CodeC1[i], StartPos, ToEnd, []);while (FoundAt <> -1) dobeginSelStart := FoundAt;SelLength := Length(CodeC1[i]);SelAttributes.Color := C2;StartPos := FoundAt + Length(CodeC1[i]);FoundAt := FindText(CodeC1[i], StartPos, ToEnd, []);end;end;end;for i := 0 to 44 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(CodeC2[i], StartPos, ToEnd, [stWholeWord]);while (FoundAt <> -1) dobeginSelStart := FoundAt;SelLength := Length(CodeC2[i]);SelAttributes.Color := C3;SelAttributes.Style := [fsBold];StartPos := FoundAt + Length(CodeC2[i]);FoundAt := FindText(CodeC2[i], StartPos, ToEnd, [stWholeWord]);end;end;end;Startpos := 0;with RichE dobeginFoundAt := FindText('''', StartPos, Length(Text), []);while FoundAt <> -1 dobeginSelStart := FoundAt;Startpos := FoundAt+1;FoundAt := FindText('''', StartPos, Length(Text), []);if FoundAt <> -1 thenbeginSelLength := (FoundAt - selstart)+1;SelAttributes.Style := [];SelAttributes.Color := strC;StartPos := FoundAt+1;FoundAt := FindText('''', StartPos, Length(Text), []);end;end;end;Startpos := 0;with RichE dobeginFoundAt := FindText('{', StartPos, Length(Text), []);while FoundAt <> -1 dobeginSelStart := FoundAt;Startpos := FoundAt+1;FoundAt := FindText('}', StartPos, Length(Text), []);if FoundAt <> -1 thenbeginSelLength := (FoundAt - selstart)+1;SelAttributes.Style := [];SelAttributes.Color := strC1;StartPos := FoundAt+1;FoundAt := FindText('{', StartPos, Length(Text), []);end;end;end;if InVisible thenbeginRichE.Visible := True;Form.Caption := OldCap;end;RichE.SelStart := 0;end;
     
       
      

  3.   

    现在的关键问题是,不能对粘贴和用代码Add进来的日文字符进行更改字体。颜色可以改,字体大小也可以改,就是不能改字体。中英文字符都不会出问题,就是小日本的东西不行。
      

  4.   

    可能性之一,是你设置的richedit的字符集charset不对。
    你试试修改一下成日文的字符集看看。
      

  5.   

    大家可以动手试试啊,只须一个按钮一个RichEdit就可以了,很简单。我试过把charset设置成SHIFTJIS_CHARSET,日文的字符集,也是不行。还真的很奇怪呢!
      

  6.   

    通过属性面板设置redt1的字符集得的SelAttributes.Name 都是日文字符集可是设置 通过代码设置 redt1.DefAttributes.Name:='华文行楷';
    得到的SelAttributes.Name 是'华文行楷' 很是奇怪
      

  7.   

    更让我感到奇怪的是,干嘛用键盘一个一个日文输入到RichEdit里面,然后所有设置都正常呢?同样的字符,用Add或复制粘贴进去的,为什么就不能设置呢?真是奇哉怪也!!
      

  8.   

    我测试了,看来对日文支持有问题,中文没问题,抵制日货??呵呵你可以加一个showmessage(RichEdit复制的字符串的长度)看一下长度