请教中文颜色问题(50分)

  • 主题发起人 主题发起人 bird_fox
  • 开始时间 开始时间
B

bird_fox

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在onchange事件中(有中文输入时),控制richedit内的中文文本颜色,在98中实现的很好,但同样的代码
2000中文本颜色却不变,头痛头痛,请教高手.代码类似下面.

procedure TForm1.RichEdit1Change(Sender: TObject);
begin
Richedit1.SelStart:=i;(用i控制选中位置)
Richedit1.SelLength:=2;
Richedit1.SelAttributes.Color:=clRed;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var Fmt :TCharFormat2;
begin
Fmt.cbSize := SizeOf(Fmt);//这里放传递的结构大小,系统通过这个知道传递的是CharFormat还是CharFormat2
Fmt.dwMask := CFM_COLOR or CFM_BACKCOLOR or CFM_Weight;//告诉系统只有字体颜色和背景颜色两个字段的值有效
Fmt.crTextColor := clRed;//设置字体颜色
Fmt.crBackColor := clwhite;//设置字体背景色
fmt.wWeight :=0;
// RichEdit1.SelAttributes
RichEdit1.Perform(EM_SETCHARFORMAT,SCF_SELECTION,integer(@Fmt));//发EM_SETCHARFORMAT消息给RichEdit
//其中SCF_SELECTION表示该设置只对选择的文字有效,具体用法参考win32 SDK HELP
end;
 
首先感谢回复,但暂时还没看懂,容我研究一下
 
请问TcharFormat2 是什么,我一编译,就说undeclare
还有perform中的 最后一个参数是做什么用的,在哪里能查到.
 
还是不行,我做了个函数,但用在richedit onchange中还是不行
procedure Tform1.Setcolor;
var Fmt :TCharFormat2;
begin
Fmt.cbSize := SizeOf(Fmt);
Fmt.dwMask := CFM_COLOR or CFM_BACKCOLOR or CFM_Weight;
Fmt.crTextColor := clRed;
Fmt.crBackColor := clwhite;
fmt.wWeight:=0;
RichEdit1.Perform(EM_SETCHARFORMAT,SCF_SELECTION,integer(@Fmt));
end;

procedure TForm1.RichEdit1Change(Sender: TObject);
begin
setcolor;
Richedit1.SelStart:=i;
Richedit1.SelLength:=2;
Richedit1.SelAttributes.Color:=clRed;
i:=i+2;
end;

我的程序要求判断输入,如有错误,错字显示红色,我的部分程序,用于onchange事件中
procedure PinyinCompare;//比较并显示录入文档
var
charSample:string; //范例字符
charInput:string; //录入字符
lineNo:integer; //当前行号
L:integer;
begin
charSample:=Form_main.RichEdit_Psample.Text[cursorLoc+1]+
Form_main.RichEdit_Psample.Text[cursorLoc+2];
charInput:=Form_main.RichEdit_Pinput.Text[cursorLoc+1]+
Form_main.RichEdit_Pinput.Text[cursorLoc+2];
if charSample<>charInput then
begin
Form_main.RichEdit_Pinput.SelStart:=cursorLoc;
Form_main.RichEdit_Pinput.SelLength:=2;
Form_main.RichEdit_Pinput.SelAttributes.Color:=clRed;
keysoundWrong;//wrong sound
end
else
begin
Form_main.RichEdit_Pinput.SelStart:=cursorLoc;
Form_main.RichEdit_Pinput.SelLength:=2;
Form_main.RichEdit_Pinput.SelAttributes.Color:=clBlack;
KeySoundRight;//rightSound
end;
cursorLoc:=cursorLoc+2;
Form_main.RichEdit_Pinput.SelStart:=cursorLoc;
end;
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
后退
顶部