ccrun(老妖) Edit的WM_PAINT消息,画完后怎么 恢复原状态?

kysoft 2006-11-14 04:37:16
ccrun(老妖)(www.ccrun.com) ( ) 信誉:157 Blog 2006-11-14 0:02:12

理论上来说,没有什么做不到的事情。
子类化TEdit,然后响应Edit的WM_PAINT消息,随便画哦。

单元文件.h中:
private:// User declarations
void __fastcall CrnEditNewProc(TMessage &Msg);

单元文件的.cpp中:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Edit1->Enabled = false;
Edit1->WindowProc = CrnEditNewProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CrnEditNewProc(TMessage &Msg)
{
Edit1->Dispatch(&Msg);
if(Msg.Msg == WM_PAINT)
{
TControlCanvas *pCanvas = new TControlCanvas;
pCanvas->Control = Edit1;
TRect rct(0, 0, Edit1->BoundsRect.Width(), Edit1->BoundsRect.Height());
pCanvas->FillRect(rct);
pCanvas->Font->Color = clBlue;
pCanvas->TextRect(rct, 1, 1, Edit1->Text);
delete pCanvas;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text = "嘿嘿,测试";
}


当Edit1->Enabled=true; 时

怎样恢复,没有画前的状态呢?
...全文
288 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kysoft 2006-11-14
  • 打赏
  • 举报
回复
真的很感谢ccrun(老妖)的回复!!!
玄之丞 2006-11-14
  • 打赏
  • 举报
回复
好像在研究语法高亮的说. mark.
wood542344 2006-11-14
  • 打赏
  • 举报
回复
要懂得举一反三啊。。。。。
ccrun.com 2006-11-14
  • 打赏
  • 举报
回复
简单,只需在CrnEditNewProc过程中添加一个条件判断即可,如下:

void __fastcall TForm1::CrnEditNewProc(TMessage &Msg)
{
Edit1->Dispatch(&Msg);
if(Msg.Msg == WM_PAINT && Edit1->Enabled == false)
{
TControlCanvas *pCanvas = new TControlCanvas;
pCanvas->Control = Edit1;
TRect rct(0, 0, Edit1->BoundsRect.Width(), Edit1->BoundsRect.Height());
pCanvas->FillRect(rct);
pCanvas->Font->Color = clBlue;
pCanvas->TextRect(rct, 1, 1, Edit1->Text);
delete pCanvas;
}
}
内容概要:本文系统阐述了正规表达式(正则表达式)作为词法分析核心工具的理论基础与实际应用。文章从字母表、符号串等基本概念出发,详细介绍了正规式的定义、运算规则、代数性质及其与有限自动机(NFA/DFA)的等价关系,阐明了通过Thompson构造法、子集构造法和DFA最小化实现词法分析器自动生成的技术路径。同时,文中列举了标识符、关键字、运算符等编程语言元素的正规式描述,并说明了最长匹配和优先级规则在歧义消解中的作用。此外,还对比了正规式与上下文无关文法的表达能力差异,指出了其在嵌套结构和计数能力上的局限性,并介绍了Lex/Flex等词法分析器生成工具的应用场景。; 适合人群:计算机相关专业学生、编译原理初学者、希望深入理解词法分析机制的研发人员;具备一定的离散数学和形式语言基础者更佳。; 使用场景及目标:① 学习如何使用正规表达式精确描述程序语言的词法规则;② 掌握从正规式到DFA的转换流程及其实现原理,为构建编译器前端打下基础;③ 理解词法分析器生成工具的工作机制,提升对自动化工具的理解与运用能力。; 阅读建议:建议结合编译器设计实践进行学习,尝试手动完成正规式到NFA再到DFA的转换练习,并使用Flex等工具验证结果,以加深对理论知识的理解与应用。

13,872

社区成员

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

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