德尔福 – ListView和着色细胞
我有ListView(vsReport)和StringGrid,我想要的是如果我点击ListView中的某个元素,StringGrid中的特定单元格必须更改颜色.我该怎么做?
路径填充1(向上移动)和0(向右移动),它从左下角开始,到右上角结束,我必须为这些单元格着色. 谢谢你的答案,我处理了我的问题,但还有一个小问题,如何在单元格中显示文本? FillRect填充整个单元格. procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var aRect: TRect; a,x,y:integer; path:string; begin path:=ListView1.Items[Item.Index].Caption; x:=0; y:=StringGrid1.RowCount; for a := 0 to length(path) do begin if path[a]='1' then y:=y-1 else x:=x+1; aRect := StringGrid1.CellRect(x-1,y-1); StringGrid1.Canvas.Brush.Color := clBlue; StringGrid1.Canvas.FillRect(aRect); end; end; 解决方法
>意识到单元格的颜色变化应该是永久性的,以便在再次绘制StringGrid时,例如,当StringGrid被对话框混淆时,也应该再次绘制特殊颜色.
>因此,您需要在某处存储所需的颜色.假设您要使用数组,然后在以下选项之间进行选择: >将特殊颜色与网格坐标一起存储在一维数组中.这对于内存使用很有用,但是你需要在整个数组中搜索StringGrid的OnDrawCell处理程序(参见步骤3)提供的特定坐标, >在StringGrid的OnDrawCell事件处理程序中绘制彩色单元格(在需要帮助时,在此处搜索Stack Overflow for [Delphi] StringGrid OnDrawCell).> ListView的OnSelectItem事件公开单击或以其他方式选择的项.>从该项目或其子项目中检索necessery信息,以确定要以什么颜色更改哪个单元格.>将该信息添加到步骤2的所选存储解决方案中.>意识到当现在所有绘画都“自动”完成时,只需调用StringGrid.Repaint即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |