MEMO或RICHEDIT中字体的颜色?(100分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
MEMO中的字体颜色能有几种么?好象不行吧?

RICHEDIT可以,但我只知道用SELSTART、SETLENGHT,再SETSELATTRIBUTE
来定选择区域内的不同颜色。但这SELSTART……会改变光标的位置。

有没有其他的办法,象DRAW CANVAS似的方式?(Listbox/StrngGrid
里的OwnerDraw)

请给出代码(坚决不要第三方控件)。
 
又没人理我?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Color:=clRed;
Canvas.TextOut(100,100,'ucdos');
Canvas.Font.Color:=clBlue;
Canvas.TextOut(150,150,'hubdog');
end;
hehe,是这个意思吗?
 
Hubdog:多次援手,都不好意思了,呵呵

是啊,是啊,可Memo和RichEdit的CANVAS没有啊。如果用别的有CANVAS
的控件,以你说的方法去做在有CANVAS的控件上当然是可以,但,那要
做很多其他的事儿,比如:行间距、SCROLL、WRAP、SELECT等等。简直就
是自己再重做一个MEMO了。有好办法么?
 
你可以记住当前位置,改完以后又设置回来
 
PIPI,这法子不好,记不起来是为什么了,但好象不行。好象是如果在它
SEL的时候,你忽然敲一个键,就把SELECT的部分给OVERWRITE了。可能最好
别用动光标的办法,你意见呢?
 
var
richcanvas:tcanvas;
begin
richcanvas:=TCanvas.create;
richcanvas.handle:=getdc(richedit1.handle);
.....
//draw what you want draw
....
releasedc(richedit1.handle,richcanvas.handle);
end;
 
hubdog:

等、等、等一下,你的意思是说,哦……可这样,好么?
我回去试试,然后再结束。

我想,比如RICHEDIT里,一堆文字,我就想让我的名字:Y9Y
是红色的,我就让其他字符正常的写入,再弄的CANVAS放上
去,把我的Y9Y再在CANVAS画成个红的?这样成么?我得试试,
谢谢!

你这家伙玩DELPHI真有一套,祝你泡妞也一样好!
 
用api来设置都只有2种方法:要么改全部、要么改选择的部分,
所以必须要选中它再改。

你选中它以后改颜色,再改回原来的位置,再选中原来选中的地方
这过程只要不处理消息(process Messages)就不会说内容被替换
 
就用pipi的办法,先纪录下原来的光标位置,
在处理完之前禁止或忽略键盘输入不就行了
 
不用禁止,只要在过程中不 Application.ProcessMessages 就没事,
在设置完颜色后就立即恢复原来的位置、选择
 
>>MEMO中的字体颜色能有几种么?

可以截获TMemo的WM_PAINT消息自己画:
DC := GetDC(Handle);
with TCanvas.Create do
begin
Handle := DC;
//在这里做你想做的事
Handle := 0;
Free;
end;
ReleaseDC(Handle, DC);
 
最后用PIPI的方法做了,谢谢大家
 
后退
顶部