Witam,
co za szitowaty problem...
Jest sobie TTreeView. Dodaję mu itemy na żywo:
TTreeNode * kp_node = 0, * kp_node2 = 0;
kp_node = TVRSS->Items->Add(0, "jeden");
TVRSS->Items->AddChild(kp_node, "jeden 1");
TVRSS->Items->AddChild(kp_node, "jeden 2");
kp_node = TVRSS->Items->Add(0, "dwa");
kp_node2 = TVRSS->Items->AddChild(kp_node, "dwa 1");
TVRSS->Items->AddChild(kp_node, "dwa 2");
kp_node = TVRSS->Items->AddChild(kp_node2, "dwa 1 1");
kp_node2 = TVRSS->Items->AddChild(kp_node, "dwa 1 1 1");
Obsługuję tylko OnCustomDrawItem:
void __fastcall TFRoot::TVRSSCustomDrawItem(TCustomTreeView *Sender, TTreeNode *Node,
TCustomDrawState State, bool &DefaultDraw)
{
int i_posX = GetScrollPos(TVRSS->Handle, SB_HORZ);
TRect tagRectDraw = Node->DisplayRect(false);
TRect tagRectTxt = Node->DisplayRect(true);
if((tagRectDraw.Top + (tagRectDraw.Bottom - tagRectDraw.Top) / 2 - 8) < 0){
TVRSS->Canvas->TextOutA(-i_posX + Node->Level * TVRSS->Indent + 18,
tagRectDraw.top + (tagRectDraw.bottom - tagRectDraw.top) / 2 - TVRSS->Canvas->TextHeight(Node->Text) / 2, IntToStr((int)tagRectDraw.top) + " " + IntToStr((int)tagRectDraw.bottom));
}else
TVRSS->Canvas->TextOutA(-i_posX + Node->Level * TVRSS->Indent + 18,
tagRectDraw.Top + (tagRectDraw.Bottom - tagRectDraw.Top) / 2 - TVRSS->Canvas->TextHeight(Node->Text) / 2, Node->Text);
DefaultDraw = false;
}
Nie rysuję tu przycisków rozwijających i zwijających, żeby nie zaciemniać.
I efekt jest taki, że przy pierwszym rozwinięciu elementów "dwa 1" i "dwa 1 1" tekst i ewentualny obraz buttona rysowany jest nad pierwszym itemem oraz na prawidłowej pozycji. Zrobiłem warunek sprawdzający i wychodzi na to, że tagRectDraw jest wyzerowany.
Wygląda to tak:
W czym ma ślepota się objawia?