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
А вообще, лучше посмотрите в исходниках класса TreeView, как там делается прорисовка Ноды если курсор на ней и при этом
TreeView->HotTrack = true
|
|
creater |
Отправлено: 03.09.2004, 07:09 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE (Doga @ 02/09/2004, 22:18) | Для контроля Ноды над которой стоит курсор:
OnMouseMove & GetNodeAT
Для расскраски этой Ноды:
Canvas & DisplayRect
А вообще, лучше посмотрите в исходниках класса 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;
|
|
|