这样的提示框如何做?
有一个树,鼠标停留在树节点后会出现一个提示框,这个提示框包含一些该节点的信息。
有点像pplive的节目树一样,鼠标停留会出现一个电影的提示框,移到下一个节点后又出现(只是内容改变)
请问这样的提示框如何来设计?
建议越多越好,谢谢!
[解决办法]
{以下只是给你写一个演示,用了一个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單元,你找找看