社区
C++ Builder
帖子详情
关于MEMO控件与菜单绘制图标冲突
SummerOnce
2006-11-08 05:32:16
大夹: 请教啊, 我用软件绘制菜单图标和底背景色,也就是想将菜单绘成XP样的,但,Form界面内一加入Memo或RichEdit控件,菜单的底背景色就不出来了,不知为什么啊,去掉后就好了,如果加入其它控件都不影响.....在线等........
...全文
144
10
打赏
收藏
关于MEMO控件与菜单绘制图标冲突
大夹: 请教啊, 我用软件绘制菜单图标和底背景色,也就是想将菜单绘成XP样的,但,Form界面内一加入Memo或RichEdit控件,菜单的底背景色就不出来了,不知为什么啊,去掉后就好了,如果加入其它控件都不影响.....在线等........
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
heheddjj
2006-11-11
打赏
举报
回复
XPMenu组件不能将窗口画成四个角是1/4圆的喔,有哪个控件可以吗,还有,那个控件,不能将主菜单条的颜色都画成一种颜色,就是说,设了颜色后,只有主菜单条背景是设了,但其向右部分的空菜单条颜色还是系统色,好丑喔,有没办法啊
BlueDeepOcean
2006-11-10
打赏
举报
回复
看看www.ccrun.com上的XPMenu组件。使用方便,不需要写太多的代码。
至于菜单重画,和一般的重画事件没有区别。关键是要计算好菜单的区域、内容文字、图标等。其他的应该没有什么问题。
ccrun.com
2006-11-10
打赏
举报
回复
www.ccrun.com
可以上,只是访问的人多,有时候慢。使劲刷新。
heheddjj
2006-11-10
打赏
举报
回复
老妖,你的网上不了啊,CCRUN
SummerOnce
2006-11-10
打赏
举报
回复
嘻嘻,代码下载来的,来之于网,送之于网,
修改了一点,调试,菜单没问题,代码帖上来,供大家参考一下,一起分享
SummerOnce
2006-11-10
打赏
举报
回复
//绘制标题栏菜单
void __fastcall TForm1::menuName01AdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{
int MenuHeight,BmpPos; //菜单项的高度;菜单中所画图标的边距
TMenuItem *TempMenuItem = new TMenuItem(MainMenu1->Items); // (TMenuItem *)Sender
TIcon *DrawIco=new TIcon(); //图标对象,用以画出菜单项的图标
TRect TempRect; //临时的矩形区域,程序中多次使用
String ShowCaption; //菜单项的标题
TCustomImageList *ImageList=new TCustomImageList(this); //菜单项所使用的图标列表控件
TempMenuItem=((TMenuItem *)Sender); //当前菜单的菜单项
ShowCaption=TempMenuItem->Caption; //获取菜单标题
MenuHeight=25; //此数值与在 OnMeasureItem 事件中设置的Height属性值相同
BmpPos=(MenuHeight-16)/2;
/*
计算所画的图标边距,所显示的图标尺寸一般为16,所以此处取值也为16,
可根据实际更改此数值。
*/
ACanvas->Brush->Color= RGB(240,247,207);//clWhite; clSkyBlue ; // //设置菜单的背景色
// ARect.Left=ARect.Left;
// ARect.Right=ARect.Right+20;
ACanvas->FillRect(ARect); //填充背景
if (TempMenuItem->Name.Length() != 10)
{
ACanvas->Brush->Color=TColor(RGB(219,216,209)); //图标背景
TempRect=Rect(ARect.Left,ARect.Top,ARect.Left+MenuHeight,ARect.Bottom);
ACanvas->FillRect(TempRect);
}
if (TempMenuItem->Caption=="-")
{
//画分隔线
ACanvas->Pen->Color=clBtnShadow;
ACanvas->MoveTo(ARect.Left+MenuHeight,ARect.Top+((ARect.Bottom-ARect.Top) / 2)-1);
ACanvas->LineTo(ARect.Right,ARect.Top+((ARect.Bottom-ARect.Top) / 2)-1);
ACanvas->Pen->Color=clBtnHighlight;
ACanvas->MoveTo(MenuHeight,ARect.Top+((ARect.Bottom-ARect.Top) / 2));
ACanvas->LineTo(ARect.Right,ARect.Top+((ARect.Bottom-ARect.Top) / 2));
return;
}
ImageList=TempMenuItem->GetImageList(); //获取所使用的图标列表控件
if (ImageList!=NULL) //如果主菜单关联了图标列表控件
{
if (TempMenuItem->ImageIndex!=-1) //如果该菜单项指定了图标
{
ImageList->GetIcon(TempMenuItem->ImageIndex,DrawIco); //从图标列表控件中获取图标
if (TempMenuItem->Checked==true) //如果该菜单项有复选标记则画出一个蓝色框
{
ACanvas->Brush->Color=TColor(RGB(212,213,232)); //选中时的菜单颜色
ACanvas->Pen->Color =clBlack;
ACanvas->RoundRect(ARect.Left+1,Top+2,MenuHeight-2,ARect.Bottom-2,0,0);
}
}
else //如果该菜单项没有指定图标
{
if (TempMenuItem->Checked==true)
{
ImageList->GetIcon(11,DrawIco); //如果菜单项有复选标记,则从图标列表控件中获取一个表示复选的图标
//数字11是该图标的索引号,可根据实际更改;如没有该图标,可将这两句删除*/
}
}
}
if ((State.Contains(odSelected)==true)&&(State.Contains(odDisabled)==false))
{
//如果该菜单项处于被选择状态,则画出以下选择样式注释的一句加上的话表示如果菜单项处于无效状态则光标指向时无任何效果
//以下程序画出一个蓝色框以表示该菜单项处于被选择状态
ACanvas->Brush->Color=TColor(RGB(212,213,232)); //RGB(175,183,207);
ARect.Top=ARect.Top+1;
ARect.Bottom=ARect.Bottom-2;
ACanvas->Pen->Color=clBlack;
ACanvas->Rectangle(ARect.Left,ARect.Top,ARect.Right,ARect.Bottom); //矩形选择菜单条
//RoundRect(Left,Top,Right,Bottom,3,3);//圆角矩形选择菜单条
//以上四句画出蓝色框
ACanvas->Pen->Color=clBtnShadow;
ACanvas->Draw (BmpPos,ARect.Top+2,DrawIco); //画出图标
ACanvas->Draw (BmpPos,ARect.Top+BmpPos,DrawIco); //画出图标
//画出图标阴影
BmpPos=BmpPos-1;
ARect.Top=ARect.Top-2;
}
ACanvas->Draw (BmpPos,ARect.Top+BmpPos,DrawIco); //画出图标
DrawIco->Free(); //图标已画出,可以释放图标对象
if (TempMenuItem->Name.Length() != 10) //设置菜单标题的矩形区域,文字的位置
TempRect=Rect(ARect.Left+MenuHeight+5,ARect.Top,ARect.Right,ARect.Bottom); //不是主菜单则留图标位
else
TempRect=Rect(ARect.Left+5,ARect.Top,ARect.Right,ARect.Bottom); //是主菜单则,以+5绘文字
ACanvas->Brush->Style=bsClear; //设置画刷的填充样式为透明,这样画出的菜单标题就为透明底色
if (State.Contains(odSelected)==true)
{
ACanvas->Font->Color=clBlack;
TempRect.Top=TempRect.Top+(TempRect.Height()-ACanvas->Font->Size)/2-1;
}
else
{
ACanvas->Font->Color==clBlack; //黑色字体
TempRect.Top=TempRect.Top+(TempRect.Height()-ACanvas->Font->Size)/2-2;
}
if (TempMenuItem->Default)
{
ACanvas->Font->Style<<fsBold;
}
DrawText(ACanvas->Handle,ShowCaption.c_str(),-1,&TempRect,DT_LEFT ); //|| DT_SINGLELINE || DT_VCENTER
//画出菜单项的标题
}
SummerOnce
2006-11-10
打赏
举报
回复
嚓嚓,老妖,那个代码写完了,但现在不用了,找了个控件使用,还是控件省事些,要不代码一堆,真难受,现在遇到个新问题,各位大侠一起想想喔,好像是CB6的BUG,就是新建个窗口,在上面放一个TOOLBAR,设成FLAT为TRUE, 再在TOOLBAR上面放一个SPEEDBUTTON,如果这个BUTTON也设成FLAT,则BUTTON中间为出现一条竖线,不知为啥,,
ccrun.com
2006-11-08
打赏
举报
回复
楼主的人呢,跑路了?
ccrun.com
2006-11-08
打赏
举报
回复
我正在做饭,还没有吃饭。
你在什么事件中绘制的菜单项?贴部分代码出来。按道理说添加一个Memo是不影响菜单自画的。
SummerOnce
2006-11-08
打赏
举报
回复
@@各位大侠都在吃饭么...自已顶一下
DevExpress FlowChart
控件
开发实战指南
FlowChart
控件
是由DevExpress提供的一款功能强大的可视化流程图构建组件,广泛适用于Delphi 7开发平台。它不仅支持多种图表类型(如流程图、组织结构图、数据流图等),还具备高度可定制的交互和样式设计能力。本章将深入解析该
控件
的核心功能、版本特性(v1.3.2)、开发环境兼容性,并探讨其在业务流程建模、系统架构设计以及可视化数据分析等实际应用场景中的重要作用,为后续章节的技术实践打下坚实基础。标准元素虽然功能强大,但在实际开发中往往需要进一步的定制。
Delphi自定义
控件
VkPanel开发与实战应用
VkPanel是Delphi平台上一款高度可定制的自定义面板
控件
,专为提升用户界面美观性与交互体验而设计。它突破了标准TPanel
控件
在样式和功能上的限制,支持背景图设置、边框颜色与宽度自定义、丰富的
绘制
事件等高级功能。其开发初衷是为了满足现代应用程序对界面美观和跨平台一致性的需求,尤其适用于需要高度定制UI的企业级开发场景。VkPanel不仅具备良好的封装性,还提供了友好的设计时支持,使开发者可以在IDE中直接进行可视化编辑。
极致美观与功能兼备的日历
控件
设计与实现
现代前端开发中,日历
控件
作为时间数据交互的核心组件,广泛应用于任务管理、日程安排、会议预约等场景。一个美观且功能完备的日历
控件
不仅提升用户体验,还能显著增强应用的专业性与可用性。本章将系统阐述日历
控件
的基本构成要素,包括日期展示逻辑、时间维度划分(日、周、月)、用户交互模式以及视觉呈现原则。重点分析“最美观”背后的设计哲学——如何在保证功能性的同时实现界面的简洁与优雅。
Delphi XE10.2中RAIZE
控件
的高级应用与实战集成
RAIZE
控件
库是专为Delphi和C++ Builder平台打造的高性能第三方VCL组件库,历经多年迭代,在企业级桌面应用开发中建立了坚实口碑。其设计目标不仅是弥补原生VCL
控件
在视觉表现和功能深度上的不足,更致力于提供一套稳定、可扩展且易于维护的UI解决方案。除了整体皮肤更换,RAIZE还允许开发者对特定
控件
进行细粒度样式覆盖。这主要通过属性和扩展机制实现。例如,可以手动定义一个带有垂直渐变背景的面板:varbegintry// 起始颜色:深蓝// 结束颜色:蓝色。
delphi
控件
使用
Standard页 1- Tlistbox
控件
重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := listbox1.Items.CommaText; edit2.Text := listbo...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章