1. Home
  2. Computing & Technology
  3. Delphi Programming

Display Custom Hints for TListView Sub Items
TListView.SubItem.Hint

By Zarko Gajic, About.com

TListView  Sub Item Hints

TListView Sub Item Hints

You use the TListView Delphi control to display a list of items in a fashion similar to how Windows Explorer displays files and folders. The items can be displayed in columns with column headers and sub-i items, or vertically or horizontally, with small or large icons.

ListView Item Hints?

The TListView exposes the Hint and ShowHint properties you use to set up whether the hint (tooltip) should be displayed for the control when the mouse hovers over it.

In most situations, when using the list view, you will need custom hints to be displayed for every list view item. What's more, a custom hint for every list view sub item might be required.

ListView provides the OnInfoTip event which gets fired when the mouse is paused over an item in the list view.
By default, when hints are enabled (that is, when ShowHint is true), the list view displays the hint specified by its Hint property. OnInfoTip allows the list view to override this value to specify a hint that is specific to the item under the mouse.

When ViewStyle is set to vsReport the ListView displays each item on its own line with information (sub items) arranged in columns.

Unfortunately, the OnInfoTip is not fired when the mouse pauses over a sub-item.

To force a list view to display custom hints for items and sub items, you need to handle two events: OnInfoTip and OnMouseMove. Here's the implementation of the OnInfoTip event handler.

procedure TLVHintsForm.ListView1InfoTip(Sender: TObject; Item: TListItem; var InfoTip: string) ;
begin
  //Show the "full" item - with all the sub items
  InfoTip := InfoTip + #13#10 + item.SubItems[0] + #13#10 + item.SubItems[1];
end;
To show custom hints for every sub-item, you need to handle the OnMouseMove event.
uses CommCtrl ...

procedure TLVHintsForm.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
var
  pt: TPoint;
  li : TLIstItem;
  lvHitInfo: TLVHitTestInfo;
  hint : string;
begin
  pt := ListView1.ScreenToClient(Mouse.CursorPos) ;
  li := ListView1.GetItemAt(pt.x, pt.y) ;

  //over a sub item?
  if li = nil then
  begin
    FillChar(lvHitInfo, SizeOf(lvHitInfo), 0) ;
    lvHitInfo.pt := pt;
    //over a sub item!
    if -1 <> ListView1.Perform(LVM_SUBITEMHITTEST, 0, LParam(@lvHitInfo)) then
    begin
      hint := Format('Name: %s, %s : %s',[
        ListView1.Items[lvHitInfo.iItem].Caption,
        ListView1.Columns[lvHitInfo.iSubItem].Caption,
        ListView1.Items[lvHitInfo.iItem].SubItems[-1 + lvHitInfo.iSubItem]]) ;

      if hint <> Memo1.Lines[0] then
      begin
        Memo1.Lines.Insert(0, hint) ;
        //activate hint
        ListView1.Hint := hint;
        Application.ActivateHint(Mouse.CursorPos) ;
      end;
   end;
  end;
end;

After getting the Mouse position (Mouse.CursorPos), using ScreenToClient we get the position of the mouse in ListView1's coordinates.

Sending the LVM_SUBITEMHITTEST message to the list view fills the (list view specific) TLVHitTestInfo record. This structure helps us find which list view item or subitem is at a given position.

If the mouse is over a sub-item, we activate the hint window by calling the Application.ActivateHint method.

That's it, really.

Delphi tips navigator:
» Apply Custom Transparent Color for the TImage Delphi Control
« Create Collapsible Code Blocks in Delphi Code Editor using the {$REGION} directive

More Delphi Programming Quick Tips
Source Code

Download

Zarko Gajic
Guide since 1998

Zarko Gajic
Delphi Programming Guide

Explore Delphi Programming
About.com Special Features

Stay connected and entertained with reviews on tips on the latest HDTVs, cellphones and more. More >

Easy ways to connect two computers for networking purposes. More >

  1. Home
  2. Computing & Technology
  3. Delphi Programming
  4. Using VCL Components
  5. TListView
  6. TListView.SubItem.Hint : How to Display Custom Hints for TListView Sub Items

©2009 About.com, a part of The New York Times Company.

All rights reserved.