最后一行的TListView Caption-Cell无法着色

时间:2017-09-15 15:54:35

标签: vcl ownerdrawn tlistview c++builder-xe7

我已经和VCL合作了几个月了,并且可以通过谷歌搜索来解决我的所有问题,但是这个问题让我陷入困境。 每当该行的索引7处的subItem不包含某个文本时,我想在TListView中为一行着色(参见下面的代码)。这一切都很好,除了最后一行的标题单元格(最左边)没有着色。我尝试了几个黑客(例如在绘制项目时启用然后解除ListView),但我没有找到一个不会破坏表单上其他内容的人(例如计时器)。 此外,在我点击单元格后,它确实变色了...... 我在Windows 7上使用XE7(C ++ Builder)。 所有建议都表示赞赏;)

void __fastcall TBackupManagerForm::OverviewListViewCustomDrawItem(TCustomListView *Sender, TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
    if ((*Item->SubItems)[7] != "someText") {
    Sender->Canvas->Brush->Color = clRed;
  }
  else {
    Sender->Canvas->Brush->Color = clWindow;
  }
  TRect r, rt;
  r = Item->DisplayRect(drBounds);
  Sender->Canvas->FillRect(Rect);
  r.Right = r.Left + (*OverviewListView->Columns)[0]->Width;
  rt = r;
  rt.Left += 5;
  rt.Top += 1;
  UnicodeString s = Item->Caption;
  Sender->Canvas->TextRect(rt, s, TTextFormat()<<tfSingleLine<<tfEndEllipsis);

  for (int i = 0; i < Item->SubItems->Count; i++) {
    ListView_GetSubItemRect(Sender->Handle, Item->Index, i+1, LVIR_BOUNDS,&rt);
    s = (*Item->SubItems)[i];
    Sender->Canvas->TextRect(rt, s, TTextFormat()<<tfSingleLine<<tfEndEllipsis);
  }
}

修改 (在这里回答评论,因为没有足够的代表:P)

@PaulMcCarthy是的,这对我来说似乎很奇怪......

@RemyLebeau感谢您的建议,我实施了它们。

此外,我设法通过从OverviewListView->Refresh()外部拨打CustomDrwaItem额外拨打电话来正确绘制,但它仍然让我觉得没有它就没有工作(双关语有些意外) )。

0 个答案:

没有答案