关于C++Builder界面设计

河西郎 2017-03-24 11:35:51
问题如下:

窗体上放置一个 TEdit ,想对TEdit进行重绘,去掉左边框,右边框以及上边框,只保留下边框,如何实现?
7-8年前做过,目前已经忘光了,求助,谢谢!
...全文
412 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
河西郎 2017-03-26
  • 打赏
  • 举报
回复
感谢妖哥,感谢 u010165006
ooolinux 2017-03-26
  • 打赏
  • 举报
回复
另一种简单的办法: C++ Builder只显示一条格线的Edit编辑框 http://blog.163.com/tab_98/blog/static/1192409720172265419159/
ooolinux 2017-03-26
  • 打赏
  • 举报
回复
引用 7 楼 ccrun 的回复:
[quote=引用 6 楼 u010165006 的回复:] 妖哥,如果有多个Edit框共享一个NewEditWndProc怎么操作呢?
没必要多个窗口共用同一个窗口过程。如果多个控件都需要子类化,将新的窗口过程和子类化相关代码封装在一个类里,根据需要,创建多个实例,和控件一一对应。 可以参考XPMenu的源代码。[/quote] 没做过,还不会。。
ccrun.com 2017-03-26
  • 打赏
  • 举报
回复
引用 6 楼 u010165006 的回复:
妖哥,如果有多个Edit框共享一个NewEditWndProc怎么操作呢?
没必要多个窗口共用同一个窗口过程。如果多个控件都需要子类化,将新的窗口过程和子类化相关代码封装在一个类里,根据需要,创建多个实例,和控件一一对应。 可以参考XPMenu的源代码。
ooolinux 2017-03-26
  • 打赏
  • 举报
回复
构造函数加一句Edit1->ParentColor=true;就完美了。 妖哥,如果有多个Edit框共享一个NewEditWndProc怎么操作呢?
ccrun.com 2017-03-26
  • 打赏
  • 举报
回复
引用 4 楼 mywindpursue 的回复:
妖哥,有没有其他更好的办法? 直接对TEdit进行操作 ,达到上述效果? 应该有的
没有直接的属性。自己画吧。 .h 文件中:
private:	// User declarations
	void __fastcall NewEditWndProc(TMessage &Msg);
.cpp文件中:
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	Edit1->Ctl3D = false;
	Edit1->WindowProc = NewEditWndProc;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::NewEditWndProc(TMessage &Msg)
{
	Edit1->Dispatch(&Msg);

	if (Msg.Msg == WM_PAINT)
	{
		TControlCanvas *canvas = new TControlCanvas;
		canvas->Control = Edit1;

		TRect rct(0, 0, Edit1->Width, Edit1->Height);
		canvas->Brush->Color = Color;
		canvas->FillRect(rct);

		canvas->Pen->Color = clBlue;
		canvas->MoveTo(rct.Left, rct.Bottom - 1);
		canvas->LineTo(rct.Right, rct.Bottom - 1);

		canvas->Font->Color = Edit1->Font->Color;
		InflateRect(&rct, -1, -1);
		canvas->TextRect(rct, 2, 2, Edit1->Text);

		delete canvas;
	}
}
ooolinux 2017-03-25
  • 打赏
  • 举报
回复
参考: C++ Builder自绘改变Edit边框颜色 http://blog.163.com/tab_98/blog/static/11924097201611983436980/
ccrun.com 2017-03-25
  • 打赏
  • 举报
回复
效果是这样的。
ccrun.com 2017-03-25
  • 打赏
  • 举报
回复
有个简单的办法。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	TEdit *edt = new TEdit(this);
	edt->Parent = this;
	edt->Left = 100;
	edt->Top = 100;
	edt->BorderStyle = bsNone;
	edt->Font->Size = 10;
	edt->ParentColor = true;
	edt->Show();

	TBevel *bvl = new TBevel(this);
	bvl->Parent = this;
	bvl->Shape = bsBottomLine;
	bvl->SetBounds(edt->Left, edt->Top, edt->Width, edt->Height);
	bvl->Height = bvl->Height + 2;
	bvl->Show();
}
河西郎 2017-03-25
  • 打赏
  • 举报
回复
妖哥,有没有其他更好的办法? 直接对TEdit进行操作 ,达到上述效果? 应该有的
Borland C++Builder 5.0 (简介)   Borland C++Bilder 5.0是Interprise(Borland)公司推出的基于C++ 语言的快速应用程序开发(Rapid Application Development,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。C++Builder 充分利用了已经发展成熟的Delphi 的可视化组件库(Visual Component Library,VCL),吸收了Borland C++ 5.0 这个优秀编译器的诸多优点。C++Builder 结合了先进的基于组件的程序设计技术,成熟的可视化组件库和优秀编译器,调试器。发展到5.0版本,C++Builder 已经成为一个非常成熟的可视化应用程序开发工具,功能强大而且效率高。 C++Builder的特色: 1.C++Builder 是高性能的C++开发工具   C++Builder是基于C++的,它具有高速的编译,连接和执行速度。同时,C++Builder具有双编译器引擎,不仅可以编译C/C++程序,还能编译Object Pascal语言程序。 2.C++Builder是优秀的可视化应用程序开发工具   C++Builder是一完善的可视化应用程序开发工具,使程序员从繁重的代码编写中解放出来,使他们能将注意力重点放在程序的设计上,而不是简单的重复的劳动中。同时,它提供的完全可视的程序界面开发工具,从而使程序员对开发工具的学习周期大大缩短。 3.C++Builder具有强大的数据库应用程序开发功能   C++Builder 提供了强大的数据库处理功能,它使的程序员不用写一行代码就能开发出功能强大的数据库应用程序,这些主要依赖于C++Builder众多的数据库感知控件和底层的BDE数据库引擎。C++Builder除了支持MicroSoft的ADO(Active Data Object)数据库连接技术,还提供了一种自己开发的成熟的数据库连接技术——BDE(Borland Database Engine)数据库引擎。 4.C++Builder具有强大的网络编程能力 C++Builder具有众多的Internet应用程序开发控件,如WebBroker,CppWebBroswer,WinSocks等,它们基本含盖了Internet应用的全部功能,利用它们程序员可以方便地建立自己地Internet应用程序。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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