提示信息窗口tooltip hint

来源:互联网 发布:mac os登陆界面是英文 编辑:程序博客网 时间:2024/05/21 17:02

创建定制的提示信息窗口不复杂,首先要创建一个窗口。

function CreateTooltipWindow (hWndParent, hInstance :HWND) :HWND;
begin
  DoInitCommonControls( ICC_WIN95_CLASSES );
  //创建窗口TTS_BALLOON就是泡状窗口
  Result := CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, nil,
      WS_POPUP or TTS_NOPREFIX or TTS_ALWAYSTIP or TTS_BALLOON,
      CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
      hWndParent, 0, hInstance, nil );
  SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
  //延迟时间可以当参数
  SendMessage (Result,TTM_SETDELAYTIME,TTDT_INITIAL,100);
  SendMessage (Result,TTM_SETDELAYTIME,TTDT_RESHOW, 100 div 5);
  //停留显示时间
  SendMessage (Result,TTM_SETDELAYTIME,TTDT_AUTOPOP,60000);
end;

返回一个句柄要保留好,在Destory的时候释放掉。

procedure DestroyTooltipWindow(TThwnd :HWND);
begin
  DestroyWindow(TThwnd);
end;

加到需要显示提示信息的控件上。

function TooltipAddTool(fTThwnd, hwndTool :HWND; const Hint :string;const title:string='’) :boolean;
var
  ti :TTOOLINFO ; //提示命令的结构
begin
  Result:=(fTThwnd 0) and (hwndTool 0);
  if not Result then EXIT;
  //初始化
  ti.cbSize := sizeof(TTOOLINFO);
  ti.uFlags := TTF_SUBCLASS or TTF_IDISHWND;
  ti.hwnd := hwndTool;ti.uId := hwndTool;
  ti.hinst := 0;ti.lpszText := PChar(Hint);

  if (Hint ‘’) then
  begin
    Result:=BOOL(SendMessage(fTThwnd, TTM_ADDTOOL, 0, LPARAM(@ti)));
    //再加info图标
    SendMessage(fTThwnd, TTM_SETTITLE, Integer(itInfoIcon), Integer(PChar(title)));
  end
  else //如果为空则删除
    SendMessage(fTThwnd, TTM_DELTOOL, 0, LPARAM(@ti));
end;

调用方法: 

TooltipAddTool(fTThwnd,c.GetWindowHandle,hint,title);

这样就把提示窗口与控件关联在一起了。可以自动显示提示。但是有些情况下提示可能会无效,比如分隔条移动之后。

再加到MouseEnter事件里去关联就确保提示会显示。

procedure TMainForm.ToolTipMouseEnter(Sender: PObj);
var
  n,t:string;
  i:integer;
begin
  t:='’;n:='’;
  if(Assigned(fHintList))then
  begin
    i:=fHintList.IndexOfObj(Sender);
    if(i>=0)then
    begin
      n:=fHintList.Items[i];
    end;
    i:=fTitleList.IndexOfObj(Sender);
    if(i>=0)then
    begin
      t:=fTitleList.Items[i];
    end;
  end;
  TooltipAddTool(fTThwnd, pcontrol(Sender).GetWindowHandle, n,t);
end;
fHintList是事先建立的对象提示关联列表,fTitleList是事先建立的对象标题关联列表。

这是纯用API建立的提示窗口,适用于KOL和VCL,以及其他纯API的应用程序。

使用代码可在www.kicoy.com里下载,需要KOL库支持。

www.kicoy.com

原创粉丝点击