请看下面的图,当提示用户某个文本框的内容要输入时,它弹出一个Hint.比我常用的方法:”MessageBox提示,再SetFocus设定光标“ 酷多了。http://www.hxrsoft.net/cool.bmp
解决方案 »
- Delphi7 鼠标放到控件上 不提示控件名了 怎么办?
- delphi7开发的软件怎样支持英文操作系统?
- 单击button1,时可以选择打开硬盘中图片,然后显示在timage中,这样的功能如何实现
- 请教各位大侠:如何获取一个目录下的所有文件名(或者指定类型的文件名)
- 菜鸟问题编译出错
- 碰到这样一个怪问题!不理解怎么回事了!
- 爱你的眼睛请进 曾经问过一个WINDOWS日志的问题 当时号称200分 只给了100分 现在补上!
- 在DbGridEH中如何根据实际数据的宽度来控制列宽
- help!!help!! 来者有份!
- ADO返回的结果集有字段数限制,不能超过255个。如何解决?
- 我是新手 在Delphi中用那些控件能做的象Windows优化大师那样的界面??
- 关于 SHOCKWAVE FLASH1.0 控件的细节问题
至于那个EDIT.网上现成的也多的是.自己看着代码也写一个去吧.
(1)那个控件是会变颜色的,你看到上面是红色,下面字体是黑色
(2)如果每个Edit都要显示这个Hint出来,那么每次显示的时候都要算出要显示Hint提示窗口的位置,这个要多少代码呀?(关键要解决这个问题)
...
private
{ Private declarations } procedure ShowBalloonTip(Control: TWinControl; Icon: Integer; Title: PChar; Text: PWideChar);
public
...
procedure TfrmFir.ShowBalloonTip(Control: TWinControl; Icon: integer; Title: PChar; Text: PWideChar);
const
TOOLTIPS_CLASS = 'tooltips_class32';
TTS_ALWAYSTIP = $01;
TTS_NOPREFIX = $02;
TTS_BALLOON = $40;
TTF_SUBCLASS = $0010;
TTF_TRANSPARENT = $0100;
TTF_CENTERTIP = $0002;
TTM_ADDTOOL = $0400 + 50;
TTM_SETTITLE = (WM_USER + 32);
ICC_WIN95_CLASSES = $000000FF;
type
TOOLINFO = packed record
cbSize: integer;
uFlags: integer;
hwnd: THandle;
uId: integer;
rect: TRect;
hinst: THandle;
lpszText: PWideChar;
lParam: integer;
end;
var
hWndTip: THandle;
ti: TOOLINFO;
hWnd: THandle;
begin
hWnd := Control.Handle;
hWndTip := CreateWindow(TOOLTIPS_CLASS, nil,
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
0, 0, 0, 0, hWnd, 0, HInstance, nil);
if hWndTip <> 0 then
begin
SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
ti.cbSize := SizeOf(ti);
ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS;
ti.hwnd := hWnd;
ti.lpszText := Text;
Windows.GetClientRect(hWnd, ti.rect);
SendMessage(hWndTip, TTM_ADDTOOL, 1, integer(@ti));
SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
end;
end;
...
procedure TfrmFir.Edit1Enter(Sender: TObject);
begin
ShowBalloonTip(Edit1, 1, '提示', '请在此输入数字');
end;
...
改变第二个参数可以改变显示的图标
//需要一个文件
unit _tooltips_class32;interface
uses Windows, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls,TeCanvas,Messages,CommCtrl,SysUtils,Dialogs;
type
TOOLINFO = packed record
cbSize: integer;
uFlags: integer;
hwnd: THandle;
uId: integer;
rect: TRect;
hinst: THandle;
lpszText: PWideChar;
lParam: integer;
end;
var
_hWndTip:HWND;
ti: TOOLINFO;
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: PChar; Text: PWideChar);implementation
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: PChar; Text: PWideChar);
const
TOOLTIPS_CLASS = 'tooltips_class32';
TTS_ALWAYSTIP = $01;
TTS_NOPREFIX = $02;
TTS_BALLOON = $40;
TTF_SUBCLASS = $0010;
TTF_TRANSPARENT = $0100;
TTF_CENTERTIP = $0002;
TTM_ADDTOOL = $0400 + 50;
TTM_SETTITLE = (WM_USER + 32);
ICC_WIN95_CLASSES = $000000FF;
var
hWndTip: THandle;
hWnd: THandle;
begin
hWnd := Control.Handle;
hWndTip := CreateWindow(TOOLTIPS_CLASS, nil,
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
0, 0, 0, 0, hWnd, 0, HInstance, nil);
if hWndTip <> 0 then
begin
_hWndTip:=hWndTip;
SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
ti.cbSize := SizeOf(ti);
ti.uFlags := TTF_TRANSPARENT or TTF_SUBCLASS or TTF_TRACK;
// 去掉TTF_CENTERTIP 加 TTF_TRACK 那么 'tooltips_class32' 不会立即显示!
ti.hwnd := hWnd;
ti.lpszText := Text;
Windows.GetClientRect(hWnd, ti.rect);
inc(ti.rect.Left,120);
SendMessage(hWndTip, TTM_ADDTOOL, 1, integer(@ti));
SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
Control.Tag:=hWndTip;
end;
end;
end.
//下面是使用方式
//然后在你的窗口加, Edit1:Tedit; ,OkButton:TButton;
procedure TAboutBox.OKButtonClick(Sender: TObject);
var
s:String;
Rect:Trect;
begin
if Edit1.Text='' then
begin
s:='输入不可为空!';
_tooltips_class32.ti.lpszText:=PWideChar(s);
Windows.GetWindowRect(edit1.Handle, Rect);//计算位置
OffsetRect(Rect,edit1.Width div 3,edit1.Height div 2);//移动坐标可以根据需要调
Edit1.SetFocus;
//改变 ti.lpszText
SendMessage (self.Tag, TTM_SETTOOLINFOA, 0, longint(@ti));
//设置位置
SendMessage (self.Tag, TTM_TRACKPOSITION, 0,
MAKELPARAM(Rect.Left,Rect.Top));
//弹出
SendMessage(self.Tag,TTM_TRACKACTIVATE,1,longint(@ti));
end;
end;procedure TAboutBox.Edit1Change(Sender: TObject);
begin
//关了
SendMessage(self.Tag,TTM_TRACKACTIVATE,0,0);
end;
procedure TAboutBox.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//关了
SendMessage(self.Tag,TTM_TRACKACTIVATE,0,0);
end;
//给分^_^
不要忘记了!
SendMessage (self.Tag,TTM_SETTIPTEXTCOLOR,RGB(255,0,0),0);
SendMessage (self.Tag,TTM_SETTIPBKCOLOR,RGB(255,0,0),0);
//给分^_^