如何在Listbox上显示 In-place Tooltips

时间:2010-01-28 08:41:03  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:pacing="0" bordercolordark="#ffffff" cellpadding="5" width="99%" bgcolor="#e8ffe8" border="1">{直接将下面代码拷贝到新建工程中Form1的Unit1.pas文件即可运行,不需添加任何控件}//------------------------------------------------------------------------------//  在 ListBox 上实现 In-place Toolt...
  正文:大家知道TreeView 上的节点如果显示不完全,鼠标移上去会出现一提示,这就是 In-lace Tooltiphotoshop/ target=_blank class=infotextkey>ps。下面这段代码在 Listbox 上实现这一功能(下面代码只是在标准 Listbox 上测试,如果是自画的,则要修改):



{直接将下面代码拷贝到新建工程中Form1的Unit1.pas文件即可运行,不需添加任何控件}

//------------------------------------------------------------------------------
//  在 ListBox 上实现 In-place Tooltips
//  原创作者:Joe Huang                 Email:Happyjoe@21cn.com
//
//------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CommCtrl;

type
//改写 TListBox 拦截 CM_MOUSELEAVE 消息
  TNewListBox = class(TListBox)
protected
{ Protected declarations }
procedure WndProc(var Message: TMessage); override;
end;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
GHWND: HWND;
TipVisable: Boolean;
OldIndex, CurrentIndex: Integer;
ti: TOOLINFO;
ListBox1: TListBox;

procedure InitListBox;   //动态生成 ListBox1
    procedure CreateTipsWindow;  //生成 Tooltip Window
    procedure HideTipsWindow;    //隐藏 Tooltip Window

//拦截 WM_NOTIFY 消息,动态改变 Tooltip Window 显示的内容
    procedure WMNotify(var Msg: TMessage); message WM_NOTIFY;

procedure ListBox_MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ListBox_MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TNewListBox }

procedure TNewListBox.WndProc(var Message: TMessage);
begin
  case Message.Msg of
  CM_MOUSELEAVE: Form1.HideTipsWindow;
end;
inherited WndProc(Message);
end;

{ TForm1 }

procedure TForm1.InitListBox;
begin
  ListBox1 := TNewListBox.Create(Self);
  ListBox1.Parent := Self;
  ListBox1.Left := 50;
  ListBox1.Top := 50;
  ListBox1.Width := 200;
  ListBox1.Height := 200;
  //添加几项,以供测试用
  ListBox1.Items.Append('happyjoe');
  ListBox1.Items.Append('Please send me email: happyjoe@21cn.com');
  ListBox1.Items.Append('Delphi 5 开发人员指南');
  ListBox1.Items.Append('Delphi 5.X ADO/MTS/COM+ 高级程序设计篇');
  
  ListBox1.OnMouseMove := ListBox_MouseMove;
  ListBox1.OnMouseDown := ListBox_MouseDown;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.Font.Name := 'Tahoma';
  InitListBox;
  CreateTipsWindow;
end;

procedure TForm1.CreateTipsWindow;
var
iccex: tagINITCOMMONCONTROLSEX;
begin
  // Load the ToolTip class from the DLL.
  iccex.dwSize := sizeof(tagINITCOMMONCONTROLSEX);
  iccex.dwICC  := ICC_BAR_CLASSES;
  InitCommonControlsEx(iccex);
  
  // Create the ToolTip control.

如何在Listbox上显示 In-place Tooltips》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12542.html


关键字:

关于《如何在Listbox上显示 In-place Tooltips》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td