博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Display Custom Hints for TListView Sub Items
阅读量:4919 次
发布时间:2019-06-11

本文共 3121 字,大约阅读时间需要 10 分钟。

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.

TListView  Sub Item Hints

TListView Sub Item Hints

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 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.

转载于:https://www.cnblogs.com/MaxWoods/archive/2011/03/18/1988094.html

你可能感兴趣的文章
Java 可中断线程
查看>>
声音推荐【Anaesthesia】Maximilian Hecker强烈推荐
查看>>
地址虚拟机vmware centos6.3 Device eth0 does not seem to be present
查看>>
链表实现单链表创建、排序(升序)
查看>>
Spring旅程(一)为什么使用Spring
查看>>
centos安装桌面和远程连接
查看>>
侠探锦毛鼠之真假白玉堂
查看>>
[mark]如何删除地址栏的记录?
查看>>
python CSV写中文
查看>>
poj3304 Segments
查看>>
Android onNewIntent调用时机
查看>>
命令模式
查看>>
MySQL 基础命令
查看>>
用css画个遨游logo
查看>>
杭电2061
查看>>
硬盘的工作原理
查看>>
开发日志
查看>>
使用 Intellij Idea 导出JavaDoc
查看>>
485. Max Consecutive Ones
查看>>
C#四舍五入保留一位小数
查看>>