C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как раскрасить Items в TreeView?
creater
  Отправлено: 02.09.2004, 19:40


Станционный диспетчер

Группа: Участник
Сообщений: 120



Ситуация следующая: пытаюсь при наведении курсора, на пункт в TreeView, выделять текущий пункт жирным... После того как курсор "уходит" с пункта, который выделен жирным, пункт остается выделеным жирным.


CODE

void __fastcall TForm1::TreeView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
 {
   TTreeNode *Node = TreeView1->GetNodeAt(X, Y);
   if(Node)
     {
       TV_ITEM tvItem;
       tvItem.hItem = Node->ItemId;
       tvItem.mask = TVIF_STATE;
       tvItem.state = TVIS_BOLD;
       tvItem.stateMask = TVIS_BOLD;
       SendMessage(TreeView1->Handle, TVM_SETITEM, 0, (LPARAM)&tvItem);
     }  
 }



1. Как сделать что бы после "выхода" курсора с пункта... пункту возвращался прежний вид — убиралось выделение жирным?

2. Как раскрасить каким-либо цветом пункт над которым находится курсор.

Заранее большое спасибо.
Doga
Отправлено: 02.09.2004, 21:16


Мастер участка

Группа: Участник
Сообщений: 575



Для контроля Ноды над которой стоит курсор:
OnMouseMove & GetNodeAT

Для расскраски этой Ноды:
Canvas & DisplayRect

biggrin.gif

А вообще, лучше посмотрите в исходниках класса TreeView, как там делается прорисовка Ноды если курсор на ней и при этом
TreeView->HotTrack = true
creater
Отправлено: 03.09.2004, 07:09


Станционный диспетчер

Группа: Участник
Сообщений: 120



QUOTE (Doga @ 02/09/2004, 22:18)
Для контроля Ноды над которой стоит курсор:
OnMouseMove & GetNodeAT

Для расскраски этой Ноды:
Canvas & DisplayRect

biggrin.gif

А вообще, лучше посмотрите в исходниках класса TreeView, как там делается прорисовка Ноды если курсор на ней и при этом
TreeView->HotTrack = true

пытался делать следующее

CODE

if (TreeView1->Selected->StateIndex == 1)
   Sender->Canvas->Font->Style = Sender->Canvas->Font->Style + fsUnderline;


На дельфях видел пример
CODE

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 if cdsSelected in State then
   Sender.Canvas.Font.Style := Sender.Canvas.Font.Style + [fsUnderline];
end;


но не знаю как на билдере приклеить этот fsUnderline или что-то иное...
Doga
Отправлено: 03.09.2004, 14:38


Мастер участка

Группа: Участник
Сообщений: 575



На C++ это должно выглядеть так:

CODE

Sender->Canvas->Font->Style <<  fsUnderline;


Но если нет уверенности что в Style нет какого либо вредного(не нужного для пррисовки) стиля, лучше сделать так:

CODE

Sender->Canvas->Font->Style = TFontStyles() <<  fsUnderline;

Вернуться в Вопросы программирования в C++Builder