读书人

这样的提示框怎么做

发布时间: 2012-08-10 12:19:33 作者: rapoo

这样的提示框如何做?
有一个树,鼠标停留在树节点后会出现一个提示框,这个提示框包含一些该节点的信息。
有点像pplive的节目树一样,鼠标停留会出现一个电影的提示框,移到下一个节点后又出现(只是内容改变)

请问这样的提示框如何来设计?
建议越多越好,谢谢!

[解决办法]

Delphi(Pascal) code
{以下只是给你写一个演示,用了一个Panel,你也可以改为使用THintWindow的自己发挥吧}var  Hnt: TPanel;procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);begin  if TreeView1.GetNodeAt(X,Y) <> nil then begin    if not Assigned(Hnt) then Hnt := TPanel.Create(Self);    with Hnt do begin      Caption := TreeView1.GetNodeAt(X,Y).Text;      Left:= Self.Left+X;      Top := Self.Top+Y;      Width := 100;      Height := 20;      Parent := Self;      Show;    end;  end;end;
[解决办法]
这实质是一个自定义的Hint窗体
[解决办法]
我COPY 一个给你,以前不记得是谁发的,CSDN推荐 ,[code=Delphi(Pascal)][/code]

unit Unit2;

interface

uses Windows,Classes, Controls, ExtCtrls, Forms;

type
THintcontrol = class(TComponent)
private
FHint: string;
HintWindow: THintWindow;
HintTimer: TTimer;
FComponent: TControl;
protected
procedure HideHint(Sender: TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Hint: string read FHint write FHint;
property Component: TControl read FComponent write FComponent;
procedure ShowHint(AHint: string); overload;
procedure ShowHint(AHint: string; AComponernt: TWinControl); overload;
end;

implementation

{ THintcontrol }

constructor THintcontrol.Create(AOwner: TComponent);
begin
inherited;
HintWindow := THintWindowClass.Create(nil);
HintWindow.Color := Application.HintColor;
HintTimer := TTimer.Create(nil);
HintTimer.OnTimer := HideHint;
HintTimer.Interval := Application.HintHidePause;
end;

destructor THintcontrol.Destroy;
begin
HintTimer.Free;
HintWindow.Free;
inherited;
end;

procedure THintcontrol.HideHint(Sender: TObject);
begin
TTimer(Sender).Enabled := False;
ShowWindow(HintWindow.Handle, SW_HIDE);
end;

procedure THintcontrol.ShowHint(AHint: string);
var
vpoint: TPoint;
VRect: TRect;
begin
if AHint <> '' then
begin
if not Windows.IsWindowVisible(HintWindow.Handle) or (HintWindow.Caption <> AHint) then
begin
VRect := HintWindow.CalcHintRect(Screen.Width, AHint, nil);
vpoint.X := FComponent.Left;
vpoint.Y := FComponent.Top + FComponent.Height;
vpoint := FComponent.Parent.ClientToScreen(vpoint);
Inc(VRect.Left, vpoint.X);
Inc(VRect.Right, vpoint.X);
Inc(VRect.Top, vpoint.Y);
Inc(VRect.Bottom, vpoint.Y);
HintWindow.ActivateHint(VRect, AHint);
HintTimer.Enabled := True;
end else
ShowWindow(HintWindow.Handle, SW_HIDE);
end;

end;

procedure THintcontrol.ShowHint(AHint: string; AComponernt: FComponernt);
var
vpoint: TPoint;
VRect: TRect;
begin
if AHint <> '' then
begin
if not Windows.IsWindowVisible(FComponernt.Handle) or (HintWindow.Caption <> AHint) then
begin
VRect := HintWindow.CalcHintRect(Screen.Width, AHint, nil);
vpoint.X := AComponernt.Left;
vpoint.Y := AComponernt.Top + AComponernt.Height;
vpoint := AComponernt.Parent.ClientToScreen(vpoint);
Inc(VRect.Left, vpoint.X);
Inc(VRect.Right, vpoint.X);
Inc(VRect.Top, vpoint.Y);
Inc(VRect.Bottom, vpoint.Y);
HintWindow.ActivateHint(VRect, AHint);


HintTimer.Enabled := True;
end else
ShowWindow(HintWindow.Handle, SW_HIDE);
end;

end;

end.



测试代码



procedure TForm1.Button3Click(Sender: TObject);
var
vHint: THintcontrol;
I: Integer;
begin
vHint := THintcontrol.Create(Self);
try
vHint.Component := Edit1;
vHint.ShowHint('Hello ');
finally
vHint.free;
end;
end;

[解决办法]
得上有ShowHint元,你找找看

读书人网 >.NET

热点推荐