Delphi 之彈出氣泡消息提示

 

//h:窗體中控件的句柄(用在某個控件上提示消息)(要調用的控件句柄)

//text:要提示的文本

//cap:提示框上的標題

//IconType:提示框上顯示的圖標(共三個值。一、二、3分別爲提示、警告、錯誤s)

//t:消息停留的時間(以毫秒計算)

//left: 消息框偏離控件的左距離,設爲0則表示沒有

//top: 消息框偏離控件的頂距離,設爲0則表示沒有
procedure TFrmMain.QiPaoShowMessage(h:HWND;text,cap:string;IconType:integer=1;t:integer=1000;left:Integer=0;top:Integer=0);
var
 r : TRect;                       //是一個記錄(Record),保存了矩形的(左上角右下角兩個點)4個座標或2個點的值。
 hTooltip: Cardinal;    //Cardinal是無符號32位整數 ,取值0到4294967295範圍。
 ti: TToolInfo;
begin
  hToolTip := CreateWindow('Tooltips_Class32',nil,$40,0,0,0,0,0,0,hInstance,nil);
  if hToolTip <> 0 then
  begin
    SetWindowPos(hToolTip, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);  //讓氣泡在最前面
    ti.cbSize := SizeOf(TToolInfo);
    ti.uFlags := TTF_IDISHWND or TTF_TRACK;
    ti.hInst := hInstance;
    ti.lpszText :=pchar(text);
    SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(@ti));
    if (IconType > 3) or (IconType < 0) then IconType:=0;
    SendMessage(hToolTip,WM_USER + 32,IconType,Integer(pchar(cap)));
    GetWindowRect(H,R);             //獲取指定控件的座標,R.Right 、R.Left、R.Bottom、R.Top
    r.Left:=r.Left-left;
    r.Top:=r.Top-top;

 // 定義氣泡位置
    SendMessage(hToolTip,TTM_TRACKPOSITION, 0, MAKELONG((r.Right - r.Left) div 2 + r.Left, (r.Bottom - r.Top) div 2 + r.Top));            SendMessage(hToolTip, TTM_TRACKACTIVATE, Integer(True), Integer(@ti));
    Sleep(t);
    DestroyWindow(hToolTip);
 end;
end;

 

///////////////////////----------參數說明---------------------//////////////////////post

//h:窗體中控件的句柄(用在某個控件上提示消息)(要調用的控件句柄)spa

//text:要提示的文本code

//cap:提示框上的標題blog

//IconType:提示框上顯示的圖標(共三個值。一、二、3分別爲提示、警告、錯誤s)ip

//t:消息停留的時間(以毫秒計算)string

//left: 消息框偏離控件的左距離,設爲0則表示沒有it

//top: 消息框偏離控件的頂距離,設爲0則表示沒有
procedure TFrmMain.QiPaoShowMessage(h:HWND;text,cap:string;IconType:integer=1;t:integer=1000;left:Integer=0;top:Integer=0);
var
 r : TRect;                       //是一個記錄(Record),保存了矩形的(左上角右下角兩個點)4個座標或2個點的值。
 hTooltip: Cardinal;    //Cardinal是無符號32位整數 ,取值0到4294967295範圍。
 ti: TToolInfo;
begin
  hToolTip := CreateWindow('Tooltips_Class32',nil,$40,0,0,0,0,0,0,hInstance,nil);
  if hToolTip <> 0 then
  begin
    SetWindowPos(hToolTip, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);  //讓氣泡在最前面
    ti.cbSize := SizeOf(TToolInfo);
    ti.uFlags := TTF_IDISHWND or TTF_TRACK;
    ti.hInst := hInstance;
    ti.lpszText :=pchar(text);
    SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(@ti));
    if (IconType > 3) or (IconType < 0) then IconType:=0;
    SendMessage(hToolTip,WM_USER + 32,IconType,Integer(pchar(cap)));
    GetWindowRect(H,R);             //獲取指定控件的座標,R.Right 、R.Left、R.Bottom、R.Top
    r.Left:=r.Left-left;
    r.Top:=r.Top-top;class

 // 定義氣泡位置
    SendMessage(hToolTip,TTM_TRACKPOSITION, 0, MAKELONG((r.Right - r.Left) div 2 + r.Left, (r.Bottom - r.Top) div 2 + r.Top));            SendMessage(hToolTip, TTM_TRACKACTIVATE, Integer(True), Integer(@ti));
    Sleep(t);
    DestroyWindow(hToolTip);
 end;
end;im

結果以下所示:top

相關文章
相關標籤/搜索