社区
C++ Builder
帖子详情
关于MEMO控件与菜单绘制图标冲突
SummerOnce
2006-11-08 05:32:16
大夹: 请教啊, 我用软件绘制菜单图标和底背景色,也就是想将菜单绘成XP样的,但,Form界面内一加入Memo或RichEdit控件,菜单的底背景色就不出来了,不知为什么啊,去掉后就好了,如果加入其它控件都不影响.....在线等........
...全文
130
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
打赏
举报
回复
@@各位大侠都在吃饭么...自已顶一下
delphi
控件
使用
Standard页 1- Tlistbox
控件
重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := listbox1.Items.CommaText; edit2.Text := listbo...
《Delphi从入门到精通》第21章 第二部分创建IntraWeb应用程序
使用IntraWeb进行Web编程(二) 选择自 longview 的 Blog 关键字 IntraWeb出处 《Delphi从入门到精通》第21章 第二部分创建IntraWeb应用程序创建IntraWeb应用程序,有很多组件可用。不妨看一下Delphi组件板中的IW Standard页,会给您留下深刻的印象,从简单的按钮、复选框、单选框、编辑框、列表框到迷人的树形
控件
、
菜单
、计时器
vue 官方推荐的好用的三方库
自述文件 非常棒的存储库徽标 很棒的Vue.js 太棒了 与Vue.js相关的精彩内容精选清单 资源资源 官方资源 外部资源 工作门户 社区 会议活动 播客 YouTube频道 官方例子 讲解 例子 图书 博客文章 培训班 纪录片 使用Vue.js的项目 开源的 商业产品 应用/网站 互动体验 企业用途 A11y 组件和库 UI组件 表 通知 装载机 进度条 工具提示 覆盖 视差 图示 选框
菜单
减号加输入 轮播 图表 时间 日历 地图 音频视频 无限滚动 拉到刷新 降价促销 PDF格式 树 图形
VB速查大全(数据库、表格及报表编程) ★ VB错误处理,ado常见错误,VB数据类型等,网上有很多教程是错的,强烈建议看此文
VB异常处理 (很重要) ado常见错误 ado游标及锁定介绍 免费报表
控件
免费表格
控件
vb数据类型(很多程序出问题出在这个,一定要看,VB msdn说的不太对) VB可用的AES加密sqlite_odbc 及 cairo_sqlite (VBRichClient自带的非odbc连接) 有vbRichClient代替winsock、实现vb多线程及远程调用activeX等
PalmOS开发教程
Palm OS开发教程 http://www.5ivb.net/Info/Info39To1/ http://bingle.pku.edu.cn 译者序 1 第一章 关于Palm 1 第二章 建立一个应用程序 8 第三章 文本框中的乐趣 20 第四章 窗体的编程 37 第五章 数据库 54 第六章
控件
84 第七章 列表框和排序 123 第八章 表和滚动条 168 第九章 分类和查找 216 第
C++ Builder
13,824
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章