社区
C++ Builder
帖子详情
有关imagelist的问题
tuiger2003
2003-05-19 01:30:45
奇怪得很,我的imagelist在窗口中显示不出来图像。程序我简化后只有一句:
void __fastcall TForm1::FormShow(TObject *Sender)
{
ImageList1->Draw(Form1->Canvas,100, 100,1,true);
}
可在窗口中显示不出来,是为什么呢?
...全文
79
9
打赏
收藏
有关imagelist的问题
奇怪得很,我的imagelist在窗口中显示不出来图像。程序我简化后只有一句: void __fastcall TForm1::FormShow(TObject *Sender) { ImageList1->Draw(Form1->Canvas,100, 100,1,true); } 可在窗口中显示不出来,是为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tuiger2003
2003-05-19
打赏
举报
回复
请指教,在线等待! :))
tuiger2003
2003-05-19
打赏
举报
回复
我是放一个图标在imagelist里呀,开始放16*16的bmp文件,试了不行,我又换了ico文件,可还是不行呀。我自己不画?那你是说下面的文章是错的?
在数据栏中显示图像
使用DBGrid1控件来全屏显示编辑数据时,为了使界面生动活泼,我们希望能根据字段枚举数值(其取值通常为几个特定值)的不同显示不同的图像。
我们可以在DBGrid控件的OnDrawColumnCell事件中编写代码来增强DBGrid控件的显示效果,如果其DefaultDrawing属性为true,DBGrid控件在OnDrawColumnCell事件响应前按默认效果显示,然后以此为基础执行OnDrawColumnCell事件的代码。需要完全取代DBGrid控件的显示效果时,可将其DefaultDrawing属性设为false,并在OnDrawColumnCell事件中编写控制显示效果的脚本。如果希望某些列产生特定效果,可以在OnDrawColumnCell事件中调用DefaultDrawColumnCell方法,然后修正特定列的输出效果。以下示例是在DBGrid控件数据栏中显示图像效果的程序。
新建工程,在Form1上拖放TTable、TDatasource 、TDbGrid和TImageList控件,Name属性分别是Table1、Datasource1、DbGrid1和ImageList1,然后将它们关联起来,Table1 的DatabaseName属性指向DBDEMOS(该别名指代C++ Builder自带的例程数据库表)、TableName属性为Clients.dbf、Datasource1的Dataset属性值为Table1、DbGrid1的Datasource属性等于Datasource1。使用DbGrid1的列编辑器让DbGrid1仅显示Last_Name、First_Name、Risk_Level和 Occupation四个字段,再设置DbGrid1的DefaultDrawing属性为false,然后设置ImageList1存放向下、向上、向左的三种箭头图像。DBGrid1的On DrawColumnCell事件代码如下:
void __fastcall TGridDrawForm::DBGrid1DrawColumnCell(TObject Sender,
const TRect &&Rect, int DataCol, TColumn Column,TGridDrawState State)
{
if (DBGrid1->Columns->Items[DataCol]->FieldName == "RISK_LEVEL")
{
DBGrid1->Canvas->FillRect(Rect);
if (DBGrid1->Columns->Items[DataCol]->Field->AsString == "LOW")
{//字段值为“LOW”,绘制向下的箭头
ImageList1->Draw(DBGrid1->Canvas,Rect.Left+4,Rect.Top,0,True);
}
else if (DBGrid1->Columns->Items[DataCol]->Field->AsString == "MED")
{//字段值为“MED”,绘制向左的箭头
ImageList1->Draw(DBGrid1->Canvas,Rect.Left+4,Rect.Top,1,True);
}
else
{//否则绘制向上的箭头
ImageList1->Draw(DBGrid1->Canvas,Rect.Left+4,Rect.Top,2,True);
}
}
else
DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
当绘制DBGrid时,绘制屏幕上当前可见行的每个数据单元都调用上述事件过程。DataCol用于显示DBGrid的Columns属性的顺序。根据DataCol值可以确定将绘制的数据单元的栏目名称。此例中,如果栏目的字段不是“Risk_Level”则调用DefaultDrawColumnCell方法,使其成默认的显示效果。反之,则先调用FillRect方法清除背景,然后根据该字段值的不同,调用ImageList的Draw方法,实施对象是DBGrid控件的画布对象,Rect中参数Left和Top值决定了绘制坐标的位置,图像列表中不同的值决定了产生图像的不同。
whp320
2003-05-19
打赏
举报
回复
Imagelist不能这么用,你不自己画。找一个图表放到Imagelist里面,肯定可以显示出来。
tuiger2003
2003-05-19
打赏
举报
回复
我的问题其实是在dbGrid中一个字段上画出图像,当值为1时显示imagelist2的第二个图像。请再帮忙看看哪儿有错?
void __fastcall TForm1::Grid_MailDrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if (Grid_Mail->Columns->Items[DataCol]->FieldName == "Import")
{
Grid_Mail->Canvas->FillRect(Rect);
if (Column->Field->AsBoolean == true)
{
Grid_Mail->Canvas->Brush->Color = clBlue;
ImageList2->Draw(Grid_Mail->Canvas,Rect.Left,Rect.Right,1,true);
}
}
else
Grid_Mail->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
tuiger2003
2003-05-19
打赏
举报
回复
那如果在一个dbgrid的DrawColumnCell(TObject *Sender,const TRect &Rect, int DataCol, TColumn *Column,TGridDrawState State)里画呢?
我在一个cell里也画不出来,也没有paint事件呀?
hitbabiq
2003-05-19
打赏
举报
回复
没错,在show的时候不能显示,该在Form的OnPaint中。
pp616
2003-05-19
打赏
举报
回复
ImageList1->Draw(Form1->Canvas,100, 100,1,true);
这是没问题的。问题在你放错的地方。
你应该放到FormPaint中。
Sephil
2003-05-19
打赏
举报
回复
不要在Form上画
在Image上画试试
tuiger2003
2003-05-19
打赏
举报
回复
我自己解决了。并非是不能用imagelist->draw这种方法,而是不能在上面用其他颜色的brush ,否则画了以后,系统用自动调用drawcolumncell再重画 :( 所以始终看不到结果,一次次地重画。大家要切记。 另外,如果想在选定行中以其他颜色显示,要用drawcell方法进行重载才可以。参见下面的文章:
http://sanjianxia.myrice.com/delphi/158.htm
考虑到我开始的问题朋友们已经给出了答案,我结帖!
Image
List
控件应用实例
Image
List
控件应用实例,
Image
List
控件应用实例 VB
c#
image
list
c#
image
list
C# 实战项目——制作仿QQ软件
2、如何触发窗体和控件的事件 3、
List
View控件和
Image
List
组件的结合使用 4、数据库及数据表的创建 5、使用C#操作SQL Server数据库 6、Timer定时器组件的使用 7、如何判断是否按下<Enter>键...
得C#下
Image
List
资源文件下的图片
如果你看见别的系统中
Image
List
有很多自己想要的图片的话,可以用我写的小程序,可以得到当前
Image
List
所有的图片
mfc 使用
image
list
实现richedit显示gif
mfc 使用
image
list
实现richedit显示gif
C++ Builder
13,824
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章