Technology Programming

Display Custom TTreeView Item Hints



The TTreeView Delphi control wraps the Windows tree view control. TTreeView is comonly used when a hierarhical structure needs to be displayed to the user. By clicking an item, the user can expand and collapse the associated list of subitems.

In complex tree views, you might want to display customized tooltip (hint) for each tree node.

Delphi's TTreeView exposes two properties you use to set the hint window which appears when the mouse hovers (precisely: when the mouse pointer rests momentarily) over a control: Hint and ShowHint


"Unfortunatelly", the value stored in the Hint property will be displayed, for the tree view, no matter over what item the mouse is.

TreeView Item Related Hint

To display different hints for every node in a tree view, you need to change the Hint property of the TTreeView control depending on the item the mouse is over.
The easiest way to accomplish this, is to handle the OnMouseMove event and set the Hint property (for the tree view) by locating the tree node under the mouse.

//form's private variable: lastHintNode : TTreeNode;...//treeView1 OnMouseMove event handlerprocedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) ; var   tree: TTreeView;   hoverNode: TTreeNode;   hitTest : THitTests;   //ht : THitTest;begin   if (Sender is TTreeView) then     tree := TTreeView(Sender)   else     Exit;  hoverNode := tree.GetNodeAt(X, Y) ;   hitTest := tree.GetHitTestInfoAt(X, Y) ; (*   //list the hitTest values   Caption := '';   for ht in hitTest do   begin     Caption := Caption + GetEnumName(TypeInfo(THitTest), integer(ht)) + ', ';   end;   *)  if (lastHintNode <> hoverNode) then   begin     Application.CancelHint;    if (hitTest <= [htOnItem, htOnIcon, htOnLabel, htOnStateIcon]) then     begin       lastHintNode := hoverNode;       tree.Hint := NodeHint(hoverNode) ;     end;   end; end;

The GetNodeAt method returns the node that is found at the specified position. Using the X and Y values from the OnMouseMove event, you locate the node "under" the cursor.

By looking at the result of the GetHitTestInfoAt method, you ensure the mouse is actually over a node. The GetHitTestInfoAt determines what portion of the tree view, if any, sits under the point specified by the X and Y parameters.
The result of the GetHitTestInfoAt is a set type value of the THitTests type.

The NodeHint function gets the customized hint for every tree view item. For the sake of simplicity, here's how to show item's index:

function TForm1.NodeHint(tn: TTreeNode): string; begin   result := Format('Node absolute index: %d',[tn.AbsoluteIndex]) ; end;
Note: in real world situations, you'll want to display more complex tooltips, for example, related to the record stored in the item's Data property. A real example includes Displaying XML (RSS Feed) Data in a TreeView.

Also, you need to make sure the ShowHint property for the treeview control is set to True. Optionaly you might want to Disable Automatic Hint Feature for the TTreeView.

Related posts "Technology : Programming"

The Importance Of Having a WordPress Business Theme

Programming

Website Design Is Necessary For Your Website

Programming

The Most effective On line Paid Survey Evaluation

Programming

Adelaide SEO - Links And Keywords, How Should They Be Used

Programming

C Programming Compilers for Microcontrollers

Programming

How Should A DJ Make Music Logo That Is Distinct And Cool?

Programming

Call to Action Concepts for Small Businesses

Programming

Microsoft Access Databases in Office 365

Programming

Why web design is crucial for producing world class websites

Programming

Leave a Comment