德尔福 – ListView和着色细胞

德尔福 – ListView和着色细胞,第1张

概述我有ListView(vsReport)和StringGrid,我想要的是如果我点击ListView中的某个元素,StringGrid中的特定单元格必须更改颜色.我该怎么做? 路径填充1(向上移动)和0(向右移动),它从左下角开始,到右上角结束,我必须为这些单元格着色. 谢谢你的答案,我处理了我的问题,但还有一个小问题,如何在单元格中显示文本? FillRect填充整个单元格. procedure 我有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;
@R_502_6120@ >意识到单元格的颜色变化应该是永久性的,以便在再次绘制StringGrID时,例如,当StringGrID被对话框混淆时,也应该再次绘制特殊颜色.
>因此,您需要在某处存储所需的颜色.假设您要使用数组,然后在以下选项之间进行选择:

>将特殊颜色与网格坐标一起存储在一维数组中.这对于内存使用很有用,但是你需要在整个数组中搜索StringGrID的OnDrawCell处理程序(参见步骤3)提供的特定坐标,
>仅在二维阵列中存储特殊颜色.这对于绘制时的速度很有用,但是您需要将数组的列和行边界与StringGrID的列同步,
>或者,当您不需要StringGrID的Objects属性用于任何目的时,您可以通过将颜色与TObject进行类型转换来使用此属性进行颜色存储.如果您需要帮助,请大声说出来.

>在StringGrID的OnDrawCell事件处理程序中绘制彩色单元格(在需要帮助时,在此处搜索Stack Overflow for [Delphi] StringGrid OnDrawCell).> ListVIEw的OnSelectItem事件公开单击或以其他方式选择的项.>从该项目或其子项目中检索necessery信息,以确定要以什么颜色更改哪个单元格.>将该信息添加到步骤2的所选存储解决方案中.>意识到当现在所有绘画都“自动”完成时,只需调用StringGrID.Repaint即可.

总结

以上是内存溢出为你收集整理的德尔福 – ListView和着色细胞全部内容,希望文章能够帮你解决德尔福 – ListView和着色细胞所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1256291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存