如何消除Canvas->TextOut()输出的文字

HikerLive 2009-09-24 06:49:58
问题描述: 如何消除Canvas->TextOutA()上次输出的文字,代码如下:
Form1->Canvas->TextOutA(0,0,"HelloWorld"); // 先输出HelloWorld,屏幕上会出现"HelloWorld"字样.
Form1->Canvas->TextOutA(0,0,"23"); // 屏幕上会出现"23lloWorld"字样.
要求:
有什么方法可以将上次同一位置输出的文字清除掉,不用FillRect,不用背景色重复写等方法,要求类似于画线的异或模式方法,有请高人指点。


...全文
478 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hefeng1000 2009-10-22
  • 打赏
  • 举报
回复
将form刷成背景色就可以了:
Form1->Canvas->Brush->Color=color;
Form1->Canvas->FillRect(Rect(0,0,Form1->Width,Form1->Height)); //背景颜色
YeBinYe 2009-10-06
  • 打赏
  • 举报
回复
Canvas->RePaint();
tomatowangzt 2009-09-30
  • 打赏
  • 举报
回复
顶一下
xjq2003 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 keiy 的回复:]
最简最笨方法:
Form1->Canvas->TextOutA(0,0,"                        ");

[/Quote]

这样能把字擦除
HikerLive 2009-09-25
  • 打赏
  • 举报
回复
To yf2100:
试啦不可行。

To songhtao:
如何用异或模式写文字,请详述。
我的理解:TextOutA不支持界面像素的异或运算操作。代码如下:
int oldmode = SetROP2(Form1->Canvas->Handle, R2_XORPEN);
Form1->Canvas->TextOutA(0, 0, "HelloWorld"); // 先在异或模式下输出文字
Form1->Canvas->TextOutA(0, 0, "HelloWorld"); // 再输出一次同样内容就应该消除,但实际上没有消除.



lghndyz 2009-09-25
  • 打赏
  • 举报
回复
Form1->Canvas->Font->Color=clBlack;
Form1->Canvas->TextOutA(0,0,"HelloWorld");
Form1->Canvas->Font->Color=clBtnFace;
Form1->Canvas->TextOutA(0,0,"HelloWorld");
Form1->Canvas->Font->Color=clBlack;
Form1->Canvas->TextOutA(0,0,"23");
lghndyz 2009-09-25
  • 打赏
  • 举报
回复
一楼方法比较直接点!!
我不懂电脑 2009-09-25
  • 打赏
  • 举报
回复
异或模式就可以。
yf2100 2009-09-24
  • 打赏
  • 举报
回复
写错了改一下

Form1->Canvas->Pen->Mode=pmNot; // 设置画笔为反色模式.
Form1->Canvas->TextOutA(0,0,"HelloWorld"); // 先输出HelloWorld,屏幕上会出现"HelloWorld"字样,颜色为底色的反色.
Form1->Canvas->TextOutA(0,0,"HelloWorld"); // 再输出一遍HelloWorld,有字的部分会再次取反,结果就成了背景色.
Form1->Canvas->TextOutA(0,0,"23"); // 屏幕上只留下"23".


======================
以上代码未经测试,纯手工完成,如有错误,概不负责
yf2100 2009-09-24
  • 打赏
  • 举报
回复
Form1->Canvas->Pen->Mode=pmNot; // 设置画笔为反色模式.
Form1->Canvas->TextOutA(0,0,"HelloWorld"); // 先输出HelloWorld,屏幕上会出现"HelloWorld"字样,颜色为底色的反色.
Form1->Canvas->TextOutA(0,0,"HelloWorld"); // 再输出一遍HelloWorld,有字的部分会再次取反,结果就成了背景色.
Form1->Canvas->TextOutA(0,0,"23"); // 屏幕上只留下"HelloWorld".


======================
以上代码未经测试,纯手工完成,如有错误,概不负责
柯本 2009-09-24
  • 打赏
  • 举报
回复
最简最笨方法:
Form1->Canvas->TextOutA(0,0," ");

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧